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

-
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.
-
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; -
Impor data ke Hologres.
CatatanHologres 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
INSERTuntuk 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; -
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.
-
Buka halaman HoloWeb. Untuk informasi lebih lanjut, lihat Menghubungkan ke HoloWeb dan mengeksekusi kueri.
-
Di bilah menu atas halaman developer HoloWeb, pilih , lalu klik Import MaxCompute Data.
-
Konfigurasikan parameter pada halaman Create MaxCompute Data Import Task.
Tabel berikut menjelaskan parameter-parameter tersebut.CatatanSQL 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.
-
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
analyzebelum dijalankan pada beberapa tabel. Atau, perintahanalyzetelah 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
analyzepada 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;
-