すべてのプロダクト
Search
ドキュメントセンター

DataWorks:データの処理

最終更新日:Apr 24, 2026

このトピックでは、DataWorks の EMR Hive ノードを使用して、OSS に同期されたユーザー情報テーブル (ods_user_info_d_emr) とアクセスログデータテーブル (ods_raw_log_d_emr) のデータを処理し、ターゲットとなるユーザープロファイルデータを生成する方法について説明します。

前提条件

開始する前に、「データの同期」の手順を完了してください。

ステップ 1:データ処理ワークフローの構築

データの同期」で作成した workshop_emr ワークフローをダブルクリックして、ワークフローオーケストレーションページを開き、さらにワークフローノードを追加します。

dwd_log_info_di_emrdws_user_info_all_di_emrads_user_info_1d_emr という 3 つの EMR Hive ノードを作成して名前を付け、次の図に示すように依存関係を設定します。

次の表に、各ノードとその機能を示します。

ノードタイプ

ノード名

機能

imageEMR Hive ノード

dwd_log_info_di_emr

組み込み関数とカスタム関数 (getregion など) を使用して、生ログテーブル ods_raw_log_d_emr のデータを分割し、dwd_log_info_di_emr複数の列に書き込むことで、OSS の生ログデータをクレンジングします。

imageEMR Hive ノード

dws_user_info_all_di_emr

基本ユーザー情報テーブル (ods_user_info_d_emr) と初期処理済みログデータテーブル (dwd_log_info_di_emr) を集計し、データを dws_user_info_all_di_emr テーブルに書き込みます。

imageEMR Hive ノード

ads_user_info_1d_emr

dws_user_info_all_di_emr テーブルのデータをさらに処理し、そのデータを ads_user_info_1d_emr テーブルに書き込んで、最終的なユーザープロファイルデータを生成します。

ステップ 2:カスタム関数の登録

後続のステップでデータ処理をスムーズに行うために、EMR カスタム関数 (getregion) を登録して、データ同期フェーズで EMR に同期されたログデータ構造をテーブルに解析する必要があります。

EMR JAR リソース (ip2region.jar) のアップロード

  1. リソース JAR パッケージをダウンロードします。

    ip2region-emr.jar をダウンロードします。

  2. EMR JAR リソースを作成します。

    1. DataWorks コンソールの ワークスペースページに移動します。上部のナビゲーションバーで、目的のリージョンを選択します。目的のワークスペースを見つけ、[操作] 列の [ショートカット] > [Data Studio] を選択します。

    2. 左側のナビゲーションウィンドウで、image をクリックしてリソース管理ページに移動します。

    3. Resource Management ページで、New をクリックし、[EMR Jar] リソースタイプを選択して、カスタムリソース名を指定します。

    4. リソース編集ページに移動し、EMR JAR リソースを設定します。次の表に、主要なパラメーターを示します。

      パラメーター

      説明

      Document Source

      ローカルを選択します。

      Document Content

      Click Upload をクリックして、ダウンロードしたリソース JAR パッケージ ip2region-emr.jar をアップロードします。

      Storage Path

      OSS を選択します。

      環境準備フェーズで EMR クラスターを作成する際に設定した OSS バケットを選択します。

      Data Source

      データ同期フェーズで関連付けた計算リソースを選択します。

      Resource Group

      環境準備フェーズで作成したサーバーレスリソースグループを選択します。

    5. Save をクリックし、次に Publish をクリックして、リソースを開発環境と本番環境にデプロイします。

EMR 関数 (getregion) の登録

  1. 関数を作成します。

    作成した EMR JAR リソースを右クリックし、[関数を作成...] > [EMR 関数] を選択し、関数名を getregion に設定して、Confirm をクリックして関数を作成します。

  2. 関数を登録します。

    関数設定ページに移動し、EMR 関数を設定します。次の表に、主要なパラメーターを示します。

    パラメーター

    説明

    Function type

    [その他] を選択します。

    Data Source

    データ同期フェーズで関連付けた計算リソースを選択します。

    The EMR database

    [デフォルト] を選択します。

    Resource Group

    環境準備フェーズで作成したサーバーレスリソースグループを選択します。

    Responsible Person

    必要な権限を持つ所有者を選択できます。

    Class Name

    org.alidata.emr.udf.Ip2Region

    Resource List

    作成した EMR JAR リソースの名前を選択します。

  3. 関数をデプロイします。

    Save をクリックし、次に Publish をクリックして、関数を開発環境と本番環境にデプロイします。

ステップ 3:EMR ノードの設定

データ処理では、各レイヤーの処理ロジックを EMR Hive スケジューリングを通じて実装する必要があります。このチュートリアルでは、データ処理のための完全なサンプル SQL コードを提供します。次のノードを順番に設定する必要があります:dwd_log_info_di_emrdws_user_info_all_di_emrads_user_info_1d_emr

dwd_log_info_di_emr ノードの設定

  1. ノードの内容を編集します。

    ワークフローオーケストレーションページで、EMR Hive ノード dwd_log_info_di_emr にカーソルを合わせ、ノードの上に表示される Open Node をクリックします。表示されたダイアログボックスで Save and Open を選択し、EMR Hive ノード編集ページに移動します。次のサンプル SQL ステートメントを入力します。

    -- ODS レイヤーテーブルの作成
    CREATE TABLE IF NOT EXISTS dwd_log_info_di_emr (
      ip STRING COMMENT 'IP アドレス',
      uid STRING COMMENT 'ユーザー ID',
      `time` STRING COMMENT '時間 yyyymmddhh:mi:ss',
      status STRING COMMENT 'サーバー応答ステータスコード',
      bytes STRING COMMENT 'クライアントに返されたバイト数',
      region STRING COMMENT 'リージョン、IP から派生',
      method STRING COMMENT 'HTTP リクエストタイプ',
      url STRING COMMENT 'URL',
      protocol STRING COMMENT 'HTTP プロトコルバージョン',
      referer STRING COMMENT 'リファラー URL',
      device STRING COMMENT 'デバイスタイプ',
      identity STRING COMMENT 'アクセスタイプ:クローラー フィード ユーザー 不明'
    )
    PARTITIONED BY (
      dt STRING
    );
    
    ALTER TABLE dwd_log_info_di_emr ADD IF NOT EXISTS PARTITION (dt='${bizdate}');
    
    set hive.vectorized.execution.enabled = false;
    INSERT OVERWRITE TABLE dwd_log_info_di_emr PARTITION (dt='${bizdate}')
    SELECT ip
      , uid
      , tm
      , status
      , bytes 
      , getregion(ip) AS region -- カスタム UDF を使用して IP からリージョンを派生させます。
      , regexp_extract(request, '(^[^ ]+) .*') AS method -- 正規表現を使用してリクエストを 3 つのフィールドに分割します。
      , regexp_extract(request, '^[^ ]+ (.*) [^ ]+$') AS url
      , regexp_extract(request, '.* ([^ ]+$)') AS protocol 
      , regexp_extract(referer, '^[^/]+://([^/]+){1}') AS referer  -- 正規表現を使用してリファラーをクレンジングし、より正確な URL を取得します。
      , CASE
        WHEN lower(agent) RLIKE 'android' THEN 'android' -- エージェントからデバイスタイプとアクセスパターンを派生させます。
        WHEN lower(agent) RLIKE 'iphone' THEN 'iphone'
        WHEN lower(agent) RLIKE 'ipad' THEN 'ipad'
        WHEN lower(agent) RLIKE 'macintosh' THEN 'macintosh'
        WHEN lower(agent) RLIKE 'windows phone' THEN 'windows_phone'
        WHEN lower(agent) RLIKE 'windows' THEN 'windows_pc'
        ELSE 'unknown'
      END AS device
      , CASE
        WHEN lower(agent) RLIKE '(bot|spider|crawler|slurp)' THEN 'crawler'
        WHEN lower(agent) RLIKE 'feed'
        OR regexp_extract(request, '^[^ ]+ (.*) [^ ]+$') RLIKE 'feed' THEN 'feed'
        WHEN lower(agent) NOT RLIKE '(bot|spider|crawler|feed|slurp)'
        AND agent RLIKE '^[Mozilla|Opera]'
        AND regexp_extract(request, '^[^ ]+ (.*) [^ ]+$') NOT RLIKE 'feed' THEN 'user'
        ELSE 'unknown'
      END AS identity
      FROM (
        SELECT SPLIT(col, '##@@')[0] AS ip
        , SPLIT(col, '##@@')[1] AS uid
        , SPLIT(col, '##@@')[2] AS tm
        , SPLIT(col, '##@@')[3] AS request
        , SPLIT(col, '##@@')[4] AS status
        , SPLIT(col, '##@@')[5] AS bytes
        , SPLIT(col, '##@@')[6] AS referer
        , SPLIT(col, '##@@')[7] AS agent
        FROM ods_raw_log_d_emr
      WHERE dt = '${bizdate}'
    ) a;
  2. デバッグパラメーターを設定します。

    EMR Hive ノード編集ページの右側で、Run Configuration をクリックし、次のパラメーターを設定します。これらのパラメーターは、ステップ 4Run Configuration を使用したテスト実行に使用されます。

    パラメーター

    説明

    Computing Resources

    環境準備フェーズで関連付けた EMR 計算リソースを選択します。

    Resource Group

    環境準備フェーズで購入したサーバーレスリソースグループを選択します。

    Script Parameters

    設定は不要です。このチュートリアルのサンプルコードでは、${bizdate} を使用してビジネス日付を表します。ステップ 4 でワークフローをデバッグおよび実行する際に、This operation value を特定の定数 (例:20250223) に設定します。タスクの実行では、この定数を使用してタスクで定義された変数を置き換えます。

  3. 設定が完了したら、ツールバーの image アイコンをクリックしてタスクノードを保存します。

dws_user_info_all_di_emr ノードの設定

  1. ノードの内容を編集します。

    ワークフローオーケストレーションページで、EMR Hive ノード dws_user_info_all_di_emr にカーソルを合わせ、ノードの上に表示される Open Node をクリックします。表示されたダイアログボックスで Save and Open を選択し、EMR Hive ノード編集ページに移動します。次のサンプル SQL ステートメントを入力します。

    -- DW レイヤーテーブルの作成
    CREATE TABLE IF NOT EXISTS dws_user_info_all_di_emr (
      uid STRING COMMENT 'ユーザー ID',
      gender STRING COMMENT '性別',
      age_range STRING COMMENT '年齢層',
      zodiac STRING COMMENT '星座',
      region STRING COMMENT 'リージョン、IP から派生',
      device STRING COMMENT 'デバイスタイプ',
      identity STRING COMMENT 'アクセスタイプ:クローラー フィード ユーザー 不明',
      method STRING COMMENT 'HTTP リクエストタイプ',
      url STRING COMMENT 'URL',
      referer STRING COMMENT 'リファラー URL',
      `time` STRING COMMENT '時間 yyyymmddhh:mi:ss'
    )
    PARTITIONED BY (
      dt STRING
    );
    
    ALTER TABLE dws_user_info_all_di_emr ADD IF NOT EXISTS PARTITION (dt='${bizdate}');
    
    INSERT OVERWRITE TABLE dws_user_info_all_di_emr PARTITION (dt='${bizdate}')
    SELECT COALESCE(a.uid, b.uid) AS uid
      , b.gender
      , b.age_range
      , b.zodiac
      , a.region
      , a.device
      , a.identity
      , a.method
      , a.url
      , a.referer
      , a.`time`
    FROM (
      SELECT *
      FROM dwd_log_info_di_emr
      WHERE dt = '${bizdate}'
    ) a
    LEFT OUTER JOIN (
      SELECT *
      FROM ods_user_info_d_emr
      WHERE dt = '${bizdate}'
    ) b
    ON a.uid = b.uid;
  2. デバッグパラメーターを設定します。

    EMR Hive ノード編集ページの右側で、Run Configuration をクリックし、次のパラメーターを設定します。これらのパラメーターは、ステップ 4Run Configuration を使用したテスト実行に使用されます。

    パラメーター

    説明

    Computing Resources

    環境準備フェーズで関連付けた EMR 計算リソースを選択します。

    Resource Group

    環境準備フェーズで購入したサーバーレスリソースグループを選択します。

    Script Parameters

    設定は不要です。このチュートリアルのサンプルコードでは、${bizdate} を使用してビジネス日付を表します。ステップ 4 でワークフローをデバッグおよび実行する際に、This operation value を特定の定数 (例:20250223) に設定します。タスクの実行では、この定数を使用してタスクで定義された変数を置き換えます。

  3. 設定が完了したら、ツールバーの image アイコンをクリックしてタスクノードを保存します。

ads_user_info_1d_emr ノードの設定

  1. ノードの内容を編集します。

    ワークフローオーケストレーションページで、EMR Hive ノード ads_user_info_1d_emr にカーソルを合わせ、ノードの上に表示される Open Node をクリックします。表示されたダイアログボックスで Save and Open を選択し、EMR Hive ノード編集ページに移動します。次のサンプル SQL ステートメントを入力します。

    -- RPT レイヤーテーブルの作成
    CREATE TABLE IF NOT EXISTS ads_user_info_1d_emr (
      uid STRING COMMENT 'ユーザー ID',
      region STRING COMMENT 'リージョン、IP から派生',
      device STRING COMMENT 'デバイスタイプ',
      pv BIGINT COMMENT 'PV',
      gender STRING COMMENT '性別',
      age_range STRING COMMENT '年齢層',
      zodiac STRING COMMENT '星座'
    )
    PARTITIONED BY (
      dt STRING
    );
    
    ALTER TABLE ads_user_info_1d_emr ADD IF NOT EXISTS PARTITION (dt='${bizdate}');
    
    INSERT OVERWRITE TABLE ads_user_info_1d_emr PARTITION (dt='${bizdate}')
    SELECT uid
      , MAX(region)
      , MAX(device)
      , COUNT(0) AS pv
      , MAX(gender)
      , MAX(age_range)
      , MAX(zodiac)
    FROM dws_user_info_all_di_emr
    WHERE dt = '${bizdate}'
    GROUP BY uid;
  2. デバッグパラメーターを設定します。

    EMR Hive ノード編集ページの右側で、Run Configuration をクリックし、次のパラメーターを設定します。これらのパラメーターは、ステップ 4Run Configuration を使用したテスト実行に使用されます。

    パラメーター

    説明

    Computing Resources

    環境準備フェーズで関連付けた EMR 計算リソースを選択します。

    Resource Group

    環境準備フェーズで購入したサーバーレスリソースグループを選択します。

    Script Parameters

    設定は不要です。このチュートリアルのサンプルコードでは、${bizdate} を使用してビジネス日付を表します。ステップ 4 でワークフローをデバッグおよび実行する際に、This operation value を特定の定数 (例:20250223) に設定します。タスクの実行では、この定数を使用してタスクで定義された変数を置き換えます。

  3. 設定が完了したら、ツールバーの image アイコンをクリックしてタスクノードを保存します。

ステップ 4:データの処理

  1. データを処理します。

    ワークフローキャンバスの上部にあるツールバーで、Run をクリックします。この実行のために各ノードで定義されたパラメーター変数の値を設定します (このチュートリアルでは 20250223 を使用しますが、必要に応じて値を変更できます)。OK をクリックし、実行が完了するまで待ちます。

  2. データ処理結果を検証します。

    1. DataWorks コンソールの ワークスペースページに移動します。上部のナビゲーションバーで、目的のリージョンを選択します。目的のワークスペースを見つけ、[操作] 列の [ショートカット] > [Data Studio] を選択します。

    2. Data Studio ページの左側のナビゲーションウィンドウで、image をクリックして DataStudio ページに移動します。左側のディレクトリツリーで、Project Directory を選択します。

    3. 作成した work ディレクトリを右クリックし、[ノードを作成...] > [EMR] > [EMR Hive] を選択し、カスタムの EMR Hive ノード名を指定して、Confirm をクリックしてノードを作成します。

    4. EMR Hive ノード編集ページに移動し、次のスクリプトのビジネス日付を実際のビジネス日付に置き換えて、データ同期の結果を検証します。ods_raw_log_d_emr と ods_user_info_d_emr にインポートされたレコード数を確認します。

      説明

      クエリ文のパーティション列 dt は、実際のビジネス日付に更新する必要があります。たとえば、タスクが 20250223 に実行される場合、ビジネス日付は実行日の前日である 20250222 になります。

      SELECT * FROM ads_user_info_1d_emr WHERE dt=business_date; 
      • 上記のコマンドがデータを返した場合、データ処理は完了です。

      • クエリがゼロ件を返した場合は、This operation value がクエリの dt パーティションのビジネス日付と一致していることを確認してください。値を確認するには、ワークフローの右側にある Runtime Logs ペインを開き、実行の Operation 列にある View をクリックします。実行ログには、ビジネス日付の値が表示されます。例:partition=[dt=20250223]

ステップ 5:ワークフローのデプロイ

タスクは、自動的にスケジューリングされる前に本番環境にデプロイする必要があります。以下の手順に従って、ワークフローを本番環境にデプロイできます。

説明

このチュートリアルでは、ワークフロースケジュール設定でスケジューリングパラメーターがすでに設定されています。デプロイ前に各ノードのスケジューリングパラメーターを個別に設定する必要はありません。

  1. Data Studio の左側のナビゲーションウィンドウで、image をクリックします。Project Directory セクションで、作成したワークフローを見つけてクリックし、ワークフローダッシュボードを開きます。

  2. ページ上部のツールバーで、Publish をクリックしてデプロイパネルを開きます。

  3. Start Release Production をクリックし、デプロイプロセスに従ってデプロイを完了します。

ステップ 6:本番環境でのタスクの実行

デプロイ後、インスタンスが生成され、翌日に実行されます。Supplementary data を使用して、デプロイされたワークフローのデータをバックフィルし、タスクが本番環境で実行できることを確認できます。詳細については、「データのバックフィル」をご参照ください。

  1. タスクがデプロイされた後、右上隅の Operation and Maintenance Center をクリックします。

    または、左上隅の Icon アイコンをクリックし、[すべての製品] > データ開発と О&М > Operation and Maintenance Center (Workflow) を選択します。

  2. 左側のナビゲーションウィンドウで、Auto Triggered Task O&M > 定期的なタスク を選択して 定期的なタスク ページに移動し、workshop_start_emr 仮想ノードをクリックします。

  3. 右側の DAG で、workshop_start_emr ノードを右クリックし、Supplementary data > 現在のノードとダウンストリームノード を選択します。

  4. データをバックフィルするタスクを選択し、ビジネス日付を設定して、Submit and Redirect をクリックします。

  5. データバックフィルページで、すべてのタスクが正常に実行されるまで Refresh をクリックします。

説明

チュートリアルが完了したら、継続的なコストが発生しないように、ノードに スケジューリングの有効期間 を設定するか、ワークフローのルートノード (仮想ノード workshop_start_emr) を [フリーズ] することができます。

次のステップ

  • データの分析:ユーザープロファイル分析が完了したら、データ分析モジュールを使用して処理済みデータをグラフで可視化し、主要な情報を迅速に抽出し、データの背後にあるビジネス動向を把握できます。

  • データ品質の監視:データ処理中に生成されたテーブルに対してデータ品質モニタリングを設定し、ダーティデータを事前に特定してブロックすることで、ダーティデータの影響が広がるのを防ぎます。

  • メタデータの管理:ユーザープロファイル分析ワークフローが完了すると、対応するデータテーブルが EMR Hive ノードに作成されます。データマップモジュールで生成されたテーブルを表示し、リネージを使用してテーブル間の関係を表示できます。

  • API を介したデータの共有:最終的に処理されたデータを取得した後、データサービスモジュールを使用して標準化されたデータサービス API を介してデータを共有および適用し、API を介してデータを受信する他のビジネスモジュールにデータを提供します。