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

Hologres:MaxCompute へのデータのエクスポート

最終更新日:Aug 22, 2026

外部テーブルを作成して MaxCompute テーブルにマッピングし、INSERT INTO ... SELECT 文を実行して、Hologres から MaxCompute にデータをエクスポートします。このアプローチは、非パーティションテーブルとパーティションテーブルの両方に適用できます。

前提条件

開始する前に、以下の準備が整っていることを確認してください。

  • 開発ツールが接続された、アクティブな MaxCompute プロジェクト。詳細については、「MaxCompute の使用開始」をご参照ください。

  • 開発ツールが接続された Hologres インスタンス (V0.9 以降)。詳細については、「HoloWeb を使用した接続とクエリ」をご参照ください。

制限事項

バージョン要件:

Hologres のバージョン

実行内容

V1.1 以降

INSERT INTO ... SELECT を直接実行します

V0.9 または V0.10

各 INSERT INTO ... SELECT 文の前に SET hg_experimental_enable_write_maxcompute = on; を追加します

V0.9 より前

まずインスタンスをアップグレードします。アップグレードをリクエストするには、「アップグレード準備エラーのトラブルシューティング」をご参照いただくか、Hologres DingTalk グループに参加してサポートを受けてください。詳細については、「オンラインサポートをさらに受けるには」をご参照ください。

データ型のサポート:

Hologres V1.3 以降では、ARRAY 型と DATE 型の MaxCompute へのエクスポートに対応しています。それより前のバージョンでは、複合型 (DATE、ARRAY、MAP、STRUCT) には対応していません。データ型のマッピングについては、「MaxCompute と Hologres 間のデータ型マッピング」をご参照ください。

その他の制限事項:

  • MaxCompute のトランザクションテーブルへのデータエクスポートには対応していません。

  • TIMESTAMPTZ フィールドの場合、有効な値の範囲は 1677-09-21 00:00:00 から 2262-04-12 00:00:00 です。

使用上の注意

  • クロスリージョンでのエクスポート: 対応していますが、同一リージョンにデプロイした方が、ネットワーク接続が安定しているため、パフォーマンスが向上します。

  • パーティションのサポート: Hologres は 1 階層のパーティションのみに対応していますが、MaxCompute の 2 レベルパーティションにデータをエクスポートできます。この場合、MaxCompute のパーティションキーの値と Hologres テーブル内の対応するフィールドを正しくマッピングする必要があります。また、Hologres のパーティションテーブルから MaxCompute の非パーティションテーブルにエクスポートすることもできます。

  • ピーク時: MaxCompute Tunnel SDK は、同時書き込みとデータ量を制限します。クォータ制限に達する可能性を減らすために、ピーク時 (早朝など) のエクスポートは避けてください。

  • フィールドの順序: Hologres テーブルに表示されるのと同じ順序でフィールドを指定してください。

非パーティションテーブルからのデータのエクスポート

エクスポートプロセスは、次の 3 つのステップで構成されます。

  1. エクスポートするデータを含む Hologres 内部テーブルを作成または特定します。

  2. データを受け取るための MaxCompute テーブルを作成します。

  3. MaxCompute テーブルにマッピングする外部テーブルを Hologres に作成し、INSERT INTO ... SELECT を実行してデータをコピーします。

ステップ 1: Hologres 内部テーブルの作成とテストデータの挿入

BEGIN;
CREATE TABLE "public"."bank" (
 "age" int8,
 "job" text,
 "marital" text,
 "education" text,
 "card" text,
 "housing" text,
 "loan" text,
 "contact" text,
 "month" text,
 "day_of_week" text,
 "duration" text,
 "campaign" int8,
 "pdays" float8,
 "previous" float8,
 "poutcome" text,
 "emp_var_rate" float8,
 "cons_price_idx" float8,
 "cons_conf_idx" float8,
 "euribor3m" float8,
 "nr_employed" float8,
 "y" int8
);
COMMIT;

INSERT INTO "public"."bank" VALUES
(32, 'farmer', 'married', 'university.degree', 'yes', 'yes', 'no', 'cellular', 'may', 'mon', '261', 1, 999, 0, 'nonexistent', 1.1, 93.994, -36.4, 4.857, 5191.0, 0),
(45, 'technician', 'single', 'basic.9y', 'no', 'no', 'no', 'telephone', 'jul', 'thu', '149', 2, 6, 2, 'success', -1.8, 94.215, -41.8, 4.962, 5228.1, 1),
(28, 'teacher', 'divorced', 'high.school', 'yes', 'yes', 'yes', 'cellular', 'nov', 'tue', '385', 3, 999, 0, 'nonexistent', -2.9, 93.444, -42.7, 1.044, 4991.6, 0),
(13, 'student', 'married', 'professional.course', 'yes', 'no', 'no', 'cellular', 'aug', 'fri', '672', 1, 12, 5, 'failure', 0.7, 93.918, -37.2, 4.000, 5076.2, 1),
(37, 'doctor', 'single', 'unknown', 'no', 'no', 'no', 'telephone', 'dec', 'wed', '210', 5, 999, 0, 'nonexistent', 1.4, 92.893, -46.2, 1.211, 5099.1, 0);

ステップ 2: MaxCompute テーブルの作成

フィールドの順序とデータ型は、Hologres の内部テーブルと一致させる必要があります。MaxCompute のテーブル構文については、「テーブル操作」をご参照ください。

CREATE TABLE IF NOT EXISTS mc_bank
(
 age             BIGINT COMMENT '年齢',
 job             STRING COMMENT 'ジョブタイプ',
 marital         STRING COMMENT '婚姻状況',
 education       STRING COMMENT '学歴',
 card            STRING COMMENT 'クレジットカードの有無',
 housing         STRING COMMENT '住宅ローン',
 loan            STRING COMMENT 'ローン',
 contact         STRING COMMENT '連絡先',
 month           STRING COMMENT '月',
 day_of_week     STRING COMMENT '曜日',
 duration        STRING COMMENT '期間',
 campaign        BIGINT COMMENT 'キャンペーン中の連絡回数',
 pdays           DOUBLE COMMENT '最終連絡からの経過時間',
 previous        DOUBLE COMMENT '顧客との連絡回数',
 poutcome        STRING COMMENT '前回のマーケティングキャンペーンの結果',
 emp_var_rate    DOUBLE COMMENT '雇用変動率',
 cons_price_idx  DOUBLE COMMENT '消費者物価指数',
 cons_conf_idx   DOUBLE COMMENT '消費者信頼感指数',
 euribor3m       DOUBLE COMMENT 'ユーロ預金金利',
 nr_employed     DOUBLE COMMENT '従業員数',
 y               BIGINT COMMENT '定期預金の有無'
);

ステップ 3: Hologres での外部テーブルの作成

MaxCompute テーブルにマッピングする外部テーブルを Hologres に作成します。または、Import Foreign Schema 文を使用して、外部テーブル定義を自動生成することもできます。

BEGIN;
CREATE FOREIGN TABLE "public"."mapping_bank" (
 "age" int8,
 "job" text,
 "marital" text,
 "education" text,
 "card" text,
 "housing" text,
 "loan" text,
 "contact" text,
 "month" text,
 "day_of_week" text,
 "duration" text,
 "campaign" int8,
 "pdays" float8,
 "previous" float8,
 "poutcome" text,
 "emp_var_rate" float8,
 "cons_price_idx" float8,
 "cons_conf_idx" float8,
 "euribor3m" float8,
 "nr_employed" float8,
 "y" int8
)
SERVER odps_server
OPTIONS (project_name '<maxcompute-project-name>', table_name 'mc_bank');
COMMIT;

パラメーター

説明

project_name

エクスポート先の MaxCompute プロジェクトの名前

table_name

エクスポート先の MaxCompute テーブルの名前

ステップ 4: データのエクスポート

すべてのフィールドのエクスポート:

-- オプション:大規模なオフラインインポートや ETL ジョブには、サーバーレスコンピューティングを使用します。
SET hg_computing_resource = 'serverless';

INSERT INTO mapping_bank
SELECT * FROM bank;

-- 後続のステートメントでサーバーレスコンピューティングリソースが使用されないよう、リセットします。
RESET hg_computing_resource;

選択したフィールドのエクスポート:

INSERT INTO mapping_bank (age, job)
SELECT age, job FROM bank;
説明

Hologres V2.1.17 以降では、サーバーレスコンピューティングがサポートされています。大規模なオフラインデータインポート、大規模な ETL ジョブ、外部テーブルに対する大量のクエリなどのシナリオでは、サーバーレスコンピューティングを使用してこれらのタスクを実行できます。この機能は、インスタンスリソースの代わりに、追加のサーバーレスリソースを使用するため、インスタンスの安定性が向上し、メモリ不足 (OOM) エラーの可能性が低くなります。インスタンスに追加のコンピューティングリソースを確保する必要はなく、実行したタスクに対してのみ課金されます。サーバーレスコンピューティングの詳細については、「サーバーレスコンピューティング」をご参照ください。サーバーレスコンピューティングの使用方法については、「サーバーレスコンピューティングの使用」をご参照ください。

パーティションテーブルからのデータのエクスポート

エクスポートプロセスは、非パーティションテーブルの場合と同じ 3 つのステップで構成されます。主な違いは、MaxCompute テーブルに 1 階層または 2 レベルのパーティションを設定でき、それに応じてパーティションキーの値をマッピングする必要がある点です。

ステップ 1: Hologres パーティションテーブルの作成

BEGIN;
CREATE TABLE "public"."par_bank" (
 "age" int8,
 "job" text,
 "marital" text,
 "education" text,
 "default" text,
 "housing" text,
 "loan" text,
 "contact" text,
 "month" text,
 "day_of_week" text,
 "duration" text,
 "campaign" int8,
 "pdays" float8,
 "previous" float8,
 "poutcome" text,
 "emp_var_rate" float8,
 "cons_price_idx" float8,
 "cons_conf_idx" float8,
 "euribor3m" float8,
 "nr_employed" float8,
 "y" int8,
 "ds" text
)
PARTITION BY list (ds);
COMMIT;

-- 子テーブルを作成します。
CREATE TABLE "public"."par_bank_20190830" PARTITION OF "public"."par_bank" FOR VALUES IN ('20190830');
CREATE TABLE "public"."par_bank_20190901" PARTITION OF "public"."par_bank" FOR VALUES IN ('20190901');

ステップ 2: MaxCompute テーブルの作成

MaxCompute テーブルには、1 階層または 2 レベルのパーティションを設定できます。フィールドとデータ型は、Hologres の内部テーブルと一致させる必要があります。MaxCompute のテーブル構文については、「テーブル操作」をご参照ください。

1 階層パーティション:

CREATE TABLE IF NOT EXISTS mc_par_bank
(
    age            BIGINT COMMENT '年齢',
    job            STRING COMMENT 'ジョブタイプ',
    marital        STRING COMMENT '婚姻状況',
    education      STRING COMMENT '学歴',
    default        STRING COMMENT 'クレジットカードの有無',
    housing        STRING COMMENT '住宅ローン',
    loan           STRING COMMENT 'ローン',
    contact        STRING COMMENT '連絡先',
    month          STRING COMMENT '月',
    day_of_week    STRING COMMENT '曜日',
    duration       STRING COMMENT '期間',
    campaign       BIGINT COMMENT 'キャンペーン中の連絡回数',
    pdays          DOUBLE COMMENT '最終連絡からの経過時間',
    previous       DOUBLE COMMENT '顧客との連絡回数',
    poutcome       STRING COMMENT '前回のマーケティングキャンペーンの結果',
    emp_var_rate   DOUBLE COMMENT '雇用変動率',
    cons_price_idx DOUBLE COMMENT '消費者物価指数',
    cons_conf_idx  DOUBLE COMMENT '消費者信頼感指数',
    euribor3m      DOUBLE COMMENT 'ユーロ預金金利',
    nr_employed    DOUBLE COMMENT '従業員数',
    y              BIGINT COMMENT '定期預金の有無'
)
PARTITIONED BY
(
    ds             STRING
);

ALTER TABLE mc_par_bank ADD IF NOT EXISTS PARTITION (ds='20190830');
ALTER TABLE mc_par_bank ADD IF NOT EXISTS PARTITION (ds='20190901');

2 レベルパーティション:

CREATE TABLE IF NOT EXISTS mc_par_bank_2
(
    age            BIGINT COMMENT '年齢',
    job            STRING COMMENT 'ジョブタイプ',
    marital        STRING COMMENT '婚姻状況',
    education      STRING COMMENT '学歴',
    default        STRING COMMENT 'クレジットカードの有無',
    housing        STRING COMMENT '住宅ローン',
    loan           STRING COMMENT 'ローン',
    contact        STRING COMMENT '連絡先',
    month          STRING COMMENT '月',
    day_of_week    STRING COMMENT '曜日',
    duration       STRING COMMENT '期間',
    campaign       BIGINT COMMENT 'キャンペーン中の連絡回数',
    pdays          DOUBLE COMMENT '最終連絡からの経過時間',
    previous       DOUBLE COMMENT '顧客との連絡回数',
    poutcome       STRING COMMENT '前回のマーケティングキャンペーンの結果',
    emp_var_rate   DOUBLE COMMENT '雇用変動率',
    cons_price_idx DOUBLE COMMENT '消費者物価指数',
    cons_conf_idx  DOUBLE COMMENT '消費者信頼感指数',
    euribor3m      DOUBLE COMMENT 'ユーロ預金金利',
    nr_employed    DOUBLE COMMENT '従業員数'
)
PARTITIONED BY
(
    y              BIGINT,
    ds             STRING
);

ALTER TABLE mc_par_bank_2 ADD IF NOT EXISTS PARTITION (y='1', ds='20190830');
ALTER TABLE mc_par_bank_2 ADD IF NOT EXISTS PARTITION (y='1', ds='20190901');

ステップ 3: Hologres での外部テーブルの作成

MaxCompute の 1 階層パーティションの場合:

BEGIN;
CREATE FOREIGN TABLE "public"."mapping_par_bank" (
 "age" int8,
 "job" text,
 "marital" text,
 "education" text,
 "default" text,
 "housing" text,
 "loan" text,
 "contact" text,
 "month" text,
 "day_of_week" text,
 "duration" text,
 "campaign" int8,
 "pdays" float8,
 "previous" float8,
 "poutcome" text,
 "emp_var_rate" float8,
 "cons_price_idx" float8,
 "cons_conf_idx" float8,
 "euribor3m" float8,
 "nr_employed" float8,
 "y" int8,
 "ds" text
)
SERVER odps_server
OPTIONS (project_name '<maxcompute-project-name>', table_name 'mc_par_bank');
COMMIT;

MaxCompute の 2 レベルパーティションの場合:

BEGIN;
CREATE FOREIGN TABLE "public"."mapping_par_bank_2" (
 "age" int8,
 "job" text,
 "marital" text,
 "education" text,
 "default" text,
 "housing" text,
 "loan" text,
 "contact" text,
 "month" text,
 "day_of_week" text,
 "duration" text,
 "campaign" int8,
 "pdays" float8,
 "previous" float8,
 "poutcome" text,
 "emp_var_rate" float8,
 "cons_price_idx" float8,
 "cons_conf_idx" float8,
 "euribor3m" float8,
 "nr_employed" float8,
 "y" int8,
 "ds" text
)
SERVER odps_server
OPTIONS (project_name '<maxcompute-project-name>', table_name 'mc_par_bank_2');
COMMIT;

パラメーター

説明

project_name

エクスポート先の MaxCompute プロジェクトの名前

table_name

エクスポート先の MaxCompute テーブルの名前

ステップ 4: データのエクスポート

MaxCompute の 1 階層パーティションへのエクスポート:

-- オプション:一括ロードおよび ETL タスクにはサーバーレスコンピューティングを使用します。
SET hg_computing_resource = 'serverless';

-- オプション 1: 親テーブルに挿入し、WHERE 句でパーティションを絞り込みます。
INSERT INTO mapping_par_bank SELECT * FROM "public"."par_bank" WHERE ds='20190830';

-- オプション 2: 子テーブルに直接挿入します。
INSERT INTO mapping_par_bank SELECT * FROM "public"."par_bank_20190901";

-- 後続のステートメントでサーバーレスコンピューティングリソースが使用されないよう、リセットします。
RESET hg_computing_resource;

MaxCompute の 2 レベルパーティションへのエクスポート:

-- オプション:一括ロードおよび ETL タスクにはサーバーレスコンピューティングを使用します。
SET hg_computing_resource = 'serverless';

-- オプション 1: 親テーブルにクエリを実行し、WHERE 句で両方のパーティション階層で絞り込みます。
INSERT INTO mapping_par_bank_2 SELECT * FROM "public"."par_bank" WHERE y='1' AND ds='20190830';

-- オプション 2: 子パーティションテーブルにクエリを実行し、2番目の階層のパーティションで絞り込みます。
INSERT INTO mapping_par_bank_2 SELECT * FROM "public"."par_bank_20190901" WHERE y='1';

-- 後続のステートメントでサーバーレスコンピューティングリソースが使用されないよう、リセットします。
RESET hg_computing_resource;

よくある質問

MaxCompute へのエクスポート時に FlowExceeded エラーが発生するのはなぜですか?

問題の説明: MaxCompute Tunnel SDK サービスのピーク時 (早朝など) に、書き込みタスクが同時書き込みまたはデータ量の制限を超えると発生します。

原因: Hologres は、MaxCompute Tunnel SDK を使用して、高性能なデータエクスポートを実行します。Tunnel SDK は、共有インフラストラクチャを保護するために、同時書き込みリクエストとデータサイズに制限を設けています。詳細については、「Tunnel コマンド」および「MaxCompute の制限事項」をご参照ください。

解決策:

  1. エクスポートを再試行してください。

  2. エラーが解決しない場合は、書き込みの同時実行数を調整してください。

-- 0 からテーブルのシャード数までの間の値に設定します。
SET hg_experimental_write_maxcompute_dop = <count>;