All Products
Search
Document Center

Hologres:Ekspor data ke MaxCompute

Last Updated:Jul 06, 2025

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

  1. Buat tabel internal di Hologres untuk mengekspor data ke MaxCompute. Dalam contoh ini, tabel internal bernama holo_source dibuat.

  2. Buat tabel MaxCompute untuk menerima data. Sebagai contoh, Anda dapat membuat tabel bernama mc_sink.

  3. Buat tabel asing di Hologres untuk memetakan data tabel internal Hologres ke tabel MaxCompute. Dalam contoh ini, tabel asing bernama mapping_foreign_table dibuat.

  4. Jalankan pernyataan SQL berikut sesuai kebutuhan di Hologres untuk mengekspor data ke MaxCompute:

    Catatan

    Hologres 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

  1. 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;
  2. 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'
    );
  3. 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.

  4. 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

  1. 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');
  2. 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');
  3. 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.

  4. 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 Quota muncul 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>;