Topik ini menjelaskan cara mengekspor data ke MaxCompute dengan menjalankan pernyataan SQL di Hologres.
Prasyarat
MaxCompute telah diaktifkan, dan alat pengembangan terhubung ke MaxCompute
Instans Hologres telah dibuat, dan alat pengembangan terhubung ke instans tersebut. Untuk informasi lebih lanjut, lihat Hubungkan ke HoloWeb dan Jalankan Kueri.
Batasan
Hanya Hologres V0.9 dan yang lebih baru yang memungkinkan Anda mengekspor data ke MaxCompute dengan menjalankan pernyataan SQL. Jika versi instans Hologres Anda lebih lama dari V0.9, Anda harus memperbarui instans Hologres secara manual di konsol Hologres atau bergabung dengan grup DingTalk Hologres untuk mengajukan pembaruan instans. Untuk informasi lebih lanjut tentang cara memperbarui instans Hologres secara manual, lihat bagian Pembaruan Manual dari topik "Peningkatan Instans". Untuk informasi lebih lanjut tentang cara bergabung dengan grup DingTalk Hologres, lihat Dapatkan Dukungan Online untuk Hologres.
Tipe data di Hologres dipetakan ke tipe data di MaxCompute. Di versi sebelum Hologres V1.3, Hologres tidak mendukung tipe data kompleks seperti DATE, ARRAY, MAP, dan STRUCT. Hologres V1.3 dan yang lebih baru memungkinkan Anda menulis data tipe ARRAY dan DATE ke MaxCompute. Untuk informasi lebih lanjut tentang pemetaan tipe data antara Hologres dan MaxCompute, lihat Tipe Data.
Hologres V1.1 dan yang lebih baru memungkinkan Anda mengekspor data ke MaxCompute. Jika versi instans Hologres Anda lebih lama dari V1.1, Anda harus menambahkan pernyataan berikut sebelum pernyataan
INSERT:-- Pernyataan ini diperlukan di Hologres V0.9 dan V0.10. set hg_experimental_enable_write_maxcompute = on;Anda tidak dapat mengekspor data ke tabel transaksional di MaxCompute dengan menjalankan pernyataan SQL di Hologres.
Peringatan
Saat mengekspor data ke MaxCompute dengan menjalankan pernyataan SQL di Hologres, perhatikan hal-hal berikut:
Hologres memungkinkan Anda mengekspor data ke MaxCompute lintas wilayah. Namun, performa ekspor data lebih baik jika instans Hologres Anda dan proyek MaxCompute tujuan berada di wilayah yang sama karena jaringan lebih stabil.
Hologres mendukung maksimal satu tingkat partisi tetapi memungkinkan Anda mengekspor data ke subpartisi tabel MaxCompute. Untuk mengekspor data ke subpartisi tabel MaxCompute, Anda harus memetakan nilai kunci partisi tabel MaxCompute ke bidang dalam tabel Hologres sumber. Selain itu, Hologres memungkinkan Anda mengekspor data dari tabel Hologres yang dipartisi ke tabel MaxCompute non-partisi.
Jumlah server penulisan MaxCompute terbatas. Untuk mendapatkan performa yang lebih baik, kami sarankan Anda tidak mengekspor data ke MaxCompute selama jam sibuk seperti pagi hari.
Jika ada bidang bertipe TIMESTAMPTZ, nilai valid dari bidang tersebut berkisar dari 1677-09-21 00:00:00 hingga 2262-04-12 00:00:00.
Prosedur
Buat tabel internal di Hologres untuk mengekspor data ke MaxCompute. Dalam contoh ini, tabel internal bernama holo_source dibuat.
Buat tabel MaxCompute untuk menerima data. Sebagai contoh, Anda dapat membuat tabel bernama mc_sink.
Buat tabel asing di Hologres untuk memetakan data tabel internal Hologres ke tabel MaxCompute. Dalam contoh ini, tabel asing bernama mapping_foreign_table dibuat.
Jalankan pernyataan SQL berikut sesuai kebutuhan di Hologres untuk mengekspor data ke MaxCompute:
CatatanHologres V2.1.17 dan yang lebih baru mendukung fitur Komputasi Serverless. Fitur Komputasi Serverless cocok untuk skenario di mana Anda ingin mengimpor sejumlah besar data secara offline, menjalankan pekerjaan ekstraksi, transformasi, dan pemuatan (ETL) berskala besar, atau menanyakan sejumlah besar data dari tabel asing. Anda dapat menggunakan fitur Komputasi Serverless untuk melakukan operasi tersebut berdasarkan sumber daya komputasi serverless tambahan. Ini dapat menghilangkan kebutuhan untuk memesan sumber daya komputasi tambahan untuk instans. Ini meningkatkan stabilitas instans dan mengurangi kemunculan kesalahan out of memory (OOM). Anda hanya dikenakan biaya untuk sumber daya komputasi serverless tambahan yang digunakan oleh tugas. Untuk informasi lebih lanjut tentang fitur Komputasi Serverless, lihat Komputasi Serverless. Untuk informasi lebih lanjut tentang cara menggunakan fitur Komputasi Serverless, lihat Panduan Pengguna pada Komputasi Serverless.
-- Opsional. Kami sarankan Anda menggunakan fitur Komputasi Serverless untuk mengimpor sejumlah besar data secara offline dan menjalankan pekerjaan ekstraksi, transformasi, dan pemuatan (ETL). SET hg_computing_resource = 'serverless'; -- Ekspor data dari bidang tertentu. INSERT INTO mapping_foreign_table SELECT x,x,x FROM holo_soruce;-- Ganti x,x,x dengan nama bidang yang ingin Anda ekspor. -- Ekspor data dari semua bidang. INSERT INTO mapping_foreign_table SELECT * FROM holo_soruce; -- Reset konfigurasi. Ini memastikan bahwa sumber daya komputasi serverless tidak digunakan untuk pernyataan SQL berikutnya. RESET hg_computing_resource;
Berikut ini adalah bagian-bagian yang menjelaskan cara menyinkronkan data antara tabel non-partisi dan antara tabel partisi.
Ekspor data dari tabel Hologres non-partisi ke tabel MaxCompute non-partisi
Buat tabel internal di Hologres sebagai sumber data.
Anda dapat membuat tabel internal Hologres untuk mengekspor data ke MaxCompute. Contoh kode berikut menunjukkan cara membuat 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;Buat tabel MaxCompute untuk menerima data.
Contoh kode berikut menunjukkan cara membuat tabel MaxCompute untuk menerima data. Bidang dan tipe data dalam tabel MaxCompute harus sesuai dengan yang ada di tabel internal Hologres. Untuk informasi lebih lanjut tentang sintaks, lihat Operasi Tabel.
CREATE TABLE IF NOT EXISTS mc_bank ( age BIGINT COMMENT 'Usia', job STRING COMMENT 'Jenis pekerjaan', marital STRING COMMENT 'Status perkawinan', education STRING COMMENT 'Tingkat pendidikan', card STRING COMMENT 'Kartu kredit tersedia atau tidak', housing STRING COMMENT 'Hipotek', loan STRING COMMENT 'Pinjaman', contact STRING COMMENT 'Informasi kontak', month STRING COMMENT 'Bulan', day_of_week STRING COMMENT 'Hari dalam seminggu', duration STRING COMMENT 'Durasi', campaign BIGINT COMMENT 'Jumlah kontak selama kampanye', pdays DOUBLE COMMENT 'Waktu berlalu sejak kontak terakhir', previous DOUBLE COMMENT 'Jumlah kontak dengan pelanggan', poutcome STRING COMMENT 'Hasil kampanye pemasaran sebelumnya', emp_var_rate DOUBLE COMMENT 'Tingkat perubahan lapangan kerja', cons_price_idx DOUBLE COMMENT 'Indeks harga konsumen', cons_conf_idx DOUBLE COMMENT 'Indeks kepercayaan konsumen', euribor3m DOUBLE COMMENT 'Tingkat deposito Euro', nr_employed DOUBLE COMMENT 'Jumlah karyawan', y BIGINT COMMENT 'Deposito waktu tersedia atau tidak' );Buat tabel asing di Hologres untuk memetakan data tabel internal Hologres ke tabel MaxCompute.
Anda dapat membuat tabel asing di Hologres dan menggunakan tabel asing ini untuk memetakan data ke tabel MaxCompute. Atau, Anda dapat menjalankan pernyataan Import Foreign Table untuk membuat tabel asing yang sesuai di Hologres untuk tabel MaxCompute. Contoh kode berikut menunjukkan cara membuat tabel asing di Hologres:
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 'xxx',table_name 'mc_bank');-- Ganti parameter project_name dengan nama proyek MaxCompute tujuan dan parameter table_name dengan nama tabel MaxCompute tujuan. COMMIT;Tabel berikut menjelaskan parameter dalam sintaks sebelumnya.
Parameter
Deskripsi
project_name
Nama proyek MaxCompute tujuan.
table_name
Nama tabel MaxCompute tujuan.
Ekspor data dari Hologres ke MaxCompute.
Jalankan pernyataan berikut untuk mengekspor data dari Hologres ke tabel MaxCompute tujuan. Anda dapat mengekspor data dari bidang tertentu atau dari semua bidang. Anda harus menentukan bidang dalam urutan yang sama seperti di tabel internal Hologres.
-- Opsional. Kami sarankan Anda menggunakan fitur Komputasi Serverless untuk mengimpor sejumlah besar data secara offline dan menjalankan pekerjaan ETL. SET hg_computing_resource = 'serverless'; -- Ekspor data dari bidang tertentu. INSERT INTO mapping_bank SELECT age,job FROM bank; -- Ekspor data dari semua bidang. INSERT INTO mapping_bank SELECT * FROM bank; -- Reset konfigurasi. Ini memastikan bahwa sumber daya komputasi serverless tidak digunakan untuk pernyataan SQL berikutnya. RESET hg_computing_resource;
Ekspor data dari tabel Hologres partisi ke tabel MaxCompute partisi
Buat tabel internal di Hologres sebagai sumber data.
Anda dapat membuat tabel internal Hologres untuk mengekspor data ke MaxCompute. Contoh kode berikut menunjukkan cara membuat tabel internal 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; -- Tabel anak diperlukan. 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');Buat tabel MaxCompute untuk menerima data.
Contoh kode berikut menunjukkan cara membuat tabel MaxCompute untuk menerima data. Tabel MaxCompute dapat berisi satu atau dua tingkat partisi. Bidang dan tipe data dalam tabel MaxCompute harus sesuai dengan yang ada di tabel internal Hologres. Untuk informasi lebih lanjut tentang sintaks, lihat Operasi Tabel.
-- Kasus 1: Buat tabel MaxCompute yang hanya berisi satu tingkat partisi. CREATE TABLE IF NOT EXISTS mc_par_bank ( age BIGINT COMMENT 'Usia', job STRING COMMENT 'Jenis pekerjaan', marital STRING COMMENT 'Status perkawinan', education STRING COMMENT 'Tingkat pendidikan', default STRING COMMENT 'Kartu kredit tersedia atau tidak', housing STRING COMMENT 'Hipotek', loan STRING COMMENT 'Pinjaman', contact STRING COMMENT 'Informasi kontak', month STRING COMMENT 'Bulan', day_of_week STRING COMMENT 'Hari dalam seminggu', duration STRING COMMENT 'Durasi', campaign BIGINT COMMENT 'Jumlah kontak selama kampanye', pdays DOUBLE COMMENT 'Waktu berlalu sejak kontak terakhir', previous DOUBLE COMMENT 'Jumlah kontak dengan pelanggan', poutcome STRING COMMENT 'Hasil kampanye pemasaran sebelumnya', emp_var_rate DOUBLE COMMENT 'Tingkat perubahan lapangan kerja', cons_price_idx DOUBLE COMMENT 'Indeks harga konsumen', cons_conf_idx DOUBLE COMMENT 'Indeks kepercayaan konsumen', euribor3m DOUBLE COMMENT 'Tingkat deposito Euro', nr_employed DOUBLE COMMENT 'Jumlah karyawan', y BIGINT COMMENT 'Deposito waktu tersedia atau tidak' ) PARTITIONED BY ( ds STRING ); -- Buat partisi yang diperlukan jika belum ada. alter table mc_par_bank add if not exists partition (ds='20190830'); alter table mc_par_bank add if not exists partition (ds='20190901'); -- Kasus 2: Buat tabel MaxCompute yang berisi dua tingkat partisi. CREATE TABLE IF NOT EXISTS mc_par_bank_2 ( age BIGINT COMMENT 'Usia', job STRING COMMENT 'Jenis pekerjaan', marital STRING COMMENT 'Status perkawinan', education STRING COMMENT 'Tingkat pendidikan', default STRING COMMENT 'Kartu kredit tersedia atau tidak', housing STRING COMMENT 'Hipotek', loan STRING COMMENT 'Pinjaman', contact STRING COMMENT 'Informasi kontak', month STRING COMMENT 'Bulan', day_of_week STRING COMMENT 'Hari dalam seminggu', duration STRING COMMENT 'Durasi', campaign BIGINT COMMENT 'Jumlah kontak selama kampanye', pdays DOUBLE COMMENT 'Waktu berlalu sejak kontak terakhir', previous DOUBLE COMMENT 'Jumlah kontak dengan pelanggan', poutcome STRING COMMENT 'Hasil kampanye pemasaran sebelumnya', emp_var_rate DOUBLE COMMENT 'Tingkat perubahan lapangan kerja', cons_price_idx DOUBLE COMMENT 'Indeks harga konsumen', cons_conf_idx DOUBLE COMMENT 'Indeks kepercayaan konsumen', euribor3m DOUBLE COMMENT 'Tingkat deposito Euro', nr_employed DOUBLE COMMENT 'Jumlah karyawan' ) 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');Buat tabel asing di Hologres untuk memetakan data tabel internal Hologres ke tabel MaxCompute.
Anda dapat membuat tabel asing di Hologres dan menggunakan tabel asing ini untuk memetakan data tabel internal Hologres ke tabel MaxCompute. Contoh kode berikut menunjukkan cara membuat tabel asing di Hologres:
-- Buat tabel asing untuk memetakan data tabel internal Hologres ke tabel MaxCompute yang hanya berisi satu tingkat partisi. 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 'xxx',table_name 'mc_par_bank'); COMMIT; -- Buat tabel asing untuk memetakan data tabel internal Hologres ke tabel MaxCompute yang berisi dua tingkat partisi. 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 'xxx',table_name 'mc_par_bank_2');// Ganti parameter project_name dengan nama proyek MaxCompute tujuan dan parameter table_name dengan nama tabel MaxCompute tujuan. COMMIT;Tabel berikut menjelaskan parameter dalam sintaks sebelumnya.
Parameter
Deskripsi
project_name
Nama proyek MaxCompute tujuan.
table_name
Nama tabel MaxCompute tujuan.
Ekspor data dari Hologres ke MaxCompute.
Jalankan pernyataan berikut untuk mengekspor data dari Hologres ke tabel MaxCompute tujuan. Anda dapat mengekspor data dari bidang tertentu atau dari semua bidang. Anda harus menentukan bidang dalam urutan yang sama seperti di tabel internal Hologres.
-- Opsional. Kami sarankan Anda menggunakan fitur Komputasi Serverless untuk mengimpor sejumlah besar data secara offline dan menjalankan pekerjaan ETL. SET hg_computing_resource = 'serverless'; -- Ekspor data ke tabel MaxCompute yang berisi satu tingkat partisi. -- Contoh 1: Ekspor data dari tabel induk partisi di Hologres menggunakan klausa WHERE. INSERT INTO mapping_par_bank SELECT * FROM "public"."par_bank" WHERE ds='20190830'; -- Contoh 2: Ekspor data dari tabel anak yang sesuai di Hologres. insert into mapping_par_bank select * from "public"."par_bank_20190901"; -- Ekspor data ke tabel MaxCompute yang berisi dua tingkat partisi. -- Contoh 1: Ekspor data dari tabel induk partisi di Hologres menggunakan klausa WHERE. INSERT INTO mapping_par_bank_2 SELECT * FROM "public"."par_bank" WHERE y='1' and ds='20190830'; -- Contoh 2: Ekspor data dari tabel anak partisi di Hologres. INSERT INTO mapping_par_bank_2 SELECT * FROM "public"."par_bank_20190901" where y='1'; -- Reset konfigurasi. Ini memastikan bahwa sumber daya komputasi serverless tidak digunakan untuk pernyataan SQL berikutnya. RESET hg_computing_resource;
FAQ
Deskripsi Masalah
Pesan kesalahan
internal error: odps_writer_xxx,UploadId: xxx, Block 0 close odps writer failed: RequestId=xxx, ErrorCode=FlowExceeded, ErrorMessage= GlobalSlot Quotamuncul saat saya mengekspor data ke tabel MaxCompute.Penyebab
Saat Anda menggunakan pernyataan SQL di Hologres untuk mengekspor data ke MaxCompute, layanan Tunnel SDK MaxCompute digunakan untuk memastikan ekspor data berperforma tinggi. Untuk informasi lebih lanjut, lihat Perintah Tunnel. Namun, saat Anda menggunakan layanan Tunnel SDK MaxCompute, jumlah permintaan tulis bersamaan dan ukuran data dibatasi. Untuk informasi lebih lanjut, lihat Batasan. Selama jam sibuk layanan Tunnel SDK MaxCompute, jika tugas tulis memicu batas tulis, pesan kesalahan di atas akan muncul.
Solusi
Ekspor data ke MaxCompute lagi.
Jika kesalahan masih muncul setelah Anda mengekspor data ke MaxCompute lagi, jalankan pernyataan berikut untuk mengatur laju penulisan data bersamaan ke MaxCompute:
-- Konfigurasikan laju penulisan data bersamaan ke MaxCompute. Kami sarankan Anda mengatur parameter hg_experimental_write_maxcompute_dop ke nilai dari 0 hingga jumlah shard. set hg_experimental_write_maxcompute_dop =<count>;