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:
Memiliki proyek MaxCompute aktif dengan tool pengembangan yang terhubung. Lihat Memulai dengan MaxCompute.
Memiliki instans Hologres (V0.9 atau lebih baru) dengan tool pengembangan yang terhubung. Lihat Hubungkan ke HoloWeb.
Batasan
Persyaratan versi:
Versi Hologres | Tindakan yang harus dilakukan |
V1.1 atau lebih baru | Jalankan |
V0.9 atau V0.10 | Tambahkan |
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:00hingga2262-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:
Buat atau identifikasi tabel internal Hologres yang berisi data yang akan diekspor.
Buat tabel MaxCompute untuk menerima data tersebut.
Buat tabel eksternal di Hologres yang memetakan ke tabel MaxCompute, lalu jalankan
INSERT INTO ... SELECTuntuk 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 |
| Nama proyek MaxCompute tujuan |
| 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 |
| Nama proyek MaxCompute tujuan |
| 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:
Coba ulang ekspor tersebut.
Jika error tetap muncul, kendalikan konkurensi penulisan:
-- Setel ke nilai antara 0 dan jumlah shard tabel Anda.
SET hg_experimental_write_maxcompute_dop = <count>;