All Products
Search
Document Center

Hologres:Ekspor data ke MaxCompute

Last Updated:Apr 11, 2026

Ekspor data dari Hologres ke MaxCompute dengan membuat pemetaan tabel eksternal dan menjalankan pernyataan INSERT INTO ... SELECT. Pendekatan ini berlaku untuk tabel non-partisi maupun tabel partisi.

Prasyarat

Sebelum memulai, pastikan Anda telah:

Batasan

Persyaratan versi:

Versi Hologres

Tindakan yang harus dilakukan

V1.1 atau lebih baru

Jalankan INSERT INTO ... SELECT secara langsung

V0.9 atau V0.10

Tambahkan SET hg_experimental_enable_write_maxcompute = on; sebelum setiap pernyataan INSERT INTO ... SELECT

Sebelum V0.9

Upgrade instans Anda terlebih dahulu.

Dukungan tipe data:

Hologres V1.3 dan versi lebih baru mendukung ekspor tipe ARRAY dan DATE ke MaxCompute. Versi sebelumnya tidak mendukung tipe kompleks: DATE, ARRAY, MAP, dan STRUCT. Untuk pemetaan tipe data, lihat Pemetaan tipe data antara MaxCompute dan Hologres.

Batasan lainnya:

  • Ekspor data ke tabel transaksional di MaxCompute tidak didukung.

  • Untuk bidang TIMESTAMPTZ, nilai yang valid berkisar dari 1677-09-21 00:00:00 hingga 2262-04-12 00:00:00.

Catatan penggunaan

  • Ekspor lintas wilayah: Didukung, tetapi penerapan dalam satu wilayah memberikan kinerja lebih baik karena koneksi jaringan lebih stabil.

  • Dukungan partisi: Hologres hanya mendukung partisi tingkat tunggal, tetapi Anda dapat mengekspor data ke partisi tingkat kedua MaxCompute. Hal ini memerlukan pemetaan yang tepat antara nilai kunci partisi MaxCompute dan bidang yang sesuai di tabel Hologres. Anda juga dapat mengekspor dari tabel partisi Hologres ke tabel non-partisi MaxCompute.

  • Jam sibuk: SDK MaxCompute Tunnel membatasi konkurensi penulisan dan volume data. Hindari menjalankan ekspor selama jam sibuk (misalnya pagi hari) untuk mengurangi risiko melebihi kuota.

  • Urutan bidang: Tentukan bidang dalam urutan yang sama seperti yang muncul di tabel Hologres.

Ekspor data dari tabel non-partisi

Proses ekspor terdiri dari tiga tahap:

  1. Buat atau identifikasi tabel internal Hologres yang berisi data yang akan diekspor.

  2. Buat tabel MaxCompute untuk menerima data tersebut.

  3. Buat tabel eksternal di Hologres yang memetakan ke tabel MaxCompute, lalu jalankan INSERT INTO ... SELECT untuk menyalin data.

Langkah 1: Buat tabel internal 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;

Langkah 2: Buat tabel MaxCompute

Urutan bidang dan tipe data harus sesuai dengan tabel internal Hologres. Untuk sintaks tabel MaxCompute, lihat Operasi tabel.

CREATE TABLE IF NOT EXISTS mc_bank
(
 age             BIGINT COMMENT 'Age',
 job             STRING COMMENT 'Job type',
 marital         STRING COMMENT 'Marital status',
 education       STRING COMMENT 'Education level',
 card            STRING COMMENT 'Credit card available or not',
 housing         STRING COMMENT 'Mortgage',
 loan            STRING COMMENT 'Loan',
 contact         STRING COMMENT 'Contact information',
 month           STRING COMMENT 'Month',
 day_of_week     STRING COMMENT 'Day of the week',
 duration        STRING COMMENT 'Duration',
 campaign        BIGINT COMMENT 'Number of contacts during the campaign',
 pdays           DOUBLE COMMENT 'Time elapsed since the last contact',
 previous        DOUBLE COMMENT 'Number of contacts with the customer',
 poutcome        STRING COMMENT 'Result of the previous marketing campaign',
 emp_var_rate    DOUBLE COMMENT 'Employment change rate',
 cons_price_idx  DOUBLE COMMENT 'Consumer price index',
 cons_conf_idx   DOUBLE COMMENT 'Consumer confidence index',
 euribor3m       DOUBLE COMMENT 'Euro deposit rate',
 nr_employed     DOUBLE COMMENT 'Number of employees',
 y               BIGINT COMMENT 'Time deposit available or not'
);

Langkah 3: Buat tabel eksternal di Hologres

Buat tabel eksternal di Hologres yang memetakan ke tabel MaxCompute. Atau, gunakan pernyataan Import Foreign Schema untuk menghasilkan definisi tabel eksternal secara otomatis.

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;

Parameter

Deskripsi

project_name

Nama proyek MaxCompute tujuan

table_name

Nama tabel MaxCompute tujuan

Langkah 4: Ekspor data

Ekspor semua bidang:

-- Opsional: gunakan Serverless Computing untuk impor offline skala besar dan pekerjaan ETL.
SET hg_computing_resource = 'serverless';

INSERT INTO mapping_bank
SELECT * FROM bank;

-- Reset untuk berhenti menggunakan sumber daya komputasi tanpa server pada pernyataan berikutnya.
RESET hg_computing_resource;

Ekspor bidang tertentu:

INSERT INTO mapping_bank
SELECT age, job FROM bank;
Hologres V2.1.17 dan versi lebih baru mendukung Ikhtisar komputasi tanpa server, yang mengalokasikan sumber daya komputasi tanpa server tambahan untuk impor data batch skala besar, pekerjaan ekstrak, transformasi, dan muat (ETL), serta kueri tabel eksternal volume besar. Hal ini meningkatkan stabilitas instans dan mengurangi error out of memory (OOM). Anda hanya dikenai biaya berdasarkan sumber daya komputasi tanpa server yang dikonsumsi oleh tugas Anda. Untuk detail penggunaan, lihat Aktifkan komputasi tanpa server.

Ekspor data dari tabel partisi

Proses ekspor mengikuti tiga tahap yang sama seperti pada tabel non-partisi. Perbedaan utamanya adalah tabel MaxCompute dapat memiliki partisi tingkat tunggal atau tingkat kedua, dan Anda harus memetakan nilai kunci partisi secara sesuai.

Langkah 1: Buat tabel partisi 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;

-- Buat tabel anak.
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');

Langkah 2: Buat tabel MaxCompute

Tabel MaxCompute dapat memiliki partisi tingkat tunggal atau tingkat kedua. Bidang dan tipe data harus sesuai dengan tabel internal Hologres. Untuk sintaks tabel MaxCompute, lihat Operasi tabel.

Partisi tingkat tunggal:

CREATE TABLE IF NOT EXISTS mc_par_bank
(
    age            BIGINT COMMENT 'Age',
    job            STRING COMMENT 'Job type',
    marital        STRING COMMENT 'Marital status',
    education      STRING COMMENT 'Education level',
    default        STRING COMMENT 'Credit card available or not',
    housing        STRING COMMENT 'Mortgage',
    loan           STRING COMMENT 'Loan',
    contact        STRING COMMENT 'Contact information',
    month          STRING COMMENT 'Month',
    day_of_week    STRING COMMENT 'Day of the week',
    duration       STRING COMMENT 'Duration',
    campaign       BIGINT COMMENT 'Number of contacts during the campaign',
    pdays          DOUBLE COMMENT 'Time elapsed since the last contact',
    previous       DOUBLE COMMENT 'Number of contacts with the customer',
    poutcome       STRING COMMENT 'Result of the previous marketing campaign',
    emp_var_rate   DOUBLE COMMENT 'Employment change rate',
    cons_price_idx DOUBLE COMMENT 'Consumer price index',
    cons_conf_idx  DOUBLE COMMENT 'Consumer confidence index',
    euribor3m      DOUBLE COMMENT 'Euro deposit rate',
    nr_employed    DOUBLE COMMENT 'Number of employees',
    y              BIGINT COMMENT 'Time deposit available or not'
)
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');

Partisi tingkat kedua:

CREATE TABLE IF NOT EXISTS mc_par_bank_2
(
    age            BIGINT COMMENT 'Age',
    job            STRING COMMENT 'Job type',
    marital        STRING COMMENT 'Marital status',
    education      STRING COMMENT 'Education level',
    default        STRING COMMENT 'Credit card available or not',
    housing        STRING COMMENT 'Mortgage',
    loan           STRING COMMENT 'Loan',
    contact        STRING COMMENT 'Contact information',
    month          STRING COMMENT 'Month',
    day_of_week    STRING COMMENT 'Day of the week',
    duration       STRING COMMENT 'Duration',
    campaign       BIGINT COMMENT 'Number of contacts during the campaign',
    pdays          DOUBLE COMMENT 'Time elapsed since the last contact',
    previous       DOUBLE COMMENT 'Number of contacts with the customer',
    poutcome       STRING COMMENT 'Result of the previous marketing campaign',
    emp_var_rate   DOUBLE COMMENT 'Employment change rate',
    cons_price_idx DOUBLE COMMENT 'Consumer price index',
    cons_conf_idx  DOUBLE COMMENT 'Consumer confidence index',
    euribor3m      DOUBLE COMMENT 'Euro deposit rate',
    nr_employed    DOUBLE COMMENT 'Number of employees'
)
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');

Langkah 3: Buat tabel eksternal di Hologres

Untuk partisi tingkat tunggal 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;

Untuk partisi tingkat kedua MaxCompute:

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;

Parameter

Deskripsi

project_name

Nama proyek MaxCompute tujuan

table_name

Nama tabel MaxCompute tujuan

Langkah 4: Ekspor data

Ekspor ke partisi tingkat tunggal MaxCompute:

-- Opsional: Gunakan Serverless Computing untuk tugas bulk load dan ETL.
SET hg_computing_resource = 'serverless';

-- Opsi 1: Masukkan ke tabel induk dengan klausa WHERE untuk memfilter berdasarkan partisi.
INSERT INTO mapping_par_bank SELECT * FROM "public"."par_bank" WHERE ds='20190830';

-- Opsi 2: Masukkan langsung ke tabel anak.
INSERT INTO mapping_par_bank SELECT * FROM "public"."par_bank_20190901";

-- Reset untuk berhenti menggunakan sumber daya komputasi tanpa server pada pernyataan berikutnya.
RESET hg_computing_resource;

Ekspor ke partisi tingkat kedua MaxCompute:

-- Opsional: gunakan Serverless Computing untuk tugas bulk load dan ETL.
SET hg_computing_resource = 'serverless';

-- Opsi 1: Kueri tabel induk dengan klausa WHERE untuk memfilter berdasarkan kedua tingkat partisi.
INSERT INTO mapping_par_bank_2 SELECT * FROM "public"."par_bank" WHERE y='1' AND ds='20190830';

-- Opsi 2: Kueri tabel partisi anak dan filter berdasarkan partisi tingkat kedua.
INSERT INTO mapping_par_bank_2 SELECT * FROM "public"."par_bank_20190901" WHERE y='1';

-- Reset untuk berhenti menggunakan sumber daya komputasi tanpa server pada pernyataan berikutnya.
RESET hg_computing_resource;

FAQ

Mengapa saya mendapatkan error FlowExceeded saat mengekspor ke MaxCompute?

Deskripsi masalah: Selama jam sibuk layanan SDK MaxCompute Tunnel (misalnya pagi hari), jika tugas penulisan Anda melebihi batas konkurensi penulisan atau volume data.

Penyebab: Hologres menggunakan SDK MaxCompute Tunnel untuk melakukan ekspor data berkinerja tinggi. SDK Tunnel memberlakukan batasan pada jumlah permintaan penulisan konkuren dan ukuran data untuk melindungi infrastruktur bersama. Lihat Perintah Tunnel dan Batasan untuk detailnya.

Resolusi:

  1. Coba ulang ekspor tersebut.

  2. Jika error tetap muncul, kendalikan konkurensi penulisan:

-- Setel ke nilai antara 0 dan jumlah shard tabel Anda.
SET hg_experimental_write_maxcompute_dop = <count>;