MaxCompute dan Hologres terintegrasi secara mulus. Mesin vektor native Hologres dapat langsung membaca data MaxCompute serta memanfaatkan pemfilteran partisi multi-level dan operator pushdown di MaxCompute untuk mengoptimalkan kecepatan kueri. Topik ini menjelaskan cara mempercepat kueri pada data MaxCompute di Hologres dengan membuat tabel eksternal atau mengimpor data ke Hologres.
Create a foreign table
Anda dapat membuat tabel eksternal di Hologres untuk langsung mempercepat kueri pada data tabel MaxCompute. Metode ini tidak memerlukan impor atau ekspor data dan tidak menghasilkan penyimpanan redundan. Dibandingkan dengan mengkueri data secara langsung di MaxCompute, metode ini meningkatkan kinerja kueri sebesar 2 hingga 5 kali lipat. Untuk lebih mempercepat kueri pada data MaxCompute, Anda dapat menerapkan strategi optimasi berikut.
Use Serverless Computing to query foreign tables
Hologres V2.1.17 dan versi yang lebih baru mendukung Serverless Computing. Untuk skenario seperti impor offline volume besar data MaxCompute, pekerjaan extract, transform, and load (ETL) berskala besar, atau kueri volume besar data pada tabel eksternal, Anda dapat menggunakan Serverless Computing untuk menjalankan tugas-tugas tersebut. Metode ini memanfaatkan sumber daya Serverless tambahan secara langsung, bukan sumber daya instans Anda sendiri, sehingga Anda tidak perlu menyediakan sumber daya komputasi ekstra untuk instans tersebut. Hal ini secara signifikan meningkatkan stabilitas instans, mengurangi kemungkinan error out-of-memory (OOM), dan Anda hanya dikenai biaya berdasarkan tugas yang dijalankan. Untuk informasi selengkapnya tentang Serverless Computing, lihat Serverless Computing. Untuk informasi selengkapnya tentang cara menggunakan Serverless Computing, lihat Use Serverless Computing.
Use the new HQE foreign table execution engine
Hologres V0.10 dan versi yang lebih baru menggunakan mesin eksekusi baru, HQE, untuk mempercepat kueri pada tabel eksternal MaxCompute. Dibandingkan dengan instans yang menjalankan versi sebelum V0.10, kinerja kueri meningkat sekitar 30% hingga 100%.
Mesin eksekusi HQE memiliki batasan berikut:
Saat ini, percepatan hanya berlaku untuk tabel MaxCompute yang menggunakan format ORC. Percepatan untuk format file lain, seperti CFile, tidak didukung.
HQE tidak mempercepat kueri pada tabel transaksional MaxCompute atau tabel yang skemanya telah berubah (Schema Evolution). Dalam kasus tersebut, sistem secara otomatis beralih ke mesin SQE untuk eksekusi.
Pastikan pemetaan tipe data antara tabel MaxCompute dan Hologres benar. Jika tidak, efek percepatan akan berkurang.
Avoid full table scans
Anda dapat mengoptimalkan pernyataan kueri sebagai berikut untuk menghindari pemindaian tabel penuh saat mengkueri data tabel eksternal:
Saat mengkueri data, gunakan pernyataan
SELECT a FROM xxuntuk mengkueri kolom tertentu. Hindari penggunaanSELECT * FROM xx.Tambahkan kondisi untuk memfilter partisi atau mengurangi jumlah partisi yang dipindai guna menurunkan volume data yang dipindai.
SQE query optimization
Untuk skenario kueri yang tidak didukung oleh HQE, sistem secara otomatis beralih ke mesin SQE untuk eksekusi, yang dapat menyebabkan penurunan kinerja. Anda dapat memodifikasi tabel sumber data MaxCompute sebagai berikut untuk mengoptimalkan kinerja kueri:
Convert MaxCompute tables to hash clustering tables
Tabel hash clustering memberikan beberapa keunggulan, termasuk optimasi Bucket Pruning, optimasi Agregasi, dan optimasi penyimpanan. Saat membuat tabel, jika Anda menggunakan `CLUSTERED BY` untuk menentukan kunci hash, MaxCompute melakukan operasi hash pada kolom yang ditentukan dan mendistribusikan data ke bucket yang berbeda berdasarkan nilai hash tersebut. Pilih kolom dengan sedikit nilai kunci duplikat sebagai kunci hash.
Pernyataan berikut menunjukkan cara mengonversi tabel menjadi tabel hash clustering.
ALTER TABLE <table_name> [CLUSTERED BY (<col_name> [, <col_name>, ...]) [SORTED BY (<col_name> [ASC | DESC] [, <col_name> [ASC | DESC] ...])] INTO <number_of_buckets> BUCKETS];Setelah Anda menggunakan pernyataan
ALTER TABLEuntuk menambahkan properti clustering baru, partisi baru akan disimpan menggunakan hash clustering. Untuk informasi selengkapnya tentang hash clustering, lihat Hash Clustering.Convert MaxCompute tables to range clustering tables
Range clustering adalah metode pemisahan data baru yang menyediakan distribusi data terurut secara global. Metode ini dapat mencegah potensi masalah kesenjangan data yang disebabkan oleh hash clustering. Selain itu, distribusi data terurutnya memungkinkan pembuatan indeks dua level untuk mendukung skenario seperti kueri rentang pada kunci clustering dan kueri kunci komposit.
Pernyataan berikut menunjukkan cara mengonversi tabel menjadi tabel range clustering.
ALTER TABLE <table_name> [RANGE CLUSTERED BY (<col_name> [, <col_name>, ...]) [SORTED BY (<col_name> [ASC | DESC] [, <col_name> [ASC | DESC] ...])] [INTO <number_of_buckets> BUCKETS];Setelah Anda menggunakan pernyataan
ALTER TABLEuntuk menambahkan properti clustering baru, partisi baru akan disimpan menggunakan range clustering. Untuk informasi selengkapnya tentang range clustering, lihat Range Clustering.CatatanTabel hash clustering dan tabel range clustering tidak mendukung pernyataan
INSERT INTO. Gunakan pernyataanINSERT OVERWRITEuntuk menimpa data.Karena data yang diunggah melalui Tunnel tidak terurut, Anda tidak dapat mengunggah data ke tabel hash clustering atau tabel range clustering menggunakan Tunnel.
Merge small files
Banyak file kecil di MaxCompute dapat memperlambat kueri data.
Anda dapat menjalankan pernyataan berikut di MaxCompute untuk melihat jumlah file dalam suatu tabel. Untuk informasi selengkapnya tentang optimasi file kecil di MaxCompute, lihat FAQ about small file optimization and job diagnostics.
desc extended <table_name>;Dalam hasil kueri, FileNum menunjukkan jumlah file dalam tabel MaxCompute target, dan Size menunjukkan ukuran total tabel dalam byte. Jika suatu tabel memiliki lebih dari 100 file dan ukuran rata-rata file kurang dari 64 MB, pertimbangkan untuk menggabungkan file-file kecil tersebut di MaxCompute.
Parameter tuning
Saat mengkueri tabel eksternal, Hologres menetapkan parameter default untuk meningkatkan konkurensi pembacaan data dan efisiensi kueri. Jika Anda memiliki kebutuhan khusus, Anda dapat mengonfigurasi parameter berikut sesuai kebutuhan.
Parameter berikut telah diatur ke nilai optimal berdasarkan penyetelan internal dan eksperimen. Biasanya, Anda tidak perlu mengubahnya.
Jangan mengatur parameter
hg_foreign_table_executor_max_dopke nilai yang sangat rendah. Misalnya, jika Anda menetapkan parameter ini ke 1 dan sebuah tabel dalam instans sedang ditulis dan dikueri secara bersamaan, beban dapat terkonsentrasi pada worker tertentu, yang berpotensi menyebabkan error OOM pada instans.
Sesuaikan jumlah partisi yang terkena dampak setiap kueri.
--Nilai default adalah 512 dan nilai maksimum adalah 1024. Jangan mengatur nilai ini terlalu tinggi karena dapat memengaruhi kinerja kueri. set hg_foreign_table_max_partition_limit = 128;Sesuaikan ukuran batch untuk setiap pembacaan dari tabel MaxCompute.
--Nilai default adalah 8192. set hg_experimental_query_batch_size = 4096;Tetapkan jumlah split untuk mengakses tabel MaxCompute guna menyesuaikan konkurensi.
--Nilai default adalah 64 MB. Jika tabel berukuran besar, tingkatkan nilai ini untuk mencegah terlalu banyak split yang memengaruhi kinerja. Parameter ini berlaku di Hologres V1.1 dan versi yang lebih baru. set hg_foreign_table_split_size = 128;Tetapkan konkurensi maksimum untuk mengakses tabel eksternal. Nilai default adalah jumlah core dalam instans.
--Nilai maksimum adalah 128. Jangan mengatur nilai yang terlalu besar. Hal ini mencegah kueri tabel eksternal, terutama dalam skenario impor data, memengaruhi kueri lain dan menyebabkan error system busy. Parameter ini berlaku di Hologres V1.1 dan versi yang lebih baru. set hg_foreign_table_executor_max_dop = 32;Tetapkan konkurensi maksimum untuk menjalankan pernyataan DML saat mengakses tabel eksternal.
--Nilai default adalah 32. Parameter ini dioptimalkan untuk skenario impor dan ekspor data guna mencegah operasi impor menggunakan terlalu banyak sumber daya sistem. Parameter ini berlaku di Hologres V1.1 dan versi yang lebih baru. set hg_foreign_table_executor_dml_max_dop = 16;
Import data into Hologres (Recommended)
Untuk melakukan perhitungan analitis intensif pada data tabel eksternal dan menggabungkannya (join) dengan tabel internal, Anda dapat membuat tabel internal di Hologres dan mengimpor data dari tabel eksternal tersebut. Tentukan kunci distribusi dan properti indeks yang sesuai untuk tabel internal guna mempercepat kueri.
Mengimpor data ke Hologres lebih cepat daripada mengkueri tabel eksternal, dengan peningkatan kinerja kueri hingga 10 hingga 100 kali lipat. Untuk informasi selengkapnya tentang cara mengimpor data dari tabel eksternal MaxCompute ke Hologres, lihat Import data from MaxCompute using SQL.