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

Hologres:DataWorks を使用した MaxCompute データの Hologres への定期的なインポートのベストプラクティス

最終更新日:Mar 01, 2026

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

前提条件

  • Hologres インスタンスを購入し、有効化済みであること。詳細については、「Hologres インスタンスの購入」をご参照ください。

  • MaxCompute を有効化し、プロジェクトを作成済みであること。詳細については、「MaxCompute の有効化」をご参照ください。

  • DataWorks を有効化し、DataWorks ワークスペースを作成済みであること。詳細については、「ワークスペースの作成」をご参照ください。

注意事項

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

データ準備

このトピックでは、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 ID'
) 
PARTITIONED BY (ds STRING) STORED AS ALIORC;

操作手順

  1. MaxCompute データの準備。

    1. DataWorks コンソールにログインします。 ターゲットリージョンで、左側のナビゲーションウィンドウから[データ分析 & サービス] > Data Analysisを選択します。 [データ分析に移動]をクリックします。 次に、左側のナビゲーションウィンドウでimage アイコンをクリックして、SQL Query ページに移動します。

    2. SQL Query ページで、次の SQL 文を入力してパーティションテーブルの 20170112 パーティションのデータを表示し、Run をクリックします。

      SELECT * FROM public_data.dwd_product_movie_basic_info WHERE ds = '20170112';

      クエリ結果は次の図に示されています。

  2. Hologres で外部テーブルを作成します。

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

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

    2. SQL Editor タブの下にある image アイコンをクリックして、Ad-hoc Query ウィンドウを開きます。 クエリウィンドウのツールバーで、お使いの Hologres インスタンスの Instance Nameデータベース を選択します。

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

      次の文は、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 開発ページで、Ad-hoc Query をクリックします。

    2. 新しい Ad-hoc Query ページで、Instance Name および データベース を選択します。次に、以下の文を SQL クエリエディターに入力し、Run をクリックします。

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

      説明

      次の CREATE TABLE 文は簡単な例です。必要に応じて、実際のデータ定義言語 (DDL) 文を作成してください。また、クエリパフォーマンスを最適化するために、テーブルに適切なインデックスを設定する必要があります。

      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 コンソールにログインします。DataStudio ページに移動し、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 メタデータの遅いキャッシュ更新によって引き起こされるデータ整合性の問題を防止するために、Hologres にデータをインポートする前に 30 秒間待機します
        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 メタデータの遅いキャッシュ更新によって引き起こされるデータ整合性の問題を防止するために、Hologres にデータをインポートする前に 30 秒間待機します
        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. DataStudio ページに移動し、Hologres SQL ノードを作成します。詳細については、「Hologres SQL ノード」をご参照ください。

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

      • パーティション子テーブルのデータをクエリ。

        SELECT * FROM holo_dwd_product_movie_basic_info_20170112;
      • パーティション親テーブルの総行数をクエリ。

        SELECT COUNT (*) FROM holo_dwd_product_movie_basic_info;