全部产品
Search
文档中心

Hologres:Impor data dari MaxCompute ke Hologres menggunakan SQL

更新时间:Feb 04, 2026

Jika data MaxCompute Anda melebihi 200 GB dan memerlukan waktu respons dalam hitungan detik untuk kueri kompleks, impor data tersebut langsung ke tabel internal Hologres. Metode ini lebih efisien dibandingkan mengkueri data melalui tabel eksternal karena Anda dapat membuat indeks pada tabel internal. Topik ini menjelaskan cara mengimpor data dalam berbagai skenario dan memberikan jawaban atas pertanyaan yang sering diajukan.

Catatan

Saat mengimpor data MaxCompute ke Hologres menggunakan SQL, perhatikan hal-hal berikut:

  • Partisi MaxCompute tidak memiliki hubungan pemetaan kuat dengan partisi Hologres. Bidang partisi MaxCompute dipetakan ke bidang biasa di Hologres. Oleh karena itu, Anda dapat mengimpor data dari tabel MaxCompute berpartisi ke tabel non-partisi maupun tabel berpartisi di Hologres.

  • Hologres hanya mendukung partisi tingkat tunggal. Saat mengimpor data dari tabel MaxCompute berpartisi multi-level ke tabel Hologres berpartisi, petakan hanya satu bidang partisi. Bidang partisi lainnya dipetakan ke bidang biasa di Hologres.

  • Untuk memperbarui atau menimpa data yang sudah ada selama proses impor, gunakan sintaks INSERT ON CONFLICT (UPSERT).

  • Untuk informasi tentang pemetaan tipe data antara MaxCompute dan Hologres, lihat Ringkasan tipe data.

  • Setelah data di tabel MaxCompute diperbarui, terjadi latensi cache di Hologres, biasanya kurang dari 10 menit. Sebelum mengimpor data, jalankan perintah IMPORT FOREIGN SCHEMA untuk memperbarui tabel eksternal dan mengambil data terbaru.

  • Saat mengimpor data MaxCompute ke Hologres, gunakan SQL alih-alih integrasi data. Impor menggunakan SQL memberikan performa yang lebih baik.

Impor data dari tabel MaxCompute non-partisi ke Hologres dan kueri data tersebut

  1. Siapkan data di tabel MaxCompute non-partisi.

    Buat tabel sumber data non-partisi di MaxCompute, atau gunakan tabel yang sudah ada.

    Contoh ini menggunakan tabel customer dari dataset publik public_data di MaxCompute. Untuk informasi lebih lanjut tentang cara login dan mengkueri dataset tersebut, lihat Menggunakan dataset publik. Pernyataan DDL untuk tabel dan datanya adalah sebagai berikut.

    -- DDL tabel di dataset publik MaxCompute
    CREATE TABLE IF NOT EXISTS public_data.customer(
      c_customer_sk BIGINT,
      c_customer_id STRING,
      c_current_cdemo_sk BIGINT,
      c_current_hdemo_sk BIGINT,
      c_current_addr_sk BIGINT,
      c_first_shipto_date_sk BIGINT,
      c_first_sales_date_sk BIGINT,
      c_salutation STRING,
      c_first_name STRING,
      c_last_name STRING,
      c_preferred_cust_flag STRING,
      c_birth_day BIGINT,
      c_birth_month BIGINT,
      c_birth_year BIGINT,
      c_birth_country STRING,
      c_login STRING,
      c_email_address STRING,
      c_last_review_date STRING,
      useless STRING);
    
    -- Kueri tabel di MaxCompute untuk memeriksa data
    SELECT * FROM public_data.customer;

    Gambar berikut menunjukkan sebagian datanya.customer

  2. Buat tabel eksternal di Hologres.

    Buat tabel eksternal di Hologres untuk memetakan tabel sumber data di MaxCompute. Contoh pernyataan SQL berikut digunakan.

    CREATE FOREIGN TABLE foreign_customer (
        "c_customer_sk" int8,
        "c_customer_id" text,
        "c_current_cdemo_sk" int8,
        "c_current_hdemo_sk" int8,
        "c_current_addr_sk" int8,
        "c_first_shipto_date_sk" int8,
        "c_first_sales_date_sk" int8,
        "c_salutation" text,
        "c_first_name" text,
        "c_last_name" text,
        "c_preferred_cust_flag" text,
        "c_birth_day" int8,
        "c_birth_month" int8,
        "c_birth_year" int8,
        "c_birth_country" text,
        "c_login" text,
        "c_email_address" text,
        "c_last_review_date" text,
        "useless" text
    )
    SERVER odps_server
    OPTIONS (project_name 'public_data', table_name 'customer');

    Parameter

    Deskripsi

    Server

    Anda dapat langsung memanggil server tabel eksternal bernama odps_server yang telah dibuat di lapisan dasar Hologres. Untuk informasi lebih lanjut tentang prinsipnya, lihat Postgres FDW.

    Project_Name

    Nama proyek tempat tabel MaxCompute berada.

    Table_Name

    Nama tabel MaxCompute yang akan dikueri.

    Tipe data bidang-bidang di tabel eksternal harus konsisten dengan tipe data bidang-bidang di tabel MaxCompute. Untuk informasi lebih lanjut tentang pemetaan tipe data, lihat Pemetaan tipe data antara MaxCompute dan Hologres.

  3. Buat tabel penyimpanan di Hologres.

    Buat tabel penyimpanan di Hologres untuk menerima data dari tabel sumber MaxCompute.

    Ini adalah contoh DDL dasar. Saat mengimpor data, buat tabel dengan skema dan indeks yang sesuai untuk mencapai performa kueri yang lebih baik. Untuk informasi lebih lanjut tentang properti tabel, lihat CREATE TABLE.

    -- Buat contoh tabel berorientasi kolom
    BEGIN;
    CREATE TABLE public.holo_customer (
     "c_customer_sk" int8,
     "c_customer_id" text,
     "c_current_cdemo_sk" int8,
     "c_current_hdemo_sk" int8,
     "c_current_addr_sk" int8,
     "c_first_shipto_date_sk" int8,
     "c_first_sales_date_sk" int8,
     "c_salutation" text,
     "c_first_name" text,
     "c_last_name" text,
     "c_preferred_cust_flag" text,
     "c_birth_day" int8,
     "c_birth_month" int8,
     "c_birth_year" int8,
     "c_birth_country" text,
     "c_login" text,
     "c_email_address" text,
     "c_last_review_date" text,
     "useless" text
    );
    CALL SET_TABLE_PROPERTY('public.holo_customer', 'orientation', 'column');
    CALL SET_TABLE_PROPERTY('public.holo_customer', 'bitmap_columns', 'c_customer_id,c_salutation,c_first_name,c_last_name,c_preferred_cust_flag,c_birth_country,c_login,c_email_address,c_last_review_date,useless');
    CALL SET_TABLE_PROPERTY('public.holo_customer', 'dictionary_encoding_columns', 'c_customer_id:auto,c_salutation:auto,c_first_name:auto,c_last_name:auto,c_preferred_cust_flag:auto,c_birth_country:auto,c_login:auto,c_email_address:auto,c_last_review_date:auto,useless:auto');
    CALL SET_TABLE_PROPERTY('public.holo_customer', 'time_to_live_in_seconds', '3153600000');
    CALL SET_TABLE_PROPERTY('public.holo_customer', 'storage_format', 'segment');
    COMMIT;
  4. Impor data ke Hologres.

    Catatan

    Hologres V2.1.17 dan versi yang lebih baru mendukung Serverless Computing. Untuk skenario seperti impor data offline berskala besar, pekerjaan extract, transform, and load (ETL) besar, dan kueri volume besar pada tabel eksternal, Anda dapat menggunakan Serverless Computing untuk mengeksekusi tugas-tugas tersebut. Fitur ini menggunakan sumber daya serverless tambahan alih-alih sumber daya instans Anda sendiri. Anda tidak perlu menyediakan sumber daya komputasi tambahan untuk instans Anda. Hal ini secara signifikan meningkatkan stabilitas instans, mengurangi kemungkinan error out-of-memory (OOM), dan Anda hanya dikenai biaya untuk setiap tugas tertentu. Untuk informasi lebih lanjut tentang Serverless Computing, lihat Serverless Computing. Untuk informasi tentang cara menggunakan Serverless Computing, lihat Panduan penggunaan Serverless Computing.

    Gunakan pernyataan INSERT untuk mengimpor data dari tabel sumber MaxCompute ke Hologres. Anda dapat mengimpor data dari beberapa atau semua bidang. Jika Anda mengimpor data dari beberapa bidang, bidang-bidang tersebut harus dalam urutan yang benar. Contoh pernyataan DDL berikut digunakan.

    -- (Opsional) Gunakan Serverless Computing untuk mengeksekusi impor offline data dalam jumlah besar dan pekerjaan ETL.
    SET hg_computing_resource = 'serverless';
    
    -- Impor data dari beberapa bidang
    INSERT INTO holo_customer (c_customer_sk,c_customer_id,c_email_address,c_last_review_date,useless)
    SELECT 
        c_customer_sk,
        c_customer_id,
        c_email_address,
        c_last_review_date,
        useless
    FROM foreign_customer;
    
    -- Impor data dari semua bidang
    INSERT INTO holo_customer
    SELECT * FROM foreign_customer;
    
    -- Setel ulang konfigurasi untuk memastikan bahwa pernyataan SQL yang tidak perlu tidak menggunakan sumber daya serverless.
    RESET hg_computing_resource;
  5. Kueri data tabel MaxCompute di Hologres.

    Kueri data tabel MaxCompute yang telah diimpor di Hologres. Contoh pernyataan SQL berikut digunakan.

    SELECT * FROM holo_customer;

Impor data dari tabel MaxCompute berpartisi ke Hologres dan kueri data tersebut

Untuk informasi lebih lanjut, lihat Impor data dari tabel MaxCompute berpartisi.

Praktik terbaik untuk INSERT OVERWRITE

Untuk informasi lebih lanjut, lihat INSERT OVERWRITE.

Menyinkronkan data menggunakan tool visualisasi atau dengan penjadwalan sinkronisasi berkala

Untuk menyinkronkan data dalam jumlah besar sekaligus, Anda dapat menggunakan tool visualisasi atau tugas penjadwalan.

  • Untuk melakukan sinkronisasi satu klik data MaxCompute menggunakan tool visualisasi HoloWeb, ikuti langkah-langkah berikut.

    1. Buka halaman HoloWeb. Untuk informasi lebih lanjut, lihat Menghubungkan ke HoloWeb dan mengeksekusi kueri.

    2. Di bilah menu atas halaman developer HoloWeb, pilih Metadata Management > MaxCompute Query Acceleration, lalu klik Import MaxCompute Data.

    3. Konfigurasikan parameter pada halaman Create MaxCompute Data Import Task.一键同步Tabel berikut menjelaskan parameter-parameter tersebut.

      Catatan

      SQL Script secara otomatis mengurai pernyataan SQL yang sesuai dengan operasi visualisasi saat ini. Anda tidak dapat mengubah pernyataan SQL di SQL Script. Untuk mengubah pernyataan tersebut, salin, lakukan perubahan secara manual, lalu gunakan SQL untuk menyinkronkan data.

      Bagian

      Parameter

      Deskripsi

      Instance

      Instance Name

      Nama instance yang telah Anda login.

      Source MaxCompute Table

      Project Name

      Nama proyek MaxCompute.

      Schema Name

      Nama skema di MaxCompute. Parameter ini disembunyikan untuk proyek MaxCompute yang menggunakan model dua lapisan. Untuk proyek yang menggunakan model tiga lapisan, Anda dapat memilih skema yang memiliki izin dari daftar drop-down.

      Table Name

      Nama tabel MaxCompute. Pencarian fuzzy berdasarkan awalan didukung.

      Destination Hologres Table

      Database Name

      Pilih nama database Hologres tempat tabel internal berada.

      Schema Name

      Nama skema di Hologres.

      Nilai default adalah public. Anda juga dapat memilih skema lain yang memiliki izin.

      Table Name

      Nama tabel internal Hologres baru.

      Setelah Anda memilih tabel MaxCompute, nama tabel MaxCompute tersebut akan digunakan secara otomatis. Anda juga dapat mengganti nama tabel tersebut.

      Destination Table Description

      Deskripsi tabel internal Hologres baru. Anda dapat menyesuaikan deskripsi tersebut.

      Parameter Settings

      GUC Parameters

      Masukkan parameter Grand Unified Configuration (GUC) yang ingin Anda atur. Untuk informasi lebih lanjut tentang parameter GUC, lihat Parameter GUC.

      Import Task

      Fields

      Bidang-bidang yang akan diimpor dari tabel MaxCompute.

      Anda dapat mengimpor beberapa atau semua bidang.

      Partition Configurations

      • Partition Field

        Pilih bidang partisi. Hologres kemudian akan membuat tabel berpartisi secara default.

        Hologres hanya mendukung partisi tingkat tunggal. Untuk mengimpor partisi multi-level dari MaxCompute, atur hanya partisi tingkat pertama di Hologres. Bidang partisi lainnya akan dipetakan secara otomatis ke bidang biasa di Hologres.

      • Data Timestamp

        Jika tabel MaxCompute dipartisi berdasarkan tanggal, Anda dapat memilih tanggal partisi tertentu. Sistem kemudian akan mengimpor data tanggal tersebut ke tabel Hologres.

      Property

      • Storage mode

        • Column-oriented Storage: Cocok untuk berbagai kueri kompleks.

        • Row-oriented Storage: Cocok untuk kueri titik dan pemindaian berdasarkan primary key.

        • Row-column Storage: Mendukung semua skenario penyimpanan baris dan kolom, serta mendukung kueri titik yang tidak berdasarkan primary key.

        Jika Anda tidak menentukan mode penyimpanan, Column-oriented Storage digunakan secara default.

      • Data Lifecycle

        Siklus hidup data tabel. Secara default, data disimpan secara permanen.

        Jika Anda menentukan siklus hidup, mesin DPI akan menghapus data tersebut setelah periode yang ditentukan berakhir jika data tersebut tidak dimodifikasi dalam periode tersebut.

      • Binlog

        Menentukan apakah binary logging diaktifkan. Untuk informasi lebih lanjut, lihat Berlangganan Hologres Binlog.

      • Lifecycle of Binary Logs

        Masa hidup data (TTL) untuk log biner. Nilai default adalah 30 hari, yaitu 2.592.000 detik.

      • Distribution Column

        Hologres mengacak data ke shard berdasarkan kolom distribusi. Baris-baris dengan nilai yang sama pada kolom distribusi disimpan di shard yang sama. Menggunakan kolom distribusi sebagai kondisi filter meningkatkan performa kueri.

      • Anda dapat menentukan kolom sebagai kunci segmen. Saat kondisi kueri mencakup kolom segmen, Hologres menggunakan kunci segmen untuk menemukan lokasi penyimpanan data dengan cepat.

      • Clustering Key

        Anda dapat menentukan kolom sebagai kunci pengelompokan. Jenis indeks sangat terkait dengan urutan kolom. Indeks pengelompokan mempercepat kueri rentang dan filter pada kolom indeks.

      • Dictionary Encoding Columns

        Hologres mendukung pembuatan pemetaan kamus untuk nilai-nilai di kolom tertentu. Pengkodean kamus mengubah perbandingan string menjadi perbandingan numerik untuk mempercepat kueri Group By dan Filter.

        Hologres membangun pemetaan kamus untuk nilai-nilai di kolom tertentu. Pengkodean kamus mengonversi perbandingan string menjadi perbandingan numerik. Hal ini mempercepat kueri GROUP BY dan filter. Secara default, semua kolom text diatur sebagai kolom pengkodean kamus.

      • Bitmap Column

        Hologres mendukung pengkodean bit pada kolom bitmap. Hal ini memungkinkan Anda memfilter data dalam suatu bidang berdasarkan kondisi tertentu dengan cepat.

        Hologres membangun indeks bitmap pada kolom tertentu. Indeks bitmap memfilter data dengan cepat berdasarkan kondisi tertentu. Secara default, semua kolom text diatur sebagai kolom bitmap.

    4. Klik Submit. Setelah data diimpor, Anda dapat mengkueri data tabel internal di Hologres.

  • Sinkronisasi satu klik di HoloWeb tidak mendukung penjadwalan berkala. Untuk menyinkronkan data historis dalam jumlah besar atau menjadwalkan impor data secara berkala, gunakan DataStudio dari DataWorks. Untuk informasi lebih lanjut, lihat Praktik terbaik untuk mengimpor data MaxCompute secara berkala menggunakan DataWorks.

FAQ

Terjadi error kehabisan memori (OOM) saat mengimpor data dari MaxCompute ke Hologres, dan dilaporkan pengecualian yang menunjukkan batas memori terlampaui. Biasanya dilaporkan error Query executor exceeded total memory limitation xxxxx: yyyy bytes used. Berikut ini menjelaskan empat kemungkinan penyebab error tersebut beserta solusinya.

  • Langkah Pemecahan Masalah 1

    • Kemungkinan penyebab:

      Kueri impor berisi subkueri, tetapi perintah analyze belum dijalankan pada beberapa tabel. Atau, perintah analyze telah dijalankan, tetapi data telah diperbarui, sehingga statistik menjadi tidak akurat. Hal ini menyebabkan pengoptimal kueri membuat keputusan yang salah mengenai urutan join, yang mengakibatkan overhead memori tinggi.

    • Solusi:

      Jalankan perintah analyze pada semua tabel internal dan eksternal yang terlibat untuk memperbarui metadata statistiknya. Hal ini membantu pengoptimal kueri menghasilkan rencana eksekusi yang lebih baik dan menyelesaikan error OOM.

  • Langkah 2

    • Kemungkinan penyebab:

      Tabel memiliki banyak kolom, dan volume data per baris besar. Hal ini meningkatkan jumlah data yang dibaca sekaligus dan menyebabkan overhead memori tinggi.

    • Solusi:

      Tambahkan parameter berikut sebelum pernyataan SQL untuk mengontrol jumlah baris data yang dibaca sekaligus. Hal ini secara efektif dapat mengurangi terjadinya error OOM.

      SET hg_experimental_query_batch_size = 1024;-- Nilai default adalah 8192.
      INSERT INTO holo_table SELECT * FROM mc_table;
  • Langkah 3: Pemecahan Masalah

    • Kemungkinan penyebab:

      Selama impor data, konkurensi tinggi dan konsumsi CPU besar, yang memengaruhi kueri tabel internal.

    • Solusi:

      Pada versi Hologres sebelum V1.1, Anda dapat mengontrol konkurensi menggunakan parameter hg_experimental_foreign_table_executor_max_dop. Nilai default adalah jumlah core instans. Selama impor, Anda dapat mengatur hg_experimental_foreign_table_executor_max_dop ke nilai yang lebih kecil untuk mengurangi penggunaan memori selama impor dan menyelesaikan error OOM. Parameter ini berlaku untuk semua pekerjaan yang dijalankan pada tabel eksternal. Contoh kode berikut digunakan.

      SET hg_experimental_foreign_table_executor_max_dop = 8;
      INSERT INTO holo_table SELECT * FROM mc_table;
  • Langkah 4: Pemecahan Masalah

    • Kemungkinan penyebab:

      Selama impor data, konkurensi tinggi dan konsumsi CPU besar, yang memengaruhi kueri tabel internal.

    • Solusi:

      Pada Hologres V1.1 dan versi yang lebih baru, Anda dapat mengontrol konkurensi menggunakan parameter hg_foreign_table_executor_dml_max_dop. Nilai default adalah 32. Selama impor, atur hg_foreign_table_executor_dml_max_dop ke nilai yang lebih kecil untuk mengurangi konkurensi saat menjalankan pernyataan DML, terutama dalam skenario impor dan ekspor data. Hal ini mencegah pernyataan DML mengonsumsi sumber daya berlebihan. Contoh kode berikut digunakan.

      SET hg_foreign_table_executor_dml_max_dop = 8;
      INSERT INTO holo_table SELECT * FROM mc_table;