Data Normalization モジュールの Hive UDF の使用

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

  1. Hive クライアントで、必要な Hive データベースにログインします。
  2. Spectrum™ Data & Address Quality for Big Data SDK DNM モジュールの JAR ファイルを登録します。
    ADD JAR <Directory path>/dnm.hive.${project.version}.jar;
  3. 実行するデータ品質ジョブの Hive UDF のエイリアスを作成します。
    注: 引用符で囲まれている文字列は、このジョブの実行に必要なクラス名です。
    例:
    CREATE TEMPORARY FUNCTION tablelookup as 'com.pb.bdq.dnm.process.hive.tablelookup.TableLookUpUDF';
  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='{"rules":[{"action":"Standardize", "source":"CityCode", "tableName":"State Name Abbreviations",
    "lookupMultipleWordTerms":false, "lookupIndividualTermsWithinField":false, "destination":"CityCode"}]}';
    注: それぞれのジョブ環境設定の設定プロパティを、必ず使用してください。例えば、それぞれのサンプル HQL ファイルに記載されている pb.bdq.match.rulepb.bdq.match.express.columnpb.bdq.consolidation.sort.field などです。
  6. 入力テーブルのヘッダー フィールドをカンマ区切り形式で指定し、変数または設定プロパティに割り当てます。
    set hivevar:header ='AccountDescription,Address,ApartmentNumber,CityCode';
  7. ジョブを実行してジョブ出力をコンソールに表示するには、次の例に示すようにクエリを記述します。
    SELECT bar.ret["StandardizationTermIdentified"],
    	bar.ret["accountdescription"],
    	bar.ret["address"],
    	bar.ret["apartmentnumber"],
    	bar.ret["citycode"] 
    FROM (
    	SELECT tablelookup(${hivevar:rule}, ${hiveconf:refdir}, ${hiveconf:header}, accountdescription, address, apartmentnumber, citycode) 
    	AS ret 
    	FROM citizen_data
    	) bar;
    ジョブを実行してジョブ出力を指定されたファイルに書き出すには、以下の例に示すようにクエリを記述します。
    INSERT OVERWRITE LOCAL DIRECTORY '/home/hadoop/TableLookup/' row format delimited FIELDS TERMINATED BY ',' lines terminated by '\n' STORED AS TEXTFILE 
    SELECT bar.ret["StandardizationTermIdentified"],
    	bar.ret["accountdescription"],
    	bar.ret["address"],
    	bar.ret["apartmentnumber"],
    	bar.ret["citycode"] 
    FROM (
    	SELECT tablelookup(${hiveconf:rule}, ${hiveconf:refdir}, ${hiveconf:header}, accountdescription, address, apartmentnumber, citycode) 
    	AS ret 
    	FROM citizen_data
    	) bar;
    注: 先ほど UDF に対して定義したエイリアスを使用してください。