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

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

  1. Hive クライアントで、必要な Hive データベースにログインします。
  2. Spectrum™ Data & Address Quality for Big Data SDK UNM モジュールの JAR ファイルを登録します。
    ADD JAR <Directory path>/unm.hive.${project.version}.jar;
  3. 実行するデータ品質ジョブの Hive UDF のエイリアスを作成します。
    例:
    CREATE TEMPORARY FUNCTION opennameparser as 'com.pb.bdq.unm.process.hive.
    opennameparser.OpenNameParserUDF';
  4. リファレンス データのパスを指定します。
    • リファレンス データが HDFS 上にある場合
      • リファレンス データがジョブ用の作業ディレクトリにダウンロードされる場合
        • リファレンス データがアーカイブされていないファイル形式の場合は、リファレンス ディレクトリを次のように設定します。
          set hivevar:refereceDataDetails='{"referenceDataPathLocation":"HDFS",
          "dataDir":"./referenceData","dataDownloader":{"dataDownloader":"DC"}}';
        • リファレンス データがアーカイブ済みの形式の場合は、リファレンス ディレクトリを次のように設定します。
          set hivevar:refereceDataDetails='{"referenceDataPathLocation":"HDFS",
          "dataDir":"./referenceData.zip","dataDownloader":
          {"dataDownloader":"DC"}}';
      • リファレンス データがジョブ用のローカル ノードにダウンロードされる場合この場合は、リファレンス データ ディレクトリを次のように設定します。
        set hivevar:refereceDataDetails='{"referenceDataPathLocation":"HDFS",
        "dataDir":"/home/data/dm/referenceData","dataDownloader":{"dataDownloader":
        "HDFS","localFSRepository":"/local/download"}}';
    • リファレンス データがローカル パスにある場合: クラスタの各ノードでデータが同じパスに配置されるようにします。

      リファレンス ディレクトリを次のように設定します。

      set hivevar:refereceDataDetails='{"referenceDataPathLocation":"LocaltoDataNodes",
      "dataDir":"/home/data/referenceData"}';
  5. ジョブの環境設定と詳細情報を指定して、それぞれの変数または設定プロパティに代入します。
    注: ルールは JSON 形式である必要があります。

    例を次に示します。

    set hivevar:rule='{"name":"name", "culture":"", "splitConjoinedNames":false, "shortcutThreshold":0, "parseNaturalOrderPersonalNames":false, "naturalOrderPersonalNamesPriority":1,
    "parseReverseOrderPersonalNames":false, "reverseOrderPersonalNamesPriority":2, "parseConjoinedNames":false, "naturalOrderConjoinedPersonalNamesPriority":3, "reverseOrderConjoinedPersonalNamesPriority":4, "parseBusinessNames":false, "businessNamesPriority":5}';
    注: それぞれのジョブ環境設定の設定プロパティを使用してください。例えば、それぞれのサンプル HQL ファイルに記載されている pb.bdq.match.rulepb.bdq.match.express.columnpb.bdq.consolidation.sort.field などです。
  6. 入力テーブルのヘッダー フィールドをカンマ区切り形式で指定し、変数または設定プロパティに割り当てます。
    set hivevar:header='inputrecordid,Name,nametype';
  7. ジョブを実行してジョブ出力をコンソールに表示するには、次の例に示すようにクエリを記述します。
    select adTable.adid["Name"], adTable.adid["NameScore"], adTable.adid["CultureCode"] from (select opennameparser(${hivevar:rule}, ${hivevar:refdir}, ${hivevar:header},
    inputrecordid, name, nametype) as tmp1 from nameparser) as tmp LATERAL VIEW explode(tmp1) adTable AS adid;
    ジョブを実行してジョブ出力を指定されたファイルに書き出すには、以下の例に示すようにクエリを記述します。
    INSERT OVERWRITE LOCAL DIRECTORY '/home/hadoop/opennameparser/' row format delimited FIELDS TERMINATED BY ',' lines terminated by '\n' STORED AS TEXTFILE 
    select adTable.adid["Name"], adTable.adid["NameScore"], adTable.adid["CultureCode"] from (select opennameparser(${hivevar:rule}, ${hivevar:refdir},
    ${hivevar:header}, inputrecordid, name, nametype) as tmp1 from nameparser) as tmp LATERAL VIEW explode(tmp1) adTable AS adid;
    注: 先ほど UDF に対して定義したエイリアスを使用してください。