PolarDB mendukung fitur Extract Transform Load (ETL). Setelah fitur ETL dari IMCI diaktifkan, Anda dapat menggunakan Indeks Kolom Memori (IMCIs) pada node utama. Permintaan SELECT dalam pernyataan yang dijalankan pada node utama dikirim ke node penyimpanan kolom hanya-baca. Kemudian, Anda dapat memanfaatkan fitur IMCI untuk mempercepat kueri. Setelah data dibaca, PolarDB mengirimkan data kembali ke node utama melalui jaringan internal dan menulisnya ke tabel tujuan.
Cara kerjanya

Prasyarat
Kluster PolarDB Anda harus menggunakan salah satu versi berikut:
Kluster PolarDB for MySQL 8.0.1 dengan versi revisi 8.0.1.1.29 atau lebih baru.
Kluster PolarDB for MySQL 8.0.2 dengan versi revisi 8.0.2.2.12 atau lebih baru.
Untuk informasi tentang cara memeriksa versi, lihat bagian "Query the engine version" dalam topik Versi Mesin.
Batasan
Fitur ini hanya berlaku untuk pernyataan SQL berikut:
CREATE TABLE nama_tabel [AS] SELECT ...INSERT ... SELECT ...
Penggunaan
Anda dapat mengonfigurasi parameter dalam database untuk menentukan apakah akan membaca data dari node penyimpanan kolom hanya-baca dan apakah akan mengompres file saat membaca data dari node tersebut. Tabel berikut menjelaskan parameter tersebut.
Parameter | Deskripsi |
etl_from_imci | Menentukan apakah akan membaca data dari node penyimpanan kolom hanya-baca. Nilai valid:
|
etl_from_imci_compress | Menentukan apakah akan mengompres file saat membaca data dari node penyimpanan kolom hanya-baca. Nilai valid:
|
Saat mengubah nilai parameter, Anda dapat mengatur setiap parameter pada salah satu tingkat berikut: global, sesi, atau pernyataan. Dalam contoh berikut, parameter etl_from_imci digunakan.
Atur parameter pada tingkat global.
SET GLOBAL etl_from_imci = ON;Setelah mengatur parameter pada tingkat global, semua permintaan
CREATE TABLE new_tbl [AS] SELECT ..danINSERT ... SELECT ...dalam kluster saat ini akan membaca data dari node penyimpanan kolom hanya-baca.Atur parameter pada tingkat sesi.
SET etl_from_imci = ON;Setelah mengatur parameter pada tingkat sesi, hanya permintaan
CREATE TABLE new_tbl [AS] SELECT ..danINSERT ... SELECT ...dalam sesi saat ini yang membaca data dari node penyimpanan kolom hanya-baca.Atur parameter pada tingkat pernyataan.
Anda dapat menggunakan hints untuk menentukan apakah akan membaca data dari node penyimpanan kolom hanya-baca untuk pernyataan SQL tertentu. Contoh:
CREATE TABLE t2 SELECT /*+ SET_VAR(etl_from_imci=ON) */ * from t1 where 'A' = 'a';
Saat parameter etl_from_imci disetel ke ON, data dibaca dari node penyimpanan kolom hanya-baca. Setelah data dibaca dari node tersebut dan dikirim kembali ke node utama, Anda dapat menjalankan pernyataan SHOW processlist untuk melihat status proses saat ini, yang diharapkan menjadi ETL FROM IMCI.
Catatan penggunaan
Jika kondisi kueri kompleks ditentukan dan waktu eksekusi pernyataan SQL lama tetapi hanya sejumlah kecil data yang dikembalikan, Anda dapat mengaktifkan fitur ETL dari IMCI untuk meningkatkan performa secara signifikan.
Namun, fitur ETL dari IMCI dapat menurunkan performa dalam skenario berikut:
Untuk kueri sederhana, membaca data dari node penyimpanan kolom hanya-baca jarak jauh menyebabkan overhead tambahan untuk transmisi jaringan dan penguraian set hasil. Oleh karena itu, performa mungkin menurun.
Saat set hasil kueri berisi sejumlah besar data, membaca data dari node penyimpanan kolom hanya-baca jarak jauh, mengirim data kembali ke node utama, dan menulis data ke tabel pada node utama dapat menyebabkan penurunan performa.
Perbandingan performa
Tes berikut menggunakan 10 GB data yang dihasilkan berdasarkan TPC Benchmark H (TPC-H) untuk menguji performa kueri kompleks.
Hasil kueri berisi satu baris data.
select sum(l_extendedprice * l_discount) as revenue from lineitem where l_shipdate >= date '1994-01-01' and l_shipdate < date '1994-01-01' + interval '1' year and l_discount between .06 - 0.01 and .06 + 0.01 and l_quantity < 24Bandingkan nilai waktu yang dikonsumsi (dalam detik) jika hasil kueri berisi satu baris data.
Kueri data pada node penyimpanan kolom hanya-baca
Jalankan pernyataan
CREATE TABLE new_tbl [AS] SELECT ...pada node utama saat fitur ETL dari IMCI tidak diaktifkanJalankan pernyataan
CREATE TABLE new_tbl [AS] SELECT ...pada node utama saat fitur ETL dari IMCI diaktifkanJalankan pernyataan
INSERT ... SELECT ...pada node utama saat fitur ETL dari IMCI tidak diaktifkanJalankan pernyataan
INSERT ... SELECT ...pada node utama saat fitur ETL dari IMCI diaktifkan0.05
>60
0.17
>60
0.08
Hasil kueri berisi empat baris data.
select l_returnflag, l_linestatus, sum(l_quantity) as sum_qty, sum(l_extendedprice) as sum_base_price, sum(l_extendedprice * (1 - l_discount)) as sum_disc_price, sum(l_extendedprice * (1 - l_discount) * (1 + l_tax)) as sum_charge, avg(l_quantity) as avg_qty, avg(l_extendedprice) as avg_price, avg(l_discount) as avg_disc, count(*) as count_order from lineitem where l_shipdate <= date '1998-12-01' - interval '90' day group by l_returnflag, l_linestatus order by l_returnflag, l_linestatusBandingkan nilai waktu yang dikonsumsi (dalam detik) jika hasil kueri berisi empat baris data.
Kueri data pada node penyimpanan kolom hanya-baca
Jalankan pernyataan
CREATE TABLE new_tbl [AS] SELECT ...pada node utama saat fitur ETL dari IMCI tidak diaktifkanJalankan pernyataan
CREATE TABLE new_tbl [AS] SELECT ...pada node utama saat fitur ETL dari IMCI diaktifkanJalankan pernyataan
INSERT ... SELECT ...pada node utama saat fitur ETL dari IMCI tidak diaktifkanJalankan pernyataan
INSERT ... SELECT ...pada node utama saat fitur ETL dari IMCI diaktifkan0.58
>60
0.64
>60
0.58
Hasil kueri berisi 27.840 baris data.
select p_brand, p_type, p_size, count(distinct ps_suppkey) as supplier_cnt from partsupp, part where p_partkey = ps_partkey and p_brand <> 'Brand#45' and p_type not like 'MEDIUM POLISHED%' and p_size in (49, 14, 23, 45, 19, 3, 36, 9) and ps_suppkey not in ( select s_suppkey from supplier where s_comment like '%Customer%Complaints%' ) group by p_brand, p_type, p_size order by supplier_cnt desc, p_brand, p_type, p_sizeBandingkan nilai waktu yang dikonsumsi (dalam detik) jika hasil kueri berisi 27.840 baris data.
Kueri data pada node penyimpanan kolom hanya-baca
Jalankan pernyataan
CREATE TABLE new_tbl [AS] SELECT ...pada node utama saat fitur ETL dari IMCI tidak diaktifkanJalankan pernyataan
CREATE TABLE new_tbl [AS] SELECT ...pada node utama saat fitur ETL dari IMCI diaktifkanJalankan pernyataan
INSERT ... SELECT ...pada node utama saat fitur ETL dari IMCI tidak diaktifkanJalankan pernyataan
INSERT ... SELECT ...pada node utama saat fitur ETL dari IMCI diaktifkan0.55
>60
0.92
>60
0.82