Global Addressing モジュールの Hive UDF の使用

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

  1. Hive クライアントで、必要な Hive データベースにログインします。
  2. Spectrum™ Data & Address Quality for Big Data SDK GAM モジュールの JAR ファイルを登録します。

    ADD JAR /home/hduser/gam/gam.globaladdressvalidation.hive.${project.version}.jar

  3. 実行する住所品質ジョブの Hive UDF のエイリアスを作成します。
    注: 引用符で囲まれている文字列は、このジョブの実行に必要なクラス名です。
    例:
    CREATE TEMPORARY FUNCTION addressvalidation as 'com.pb.bdq.gam.process.hive.addressvalidation.AddressValidationUDF';
  4. Hive フェッチ タスクの変換を有効または無効にします。
    例:
    set hive.fetch.task.conversion=none;
  5. データベース パス、国コード、プロセス タイプなど、エンジン設定を設定するには、hivevar:engineconf を使用します。
    例:
    set hivevar:engineconf='{"productDatabaseInfoList":
                            [{"dbPath":"/home/hduser/ReferenceData/AddressQuality/GAM/GGB062017",
                            "countryCode":"GBR","processType":"VALIDATE"}]}';
  6. hivevar:inputoption パラメータを使用して、入力データの設定を指定します。
    例:
    set hivevar:inputoption='{"casing":"Mixed","matchMode":"Relaxed",
                            "defaultCountry":"GBR","maximumResults":2,"returnInputAddress":false,
                            "returnParsedAddress":false,"returnPrecisionCode":false,"mustMatchAddressNumber":false,
                            "mustMatchStreet":false,"mustMatchCity":false,"mustMatchLocality":false,
                            "mustMatchState":false,"mustMatchStateProvince":false,"mustMatchPostCode":false,
                            "keepMultiMatch":true,"preferPostalOverCity":false,"cityFallback":true,
                            "postalFallback":true,"validationLevel":"ADDRESS"}';
  7. 入力テーブルのヘッダー フィールドをカンマ区切り形式で指定し、変数または設定プロパティに割り当てます。
    set hivevar:header='inputkeyvalue,AddressLine1,AddressLine2,City,postalcode,
    StateProvince,firmname,Country';
  8. ジョブを実行してジョブ出力をコンソールに表示するには、次の例に示すようにクエリを記述します。
    注: このクエリは、各行の入力フィールドを含むキー/値ペアのマップを返します。
    SELECT tmp2.record["HouseNumber"],tmp2.record["Confidence"],tmp2.record["AddressLine1"],
    tmp2.record["StreetName"],tmp2.record["PostalCode"] FROM (SELECT  addressvalidation(${hivevar:engineconf},${hivevar:inputoption},
    ${hivevar:header},inputkeyvalue,addressline1,AddressLine2,city,postalcode,stateprovince,firmname,
    country)as mygp from address_validation) as addressgroup LATERAL VIEW explode(addressgroup.mygp)tmp2 as record;
    ジョブを実行してジョブ出力を指定されたファイルに書き出すには、以下の例に示すようにクエリを記述します。
    INSERT OVERWRITE LOCAL DIRECTORY '/home/hduser/GlobalAddressValidation/'row format delimited 
    FIELDS TERMINATED BY ',' lines terminated by '\n' STORED AS TEXTFILE SELECT * FROM (SELECT addressvalidation(${hivevar:engineconf},
    ${hivevar:inputoption},${hivevar:header},inputkeyvalue,addressline1,AddressLine2,city,postalcode,
    stateprovince,firmname,country)as mygp from address_validation) as addressgroup LATERAL VIEW explode(addressgroup.mygp) tmp2 as record;
    注: 先ほど UDF に対して定義したエイリアスを使用してください。