カスタム Groovy スクリプト Hive UDF の使用

Hive UDF の各ジョブを実行する場合は、Hive クライアントでの以下のステップの個別実行を 1 つのセッションの範囲内で行うことも、必要なすべてのステップをまとめた HQL ファイルを作成してそれを一度に実行することもできます。

  1. Hive クライアントで、必要な Hive データベースにログインします。
  2. Spectrum™ Data & Address Quality for Big Data SDK DIM モジュールの JAR ファイルを登録します。
    ADD JAR /home/hduser/script/dim.hive.${project.version}.jar;
  3. CustomGroovyScript ジョブの Hive UDF のエイリアスを作成します。
    注: 引用符で囲まれている文字列は、このジョブの実行に必要なクラス名です。
    例を次に示します。
    CREATE TEMPORARY FUNCTION customscript as
    'com.pb.bdq.dim.process.hive.script.groovy.CustomGroovyScriptExecutionUDF';
  4. Hive フェッチ タスクの変換を有効または無効にします。
    以下に例を示します。
    set hive.fetch.task.conversion=none;
  5. hivevar:defaultConfiguration を使用して、日付、日時、時刻のパターンを指定します。この設定を該当する変数に割り当てます。
    set hivevar:defaultConfiguration='{"datePattern":"M/d/yy",
    "dateTimePattern":"M/d/yy h:mm a","timePattern":"h:mm a"}';
    注: これはオプションの設定です。
  6. 入力テーブルのヘッダー フィールドをカンマ区切り形式で指定し、変数に割り当てます。
    例を次に示します。
    set hivevar:header='busniessname,recordid';
  7. hivevar:scriptConfigurations を使用して、Groovy スクリプトの設定を行います。groovyScriptFile、inputFields、outputFields などの詳細が含まれています。
    以下に例を示します。
    set hivevar:scriptConfigurations = 
    '[{"groovyScriptFile":"/home/hduser/script/groovy_hive.txt",
    "inputFields":[{"name":"busniessname","type":"string"},
    {"name":"recordid","type":"integer"}],
    "outputFields":[{"name":"outtan","type":"double"}]},
    {"groovyScriptFile":"/home/hduser/script/groovy2.txt",
    "inputFields":[],
    "outputFields":[{"name":"outtan2","type":"double"}]}]';
  8. ジョブを実行してジョブ出力をコンソールに表示するには、次の例に示すようにクエリを記述します。
    注: このクエリは、Groovy スクリプトによって変換された出力フィールドを返します。
    SELECT customscript(${hivevar:scriptConfigurations},"",
    ${hivevar:header}, InputKeyValue, AddressLine1) FROM groovy_tc1;
    ジョブを実行して出力を指定されたファイルに書き出すには、以下の例に示すようにクエリを記述します。
    INSERT OVERWRITE LOCAL DIRECTORY '/home/hduser/script/output' 
    row format delimited FIELDS TERMINATED BY ',' lines TERMINATED BY '\n' 
    STORED AS TEXTFILE SELECT * FROM (SELECT customscript
    (${hivevar:scriptConfigurations},
    ${hivevar:defaultConfiguration},${hivevar:header},
    InputKeyValue, AddressLine1) 
    as mygp FROM groovy_tc1 ) record;
    !q;
    注: 先ほど UDF に対して定義したエイリアスを使用してください。