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

Hologres:DataWorks を使用して MaxCompute データを定期的にインポートするためのベストプラクティス

最終更新日:Nov 09, 2025

DataWorks のスケジューリングタスクを使用すると、データ転送の時間と頻度を設定できます。これにより、プロセス中のデータ整合性と正確性が保証されます。DataWorks を使用して、MaxCompute のパーティションテーブルから Hologres のパーティションテーブルにデータをインポートできます。このアプローチは、両方のプラットフォームの利点を組み合わせ、データ処理の効率と信頼性を向上させます。

前提条件

注意事項

MaxCompute のテナントまたはプロジェクトレベルでスキーマサービスが有効になっていないことを確認してください。スキーマの詳細については、「スキーマ操作」をご参照ください。

手順

  1. MaxCompute データを準備します。

    1. DataWorks コンソールにログインします。ターゲットリージョンに切り替えます。左側のナビゲーションウィンドウで、[Data Analytics And Services] > [Data Analytics] を選択します。[Go To Data Analytics] をクリックします。左側のナビゲーションウィンドウで、image アイコンをクリックして [SQL Query] ページに移動します。

    2. [SQL Query] ページで、SQL 文を入力してパーティションテーブルを作成し、[実行] をクリックします。

      この例では、MaxCompute のパブリックデータセット public_data のパーティションテーブル dwd_product_movie_basic_info を使用します。次のコードは、dwd_product_movie_basic_info のテーブルスキーマを示しています。

      -- MaxCompute パーティションテーブルの DDL
      CREATE TABLE IF NOT EXISTS public_data.dwd_product_movie_basic_info(
        movie_name STRING COMMENT '映画名',
        director STRING COMMENT '監督',
        scriptwriter STRING COMMENT '脚本家',
        area STRING COMMENT '製作地域/国',
        actors STRING COMMENT '俳優',
        `type` STRING COMMENT 'タイプ',
        movie_length STRING COMMENT '映画の長さ',
        movie_date STRING COMMENT '公開日',
        movie_language STRING COMMENT '言語',
        imdb_url STRING COMMENT 'IMDb URL'
      ) 
      PARTITIONED BY (ds STRING) STORED AS ALIORC;
    3. [SQL Query] ページで、次の SQL 文を入力してパーティションテーブルのデータを表示し、[実行] をクリックします。

      20170112 パーティションのデータを表示

      SELECT * FROM public_data.dwd_product_movie_basic_info WHERE ds = '20170112';
  2. Hologres に外部テーブルを作成します。

    Hologres で外部テーブルを作成して、ソースの MaxCompute テーブルをマッピングできます。外部テーブルのフィールドの順序とデータの型は、MaxCompute テーブルのものと一致している必要があります。

    1. HoloWeb コンソール SQL エディター ページにログインします。

    2. [SQLエディター] タブの下にある image アイコンをクリックして、[一時クエリ] ウィンドウを開きます。 クエリウィンドウのツールバーで、Hologres の [インスタンス名][データベース] を選択します。

    3. [Ad-hoc Query] ウィンドウのエディターで、次の文を入力して [実行] をクリックします。

      次の文では、import foreign schema コマンドを使用して、dwd_product_movie_basic_info という名前の Hologres 外部テーブルを作成します。

      import FOREIGN schema public_data limit TO (dwd_product_movie_basic_info) FROM server odps_server INTO public options(if_table_exist 'update');
  3. Hologres で内部テーブルを作成します。

    Hologres で内部テーブルを作成して、データを受信および保存できます。

    1. [HoloWeb] 開発ページで、[New SQL Window] をクリックします。

    2. 新しい [Ad-hoc Query] ページで、[インスタンス名][データベース] を選択します。次に、SQL エディターで次の文を入力し、[実行] をクリックします。

      この例では、MaxCompute のパーティションテーブルを Hologres にインポートします。したがって、Hologres で作成する内部テーブルもパーティションテーブルである必要があります。

      説明

      次の `CREATE TABLE` 文は簡単な例です。必要に応じてテーブルを作成し、適切なインデックスを設定して、クエリパフォーマンスを向上させることができます。

      BEGIN;
      CREATE TABLE "public"."holo_dwd_product_movie_basic_info" (
       "movie_name" text,
       "director" text,
       "scriptwriter" text,
       "area" text,
       "actors" text,
       "type" text,
       "movie_length" text,
       "movie_date" text,
       "movie_language" text,
       "imdb_url" text,
       "ds" text
      )
      PARTITION BY LIST (ds);
      CALL SET_TABLE_PROPERTY('"public"."holo_dwd_product_movie_basic_info"', 'orientation', 'column');
      comment ON COLUMN "public"."holo_dwd_product_movie_basic_info"."movie_name" IS '映画名';
      comment ON COLUMN "public"."holo_dwd_product_movie_basic_info"."director" IS '監督';
      comment ON COLUMN "public"."holo_dwd_product_movie_basic_info"."scriptwriter" IS '脚本家';
      comment ON COLUMN "public"."holo_dwd_product_movie_basic_info"."area" IS '製作地域/国';
      comment ON COLUMN "public"."holo_dwd_product_movie_basic_info"."actors" IS '俳優';
      comment ON COLUMN "public"."holo_dwd_product_movie_basic_info"."type" IS 'タイプ';
      comment ON COLUMN "public"."holo_dwd_product_movie_basic_info"."movie_length" IS '映画の長さ';
      comment ON COLUMN "public"."holo_dwd_product_movie_basic_info"."movie_date" IS '公開日';
      comment ON COLUMN "public"."holo_dwd_product_movie_basic_info"."movie_language" IS '言語';
      comment ON COLUMN "public"."holo_dwd_product_movie_basic_info"."imdb_url" IS 'IMDb ID';
      COMMIT;
  4. 新しいパーティション分割された子テーブルを開発します。

    このステップでは、Hologres SQL モジュールを使用して、パーティションテーブルのジョブをスケジュールします。

    1. DataWorks コンソールにログインし、[データ開発] ページに移動して、Hologres SQL ノードを作成します。詳細については、「Hologres SQL ノード」をご参照ください。

    2. ノードエディターページで、次の文を入力します。

      Hologres は、親パーティションテーブルへのデータの直接書き込みをサポートしていません。MaxCompute ソーステーブルのパーティションキー値に対応する子パーティションテーブルを Hologres に作成する必要があります。その後、パーティションデータを対応する子テーブルにインポートできます。パーティションキー値は、${bizdate} パラメーターによって制御されます。スケジューリングシステムは、定期的なスケジューリングのためにこのパラメーターに値を自動的に割り当てます。スケジューリングパラメーターの詳細については、「サポートされているスケジューリングパラメーターのフォーマット」をご参照ください。

      説明

      インポートされたパーティションデータは、パーティションキー値と一致する必要があります。この例では、パーティションキーは ds です。そうでない場合、エラーが発生します。

      データインポートのロジックはシナリオによって異なる場合があります。参考として、次の 2 つのシナリオが提供されています。必要に応じていずれかを選択できます。

      • シナリオ 1: 新しいパーティションデータをインポートする。

        -- 一時的な子パーティションテーブルを作成します。
        BEGIN;
        CREATE TABLE IF NOT EXISTS "public".tmp_holo_dwd_product_movie_basic_info_${bizdate}  (
         "movie_name" text,
         "director" text,
         "scriptwriter" text,
         "area" text,
         "actors" text,
         "type" text,
         "movie_length" text,
         "movie_date" text,
         "movie_language" text,
         "imdb_url" text,
         "ds" text
        );
        COMMIT;
        
        -- 外部テーブルのデータを更新します。
        import FOREIGN schema public_data limit TO (dwd_product_movie_basic_info) FROM server odps_server INTO public options(if_table_exist 'update');
        
        -- Hologres にインポートする前に 30 秒間待機します。これにより、Hologres メタデータのキャッシュ更新が遅いことによる同期の失敗を防ぎます。
        SELECT pg_sleep(30); 
        
        -- MaxCompute データを一時的な子パーティションテーブルにインポートします。
        INSERT INTO "public".tmp_holo_dwd_product_movie_basic_info_${bizdate} 
        SELECT 
            "movie_name",
            "director",
            "scriptwriter",
            "area",
            "actors",
            "type",
            "movie_length",
            "movie_date",
            "movie_language",
            "imdb_url",
            "ds"
        FROM "public".dwd_product_movie_basic_info
        WHERE ds='${bizdate}';
        
        -- 新しいパーティションデータをインポートします。
        BEGIN;
        
        ALTER TABLE tmp_holo_dwd_product_movie_basic_info_${bizdate} RENAME TO holo_dwd_product_movie_basic_info_${bizdate};
        
        -- 一時的な子パーティションテーブルを親パーティションテーブルにアタッチします。
        ALTER TABLE holo_dwd_product_movie_basic_info ATTACH PARTITION holo_dwd_product_movie_basic_info_${bizdate} FOR VALUES in ('${bizdate}');
        
        COMMIT;
                                            
      • シナリオ 2: 履歴パーティションデータを更新する。

        -- 一時的な子パーティションテーブルを作成します。
        BEGIN;
        CREATE TABLE IF NOT EXISTS "public".tmp_holo_dwd_product_movie_basic_info_${bizdate}  (
         "movie_name" text,
         "director" text,
         "scriptwriter" text,
         "area" text,
         "actors" text,
         "type" text,
         "movie_length" text,
         "movie_date" text,
         "movie_language" text,
         "imdb_url" text,
         "ds" text
        );
        COMMIT;
        
        -- 外部テーブルのデータを更新します。
        import FOREIGN schema public_data limit TO (dwd_product_movie_basic_info) FROM server odps_server INTO public options(if_table_exist 'update');
        
        -- Hologres にインポートする前に 30 秒間待機します。これにより、Hologres メタデータのキャッシュ更新が遅いことによる同期の失敗を防ぎます。
        SELECT pg_sleep(30); 
        
        -- MaxCompute データを一時的な子パーティションテーブルにインポートします。
        INSERT INTO "public".tmp_holo_dwd_product_movie_basic_info_${bizdate} 
        SELECT 
            "movie_name",
            "director",
            "scriptwriter",
            "area",
            "actors",
            "type",
            "movie_length",
            "movie_date",
            "movie_language",
            "imdb_url",
            "ds"
        FROM "public".dwd_product_movie_basic_info
        WHERE ds='${bizdate}';
        
        -- 履歴パーティションデータを更新します。
        BEGIN;
        
        ALTER TABLE IF EXISTS holo_dwd_product_movie_basic_info DETACH PARTITION holo_dwd_product_movie_basic_info_${bizdate};
        
        DROP TABLE IF EXISTS holo_dwd_product_movie_basic_info_${bizdate};
        
        ALTER TABLE tmp_holo_dwd_product_movie_basic_info_${bizdate} RENAME TO holo_dwd_product_movie_basic_info_${bizdate};
        
        -- 子パーティションテーブルを親パーティションテーブルにアタッチします。
        ALTER TABLE holo_dwd_product_movie_basic_info ATTACH PARTITION holo_dwd_product_movie_basic_info_${bizdate} FOR VALUES in ('${bizdate}');
        
        COMMIT;
  5. スケジューリングを設定します。

    [Hologres SQL] エディターページで、ノードエディターの右側にある [スケジュール] をクリックして、ノードのスケジューリングプロパティを設定します。

    説明

    次のパラメーターを変更し、その他はデフォルト値のままにします。

    • 基本プロパティ

      パラメーター

      パラメーター

      bizdate=${yyyymmdd}

    • 時間プロパティ时间属性

      パラメーター

      インスタンス生成モード

      デプロイ後にインスタンスを生成

      再実行プロパティ

      実行成功後は再実行できません。実行失敗後は再実行できます。

      スケジュールされた時間

      00:05

    • スケジューリングの依存関係

      依存関係をルートノードに設定できます。必要に応じて、既存の親ノードを選択することもできます。まず、[コードの解析][はい] に設定し、次に [コードの解析] をクリックします。ルートノードが自動的に解析されます。最後に、[コードの解析][いいえ] に設定します。

  6. スケジューリングタスクを公開します。

    1. [Hologres SQL] エディターページで、ツールバーの 保存 アイコンをクリックしてノードを保存します。

    2. ツールバーの 提交 アイコンをクリックしてノードを送信します。

    3. [新しいバージョンを送信] ダイアログボックスで、[変更の説明] を入力します。

    4. [OK] をクリックします。

  7. オペレーションセンターでタスクを公開します。

    1. [Hologres SQL] エディターページで、ツールバーの右上隅にある [O&M] をクリックします。

    2. [オペレーションセンター] ページで、左側のナビゲーションウィンドウで [定期タスク O&M] > [定期タスク] を選択します。

    3. [定期タスク] ページで、ノードを右クリックし、[データのバックフィル] > [現在のノード] を選択します。

      补数据

    4. 左側のナビゲーションウィンドウで、[定期タスク O&M] > [バックフィルインスタンス] を選択して、実行中のタスクとそのステータスを表示します。

  8. データを表示します。

    タスクが正常に実行されると、対応するパーティションデータのパーティション分割された子テーブルが Hologres に自動的に作成されます。

    1. [データ開発] ページに移動し、Hologres SQL ノードを作成します。詳細については、「Hologres SQL ノード」をご参照ください

    2. ノードエディターページで、次の文を入力してデータをクエリします。

      • パーティション分割された子テーブルのデータを表示します。

        SELECT * FROM holo_dwd_product_movie_basic_info_20170112;
      • 親パーティションテーブルの合計データを表示します。

        SELECT COUNT (*) FROM holo_dwd_product_movie_basic_info;