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

Hologres:Import data from MaxCompute partitioned tables

最終更新日:Mar 11, 2026

このトピックでは、MaxCompute パーティションテーブルから Hologres パーティションテーブルにデータをインポートする方法について説明します。

前提条件

  • Hologres インスタンスを購入し、アクティブ化していること。詳細については、「Hologres インスタンスの購入」をご参照ください。

  • MaxCompute をアクティブ化し、MaxCompute プロジェクトを作成していること。詳細については、「MaxCompute のアクティブ化」をご参照ください。

  • DataWorks をアクティブ化し、DataWorks ワークスペースを作成していること。詳細については、「ワークスペースの作成」をご参照ください。

背景情報

Hologres で MaxCompute 外部テーブルを使用することは、データをインポートする一般的な方法です。日常の操作では、データを定期的にインポートする必要があることがよくあります。DataWorks を使用してジョブをスケジュールおよびオーケストレーションできます。これにより、両方のシナリオをカバーする単一のジョブで定期的なインポートが可能になります。詳細については、「DataWorks ジョブの例」をご参照ください。

ジョブが複雑な場合は、DataWorks 移行アシスタントを使用します。サンプルジョブファイルをプロジェクトにインポートします。その後、ビジネスに応じてパラメーターまたはスクリプトを調整します。詳細については、「移行ツールを使用した DataWorks ジョブのインポート」をご参照ください。

注意事項

  • 一時テーブルを使用して原子性を確保します。インポートが完了した後にのみ、一時テーブルをパーティションテーブルにバインドします。これにより、インポートが失敗した場合の手動クリーンアップを回避できます。

  • 子パーティションのデータを更新する場合は、既存の子テーブルを削除し、新しい一時テーブルを単一のトランザクションでアタッチします。これにより、トランザクションの一貫性が確保されます。

  • 移行ツールを使用して DataWorks ジョブをインポートするには、次の要件を満たす必要があります。

    • ご利用の DataWorks エディションは Standard Edition 以降である必要があります。詳細については、「バージョン別の機能詳細」をご参照ください。

    • ご利用の DataWorks ワークスペースは、MaxCompute と Hologres の両方のデータソースにアタッチされている必要があります。詳細については、「ワークスペースの構成」をご参照ください。

詳細な手順

  1. MaxCompute データの準備

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

    2. [SQL クエリ] ページで、次の SQL ステートメントを入力してパーティションテーブルを作成し、Run をクリックします。

      DROP TABLE IF EXISTS odps_sale_detail;
      
      -- sale_detail という名前のパーティションテーブルを作成します。
      CREATE TABLE IF NOT EXISTS odps_sale_detail 
      (
          shop_name STRING
          ,customer_id STRING
          ,total_price DOUBLE
      )
      PARTITIONED BY 
      (
          sale_date STRING
      )
      ;
    3. [SQL クエリ] ページで、パーティションテーブルにデータをインポートするには、次の SQL ステートメントを入力して Run をクリックします。

      -- ソーステーブルにパーティション 20210815 を追加します
      ALTER TABLE odps_sale_detail ADD IF NOT EXISTS PARTITION(sale_date='20210815')
      ;
      
      -- パーティションにデータを挿入します
      INSERT OVERWRITE TABLE odps_sale_detail PARTITION(sale_date='20210815') VALUES 
      ('s1','c1',100.1),
      ('s2','c2',100.2),
      ('s3','c3',100.3)
      ;
      
      -- ソーステーブルにパーティション 20210816 を追加します
      ALTER TABLE odps_sale_detail ADD IF NOT EXISTS PARTITION(sale_date='20210816')
      ;
      
      -- パーティションにデータを挿入します
      INSERT OVERWRITE TABLE odps_sale_detail PARTITION(sale_date='20210816') VALUES 
      ('s1','c1',100.1),
      ('s2','c2',100.2),
      ('s3','c3',100.3)
      ;
      
      -- ソーステーブルにパーティション 20210817 を追加します
      ALTER TABLE odps_sale_detail ADD IF NOT EXISTS PARTITION(sale_date='20210817')
      ;
      
      -- パーティションにデータを挿入します
      INSERT OVERWRITE TABLE odps_sale_detail PARTITION(sale_date='20210817') VALUES 
      ('s1','c1',100.1),
      ('s2','c2',100.2),
      ('s3','c3',100.3)
      ;
      
      -- ソーステーブルにパーティション 20210818 を追加します
      ALTER TABLE odps_sale_detail ADD IF NOT EXISTS PARTITION(sale_date='20210818')
      ;
      
      -- パーティションにデータを挿入します
      INSERT OVERWRITE TABLE odps_sale_detail PARTITION(sale_date='20210818') VALUES 
      ('s1','c1',100.1),
      ('s2','c2',100.2),
      ('s3','c3',100.3)
      ;
  2. Hologres でのテーブル作成

    • 外部テーブルの作成

      1. データベースにログインします。

        1. HoloWeb 開発ページで、Metadata Management をクリックします。

        2. [Metadata Management] ページで、左側のディレクトリツリー内にある作成済みデータベースの名前をダブルクリックし、その後 [OK] をクリックします。データベースへのログイン

      2. 外部テーブルの作成

        1. SQL Editor ページで、左上隅の image アイコンをクリックして、新しい SQL クエリを作成します。

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

          DROP FOREIGN TABLE IF EXISTS odps_sale_detail;
          
          -- 外部テーブルを作成します
          IMPORT FOREIGN SCHEMA maxcompute_project LIMIT to
          (
              odps_sale_detail
          ) 
          FROM SERVER odps_server INTO public 
          OPTIONS(if_table_exist 'error',if_unsupported_type 'error');
    • パーティションテーブル (内部テーブル) の作成

      1. データベースにログインします。

        1. HoloWeb 開発ページで、Metadata Management をクリックします。

        2. Metadata Management ページで、左側のディレクトリツリーで作成したデータベースの名前をダブルクリックし、OK をクリックします。データベースにログイン

      2. パーティションテーブルの作成

        1. SQL Editor ページで、左上隅の image アイコンをクリックして、新しい SQL クエリを作成します。

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

          DROP TABLE IF EXISTS holo_sale_detail;
          
          -- Hologres パーティションテーブル (内部テーブル) を作成します
          BEGIN ;
          CREATE TABLE IF NOT EXISTS holo_sale_detail
          (
              shop_name TEXT
              ,customer_id TEXT 
              ,total_price FLOAT8
              ,sale_date TEXT
          )
          PARTITION BY LIST(sale_date);
          COMMIT;
  3. パーティションデータを Hologres 一時テーブルにインポート

    [Ad-hoc Query] ページで、SQL エディターに次の文を入力します。Run をクリックします。

    この SQL ステートメントは、hologres_test プロジェクトの odps_sale_detail パーティションテーブルから 20210816 パーティションを、Hologres の holo_sale_detail パーティションテーブルの 20210816 パーティションにインポートします。

    説明

    Hologres はバージョン 2.1.17 以降、Serverless Computing をサポートしています。大規模なオフラインインポート、大規模な ETL ジョブ、および大量の外部テーブルクエリの場合、Serverless Computing はインスタンスのリソースではなく、追加のサーバーレスリソースを使用します。これにより、安定性が向上し、メモリ不足 (OOM) エラーが減少します。実行したタスクに対してのみ料金が発生します。詳細については、「Serverless Computing」をご参照ください。使用方法については、「Serverless Computing ユーザーガイド」をご参照ください。

    -- 潜在的な一時テーブルをクリーンアップします
    BEGIN ;
    
    DROP TABLE IF EXISTS holo_sale_detail_tmp_20210816;
    
    COMMIT ;
    
    -- 一時テーブルを作成します
    SET hg_experimental_enable_create_table_like_properties=on;
    
    BEGIN ;
    
    CALL HG_CREATE_TABLE_LIKE ('holo_sale_detail_tmp_20210816', 'select * from holo_sale_detail'); 
    
    COMMIT;
    
    -- (オプション) 大規模なオフラインインポートおよび ETL ジョブに Serverless Computing を使用します
    SET hg_computing_resource = 'serverless';
    
    -- 一時テーブルにデータを挿入します
    INSERT INTO holo_sale_detail_tmp_20210816
    SELECT *
    FROM public.odps_sale_detail
    WHERE sale_date='20210816';
    
    -- 重要でない SQL ステートメントがサーバーレスリソースを使用しないように設定をリセットします。
    RESET hg_computing_resource;
  4. 一時テーブルを Hologres パーティションテーブルにアタッチ

    Ad-hoc Query ページで、SQL エディターに次の文を入力し、Run をクリックします。

    • 古い子テーブルが存在する場合は、最初に削除します。その後、一時テーブルを Hologres パーティションテーブルにアタッチします。

      この SQL ステートメントは、子テーブル holo_sale_detail_20210816 を削除し、一時テーブル holo_sale_detail_tmp_20210816 を Hologres の holo_sale_detail パーティションテーブルの 20210816 パーティションにアタッチします。

      -- 既存の子テーブルを置き換えます
      BEGIN ;
      
      -- 古い子テーブルを削除します
      DROP TABLE IF EXISTS holo_sale_detail_20210816;
      
      -- 一時テーブルの名前を変更します
      ALTER TABLE holo_sale_detail_tmp_20210816 RENAME TO holo_sale_detail_20210816;
      
      -- 指定されたパーティションテーブルに一時テーブルをアタッチします
      ALTER TABLE holo_sale_detail ATTACH PARTITION holo_sale_detail_20210816
      FOR VALUES IN ('20210816')
      ;
      
      COMMIT ;
    • 古い子テーブルが存在しない場合は、一時テーブルを Hologres パーティションテーブルに直接アタッチします。

      この SQL ステートメントは、一時テーブル holo_sale_detail_tmp_20210816holo_sale_detail パーティションテーブルの 20210816 パーティションにアタッチします。

      BEGIN ;
      -- 一時テーブルの名前を変更します
      ALTER TABLE holo_sale_detail_tmp_20210816 RENAME TO holo_sale_detail_20210816;
      -- 指定されたパーティションテーブルに一時テーブルをアタッチします
      ALTER TABLE holo_sale_detail ATTACH PARTITION holo_sale_detail_20210816
      FOR VALUES IN ('20210816');
      COMMIT ;
  5. Hologres パーティションテーブルの ANALYZE

    Ad-hoc Query」ページで、SQL エディターに以下の文を入力します。「Run」をクリックします。

    この SQL ステートメントは、holo_sale_detail パーティションテーブルに対して ANALYZE を実行し、その実行計画を検証します。パーティションテーブルを ANALYZE する場合は、親テーブルのみを ANALYZE します。

    -- 大量のデータをインポートした後、親テーブルで ANALYZE を実行します
    ANALYZE holo_sale_detail;
  6. 期限切れの子パーティションのクリーンアップ (オプション)

    本番環境では、データにはライフサイクルがあります。必要に応じて、期限切れのパーティションをクリーンアップします。

    Ad-hoc Query ページで、SQL エディターに次の文を入力し、Run をクリックします。

    この SQL ステートメントは、20210631 パーティションをクリーンアップします。

    DROP TABLE IF EXISTS holo_sale_detail_20210631;

DataWorks ジョブの例

前述の SQL ステートメントをスケジュールに基づいて実行する必要があることがよくあります。DataWorks を使用してジョブをスケジュールおよびオーケストレーションします。単一のスケジュールされたジョブで両方のシナリオをカバーできます。以下の内容を注意深くお読みください。これは、移行ツールを使用して DataWorks ジョブをインポートする際に、パラメーターまたはスクリプトをカスタマイズするのに役立ちます。全体的なワークフローを以下に示します。

ビジネスフローモジュールの詳細

  • 基本パラメーター

    基本パラメーターは、ワークフローで使用されるすべてのパラメーターを管理します。主要なパラメーターは次のとおりです。

    ID

    パラメーター名

    タイプ

    説明

    1

    datepre31

    変数

    ${yyyymmdd-31}

    期限切れパーティションのクリーンアップを制御します。31 日前のパーティションをクリーンアップします。

    2

    datetime1

    変数

    $bizdate

    パーティションの作成を制御します。

    3

    holo_table_name

    定数

    holo_sale_detail

    Hologres パーティションテーブルの名前。

    4

    odps_project

    定数

    hologres_test

    MaxCompute プロジェクトの名前。

    5

    odps_table_name

    定数

    odps_sale_detail

    MaxCompute パーティションテーブルの名前。

    6

    partition_key

    定数

    sale_date

    MaxCompute のパーティションフィールド。

    システム構成を以下に示します。基础参数

  • パーティションデータを一時テーブルに書き込む

    このステップは Hologres SQL モジュールです。その SQL コードは次のとおりです。

    説明

    Hologres はバージョン 2.1.17 以降、Serverless Computing をサポートしています。大規模なオフラインインポート、大規模な ETL ジョブ、および大量の外部テーブルクエリの場合、Serverless Computing はインスタンスのリソースではなく、追加のサーバーレスリソースを使用します。これにより、安定性が向上し、メモリ不足 (OOM) エラーが減少します。実行したタスクに対してのみ料金が発生します。詳細については、「Serverless Computing」をご参照ください。使用方法については、「Serverless Computing ユーザーガイド」をご参照ください。

    -- 潜在的な一時テーブルをクリーンアップします
    BEGIN ;
    
    DROP TABLE IF EXISTS ${holo_table_name}_tmp_${datetime1};
    
    COMMIT ;
    
    -- 一時テーブルを作成します
    SET hg_experimental_enable_create_table_like_properties=on;
    
    BEGIN ;
    
    CALL HG_CREATE_TABLE_LIKE ('${holo_table_name}_tmp_${datetime1}', 'select * from ${holo_table_name}'); 
    
    COMMIT;
    
    -- 一時テーブルにデータを挿入します
    
    -- (オプション) 大規模なオフラインインポートおよび ETL ジョブに Serverless Computing を使用します
    SET hg_computing_resource = 'serverless';
    
    INSERT INTO ${holo_table_name}_tmp_${datetime1}
    SELECT *
    FROM public.${odps_table_name}
    WHERE ${partition_key}='${datetime1}';
    
    -- 重要でない SQL ステートメントがサーバーレスリソースを使用しないように設定をリセットします
    RESET hg_computing_resource;

    このモジュールの上流に基本パラメーターをバインドして、パラメーター変数を制御します。システム構成を以下に示します。写入分区数据至临时表

  • 子テーブルの置き換え

    このステップは Hologres SQL モジュールです。既存の子テーブルを置き換えます。置き換えプロセスをトランザクションでラップして、一貫性を確保します。その SQL コードは次のとおりです。

    -- 既存の子テーブルを置き換えます
    BEGIN ;
    
    -- 既存の子テーブルを削除します
    DROP TABLE IF EXISTS ${holo_table_name}_${datetime1};
    
    -- 一時テーブルの名前を変更します
    ALTER TABLE ${holo_table_name}_tmp_${datetime1} RENAME TO ${holo_table_name}_${datetime1};
    
    -- 指定されたパーティションテーブルに一時テーブルをアタッチします
    ALTER TABLE ${holo_table_name} ATTACH PARTITION ${holo_table_name}_${datetime1}
    FOR VALUES IN ('${datetime1}');
    
    COMMIT ;

    このモジュールの上流に基本パラメーターをバインドして、パラメーター変数を制御します。システム構成を以下に示します。替换子表

  • パーティションテーブルの統計情報収集

    このステップは Hologres SQL モジュールです。親テーブルの統計情報を収集します。その SQL コードは次のとおりです。

    -- 大量のデータをインポートした後、親テーブルで ANALYZE を実行します
    ANALYZE ${holo_table_name};

    このモジュールの上流に基本パラメーターをバインドして、パラメーター変数を制御します。システム構成を以下に示します。收集分区表的统计信息

  • 期限切れの子テーブルのクリーンアップ

    本番環境では、データにはライフサイクルがあります。必要に応じて、期限切れのパーティションをクリーンアップします。

    たとえば、Hologres で過去 31 日間のパーティションのみを保持します。パラメーター datepre31=${yyyymmdd-31} が以前に設定されたため、期限切れの子テーブルをクリーンアップする SQL コードは次のとおりです。物理パーティションの子テーブルを削除する前に、親テーブルからデタッチします (DETACH PARTITION)。そうしないと、子テーブルは親テーブルにアタッチされたままになります。

    -- 期限切れの子テーブルをクリーンアップします: 最初にデタッチし、次に削除します
    
    BEGIN ;
    
    ALTER TABLE ${holo_table_name} DETACH PARTITION ${holo_table_name}_${datepre31};
    
    DROP TABLE IF EXISTS ${holo_table_name}_${datepre31};
    
    COMMIT ;

    したがって、$bizdate が 20200309 の場合、datepre31 は 20200207 です。これにより、パーティションのクリーンアップの目標が達成されます。

    このモジュールの上流に基本パラメーターをバインドして、パラメーター変数を制御します。システム構成を以下に示します。清理过期子表

移行ツールを使用した DataWorks ジョブのインポート

  • ジョブが複雑な場合は、DataWorks 移行アシスタントを使用します。次のファイルをプロジェクトにインポートします。これにより、上記の DataWorks ジョブが取得されます。その後、ビジネスに応じてパラメーターまたはスクリプトを調整します。

  • ジョブパッケージをダウンロードします。DataWorks ジョブパッケージ

  1. DataWorks 移行アシスタントを開きます。詳細については、「移行アシスタントを開く」をご参照ください。

  2. 移行アシスタントの左側のナビゲーションウィンドウで、DataWorks 移行 > DataWorks インポート をクリックします。

  3. [DataWorks インポート] ページで、右上隅の [インポートタスクの作成] をクリックします。

  4. インポートタスクの作成]ダイアログボックスで、パラメーターを設定します。

    新建导入任务

    パラメーター

    説明

    インポート名

    カスタム名。インポート名には、文字、数字、アンダースコア (_)、およびピリオド (.) のみを含めることができます。

    アップロード方法

    ファイルのアップロード方法。

    • ローカルアップロード: エクスポートされたパッケージファイルが 30 MB 以下の場合にこの方法を使用します。

    • OSS URL: エクスポートされたパッケージファイルが 30 MB を超える場合は、OSS にアップロードします。OSS コンソールのファイル詳細ページから URL をコピーします。OSS URL を DataWorks ワークスペースに貼り付けます。OSS アップロード手順については、「コンソールでファイルをアップロードする」をご参照ください。OSS ダウンロード URL の取得方法については、「ファイルを共有する」をご参照ください。下载链接

    備考

    インポートタスクの簡単な説明。

  5. [OK] をクリックします。[インポートタスク設定] ページに移動します。マッピングを設定します。

  6. 左下隅の [インポートの開始] をクリックします。[確認] ダイアログボックスで、OK をクリックします。

    1. インポートが成功すると、定期的なジョブがデータ開発モジュールに表示されます。

    2. 関連する DDL ステートメントも手動ワークフローに表示されます。