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

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

  1. Hive クライアントで、必要な Hive データベースにログインします。
  2. Spectrum™ Data & Address Quality for Big Data SDK UAM モジュールの JAR ファイルを登録します。
    ADD JAR /home/hduser/uam/uam.universaladdress.hive.${project.version}.jar;
  3. 実行する住所品質ジョブの Hive UDF のエイリアスを作成します。
    注: 引用符で囲まれている文字列は、このジョブの実行に必要なクラス名です。
    例:
    CREATE TEMPORARY FUNCTION addressvalidation as 'com.pb.bdq.uam.process.hive.addressvalidation.AddressValidationUDF';
  4. Hive フェッチ タスクの変換を有効または無効にします。
    例:
    set hive.fetch.task.conversion=none;
  5. エンジン設定を設定するには、hivevar:engineconf を使用します。これには、データベース設定、COBOL 実行時パス、プロセス タイプ、DPV DB パス、suiteLinkDBPath、ewsDBPath、rdiDBPath、lacsDBPath、プリロード タイプなどの詳細が含まれます。
    例:
    set hivevar:engineconf='{"referenceData":{"dataDir":"/user/hduser/ReferenceData/
                            AddressQuality/UAM/Data.zip","referenceDataPathLocation":"HDFS"},"cobolRuntimePath":"",
                            "modulesDir":"","dpvDbPath":"/user/hduser/ReferenceData/AddressQuality/UAM/Data.zip",
                            "suiteLinkDBPath":"/user/hduser/ReferenceData/AddressQuality/UAM/Data.zip","ewsDBPath":
                            "/user/hduser/ReferenceData/AddressQuality/UAM/Data.zip","rdiDBPath":null,"lacsDBPath":
                            "/user/hduser/ReferenceData/AddressQuality/UAM/Data.zip"}';
  6. hivevar:inputoption パラメータを使用して、入力データの設定を指定します。
    例:
    set hivevar:inputoption='{"casing":"Mixed","matchMode":"Relaxed","defaultCountry":"GBR",
                            "maximumResults":2,"returnInputAddress":false,
                            "returnParsedAddress":false,"returnPrecisionCode":false,"returnMatchScore":true,
                            "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. hivevar:generalconf を使用して、cacheSize、maxAddressObjectCount、maxMemoryUsageMB などの全般的な環境設定を設定します。
    例:
    set hivevar:generalconf='{"cacheSize":"LARGE","maxThreadCount":8,"maxAddressObjectCount":8,
    "rangesToExpand":"NONE","flexibleRangeExpansion":"ON","enableTransactionLogging":false,
    "maxMemoryUsageMB":1024,"verbose":false}';
  8. Hive ジョブで使用される適切な検証レベルを指定します。現時点では、住所検証のみがサポートされています。この値は VALIDATE に設定します。
    例を次に示します。
    set hivevar:processtype='VALIDATE';
  9. 入力テーブルのヘッダー フィールドをカンマ区切り形式で指定し、変数または設定プロパティに割り当てます。
    set hivevar:header='inputkeyvalue,AddressLine1,AddressLine2,City,postalcode,
    StateProvince,firmname,Country';
  10. ジョブを実行してジョブ出力をコンソールに表示するには、次の例に示すようにクエリを記述します。
    注: このクエリは、各行の入力フィールドを含むキー/値ペアのマップを返します。
    SELECT tmp2.record["HouseNumber"],tmp2.record["Confidence"],tmp2.record["AddressLine1"],
    tmp2.record["StreetName"],tmp2.record["PostalCode"],tmp2.record["ElementInputStatus"],
    tmp2.record["MailabilityScore"] FROM ( SELECT  globalvalidation(${hivevar:engineconf},
    ${hivevar:generalconf},${hivevar:inputconf},${hivevar:unlockCode},${hivevar:header},recordid,
    addressline1,city,stateprovince,postalcode,country) as mygp from address)
    as addressgroup LATERAL VIEW explode(addressgroup.mygp) tmp2 as record ;
    ジョブを実行してジョブ出力を指定されたファイルに書き出すには、以下の例に示すようにクエリを記述します。
    INSERT OVERWRITE LOCAL DIRECTORY '/home/hadoop/GlobalAddressing/' row format delimited
    FIELDS TERMINATED BY ',' lines terminated by '\n' STORED AS TEXTFILE
    SELECT tmp2.record["HouseNumber"],tmp2.record["Confidence"],tmp2.record["AddressLine1"],
    tmp2.record["StreetName"],tmp2.record["PostalCode"],tmp2.record["ElementInputStatus"],
    tmp2.record["MailabilityScore"] FROM ( SELECT  globalvalidation(${hivevar:engineconf},
    ${hivevar:generalconf},${hivevar:inputconf},${hivevar:unlockCode},${hivevar:header},
    recordid,addressline1,city,stateprovince,postalcode,country) as mygp from address)
    as addressgroup LATERAL VIEW explode(addressgroup.mygp) tmp2 as record ;
    注: 先ほど UDF に対して定義したエイリアスを使用してください。