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

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

最終更新日:Apr 10, 2026

外部テーブルマッピングを作成し、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 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 は単一レベルのパーティション分割のみをサポートしていますが、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;

ステップ 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
SELECT age, job FROM bank;
Hologres V2.1.17 以降は、「サーバーレスコンピューティングの概要」で説明されているように、大規模なバッチデータインポート、抽出・変換・ロード (ETL) ジョブ、および大容量の外部テーブルクエリのために追加のサーバーレスコンピューティングリソースを割り当てます。これにより、インスタンスの安定性が向上し、メモリ不足 (OOM) エラーが減少します。課金は、ご利用のタスクで消費されたサーバーレスコンピューティングリソースに対してのみ発生します。使用方法の詳細については、「サーバーレスコンピューティングの有効化」をご参照ください。

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

エクスポートプロセスは、非パーティションテーブルの場合と同じ 3 つのステージに従います。主な違いは、MaxCompute テーブルが単一レベルまたは 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 テーブルは、単一レベルまたは 2 次レベルのパーティションを持つことができます。フィールドとデータ型は、Hologres 内部テーブルのものと一致している必要があります。MaxCompute テーブルの構文については、「テーブル操作」をご参照ください。

単一レベルのパーティション分割:

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 の単一レベルのパーティション分割の場合:

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 の単一レベルのパーティションへのエクスポート:

-- オプション:一括ロードおよび 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 コマンド」および「使用制限」をご参照ください。

解決策:

  1. エクスポートを再試行します。

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

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