カスタム Groovy スクリプト Hive UDF の使用
Hive UDF の各ジョブを実行する場合は、Hive クライアントでの以下のステップの個別実行を 1 つのセッションの範囲内で行うことも、必要なすべてのステップをまとめた HQL ファイルを作成してそれを一度に実行することもできます。
- Hive クライアントで、必要な Hive データベースにログインします。
-
Spectrum™ Data & Address Quality for Big Data SDK DIM モジュールの JAR ファイルを登録します。
ADD JAR /home/hduser/script/dim.hive.${project.version}.jar;
-
CustomGroovyScript
ジョブの Hive UDF のエイリアスを作成します。注: 引用符で囲まれている文字列は、このジョブの実行に必要なクラス名です。例を次に示します。CREATE TEMPORARY FUNCTION customscript as 'com.pb.bdq.dim.process.hive.script.groovy.CustomGroovyScriptExecutionUDF';
-
Hive フェッチ タスクの変換を有効または無効にします。
以下に例を示します。
set hive.fetch.task.conversion=none;
-
hivevar:defaultConfiguration
を使用して、日付、日時、時刻のパターンを指定します。この設定を該当する変数に割り当てます。set hivevar:defaultConfiguration='{"datePattern":"M/d/yy", "dateTimePattern":"M/d/yy h:mm a","timePattern":"h:mm a"}';
注: これはオプションの設定です。 -
入力テーブルのヘッダー フィールドをカンマ区切り形式で指定し、変数に割り当てます。
例を次に示します。
set hivevar:header='busniessname,recordid';
-
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"}]}]';
-
ジョブを実行してジョブ出力をコンソールに表示するには、次の例に示すようにクエリを記述します。
注: このクエリは、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 に対して定義したエイリアスを使用してください。