Halaman ini menjelaskan cara menggunakan kolom virtual untuk ekspresi di columnar engine guna mempercepat kueri.
Mesin columnar dapat mewujudkan dan menyimpan dalam cache hasil ekspresi yang sering digunakan. Dengan melakukan pra-penghitungan dan menyimpan hasil ini, AlloyDB menghindari penguraian dan evaluasi berulang dari ekspresi yang sama di beberapa kueri. Proses ini meningkatkan performa kueri dan mengurangi konsumsi CPU, terutama untuk beban kerja analitis pada set data besar.
Beberapa kasus penggunaan kolom virtual untuk ekspresi adalah sebagai berikut:
- Memfilter atribut JSON: saat Anda sering memfilter kueri berdasarkan key-value pair tertentu dalam kolom JSON.
- Evaluasi ekspresi kompleks: untuk kueri yang melibatkan ekspresi kompleks atau intensif secara komputasi.
Saat Anda mengaktifkan kolom virtual untuk pemindaian ekspresi, kueri yang menggunakan mesin columnar dan berisi ekspresi yang sering digunakan akan dioptimalkan secara otomatis. Mesin columnar akan otomatis memuat ulang kolom virtual ini saat memuat ulang kolom dasar.
Ekspresi yang didukung di kolom virtual
AlloyDB mendukung operator -> dan ->> pada kolom JSON dan JSONB dalam rilis (Pratinjau).
Sebelum memulai
Aktifkan mesin berbasis kolom untuk cluster AlloyDB Anda. Untuk mengetahui informasi selengkapnya, lihat Mengonfigurasi mesin columnar.
Identifikasi ekspresi yang sering digunakan dalam kueri AlloyDB Anda menggunakan insight kueri.
Menambahkan kolom dasar ekspresi ke columnar engine. Untuk mengetahui informasi selengkapnya, lihat Mengelola konten column store secara manual.
Mengaktifkan kolom virtual untuk ekspresi
Anda dapat mengaktifkan dukungan untuk kolom virtual untuk ekspresi instance menggunakan perintah gcloud beta alloydb instances update.
Untuk menggunakan gcloud CLI, Anda dapat menginstal dan melakukan inisialisasi Google Cloud CLI, atau Anda dapat menggunakan Cloud Shell.
gcloud beta alloydb instances update INSTANCE_ID \
--region=REGION_ID \
--cluster=CLUSTER_ID \
--project=PROJECT_ID \
--update-mode=INPLACE \
--add-database-flags="google_columnar_engine.enable_virtual_columns_scan=on"Ganti kode berikut:
INSTANCE_ID: ID instance AlloyDB Anda.REGION_ID: region instance AlloyDB Anda.CLUSTER_ID: ID cluster instance AlloyDB Anda.PROJECT_ID: Google Cloud project ID Anda.
Untuk menyetel tanda ini di tingkat sesi, jalankan perintah berikut:
SET google_columnar_engine.enable_virtual_columns_scan=on;
Menambahkan kolom virtual untuk ekspresi
Untuk menambahkan ekspresi yang umum digunakan ke mesin columnar, gunakan klien psql untuk memanggil fungsi google_columnar_engine_add. Ekspresi ini diisi ke dalam columnar engine sebagai kolom selain kolom yang sudah ada dalam database.
Anda dapat menentukan beberapa ekspresi sebagai nilai yang dipisahkan koma.
SELECT google_columnar_engine_add(
relation => 'DB.SCHEMA.TABLE_NAME',
columns => 'COLUMN_NAME, COLUMN_NAME',
expressions => 'EXP1, EXP2, EXP3'
);
Ganti kode berikut:
DB.SCHEMA: skema database tempat tabel Anda disimpan.TABLE_NAME: nama tabel tempat kolom Anda disimpan.COLUMN_NAME: nama kolom yang menyertakan ekspresi.EXP1, EXP2, EXP3dengan daftar ekspresi yang dipisahkan koma. Ekspresi Ekstrak JSON yang didukung adalah->dan->>.Misalnya, untuk menambahkan ekspresi
user ->> 'email'danuser ->> 'name'untuk tabelemployeedalam skemapublic, gunakan kueri berikut:SELECT google_columnar_engine_add( relation => 'postgres.public.employee', expressions => '"user ->> ''email''", "user ->> ''name''"' );Sintaksis Ekspresi:
- Sertakan seluruh nilai ekspresi dalam tanda petik tunggal—misalnya,
expressions => 'EXP1,EXP2,EXP3'. - Pisahkan beberapa ekspresi dengan koma.
- Sertakan setiap ekspresi individual dalam tanda kutip ganda.
- Loloskan tanda kutip tunggal dalam ekspresi dengan menggunakan tanda kutip tunggal lain.
Misalnya, untuk menambahkan ekspresi
col -> 'level1'dancol -> 'level1' ->> 'level2', gunakan format berikut:expressions => '"col -> ''level1''", "col -> ''level1'' ->> ''level2''"'- Sertakan seluruh nilai ekspresi dalam tanda petik tunggal—misalnya,
Contoh kolom virtual untuk ekspresi
Contoh ini menunjukkan cara menggunakan fitur kolom virtual untuk ekspresi. Buat tabel users dengan kolom JSONB profile dan isi dengan data sampel. Kemudian, berdasarkan analisis kueri, tambahkan ekspresi profile ->> 'email' yang sering digunakan ke columnar engine dengan fungsi google_columnar_engine_add. Mesin columnar kemudian menggunakan ekspresi yang sering digunakan ini untuk membantu mengoptimalkan kueri berikutnya.
Untuk menambahkan contoh ekspresi sering muncul ini ke mesin columnar, ikuti langkah-langkah berikut:
Di konsol Google Cloud , buka halaman Clusters.
Klik nama cluster Anda di kolom Nama resource.
Di panel navigasi, klik AlloyDB Studio.
Untuk membuat tabel
usersdengan kolom JSONBprofile, jalankan perintah berikut:CREATE TABLE users ( id int, username TEXT, profile JSONB );Untuk mengisi tabel
usersdengan data contoh, jalankan perintah berikut:INSERT INTO users (id, username, profile) SELECT i, 'user' || i, jsonb_build_object( 'name', 'User ' || i, 'email', 'user' || i || '@example.com', 'active', (i % 2 = 0) ) FROM generate_series(1, 100000) AS i;Untuk meningkatkan performa kueri yang menyertakan ekspresi yang sering digunakan, tambahkan ekspresi
profile ->> 'email'ke mesin columnar:SELECT google_columnar_engine_add( relation => 'users', columns => 'username, profile', expressions => '"profile ->> ''email''"' );Jalankan kueri yang menggunakan ekspresi sering dan amati waktu yang diperlukan kueri untuk selesai.
SELECT username FROM users WHERE profile->>'email' = 'user50000@example.com';Aktifkan fitur kolom virtual untuk ekspresi.
SET google_columnar_engine.enable_virtual_columns_scan=on;Jalankan kembali kueri yang menggunakan ekspresi sering dan amati waktu yang diperlukan untuk menyelesaikan kueri.
SELECT username FROM users WHERE profile->>'email' = 'user50000@example.com';
Waktu proses kueri lebih cepat setelah Anda mengaktifkan kolom virtual untuk ekspresi.
Melihat kolom virtual untuk ekspresi
Untuk menemukan semua ekspresi yang ditambahkan untuk tabel tertentu, kueri tampilan g_columnar_virtual_columns:
SELECT * FROM g_columnar_virtual_columns;
Outputnya akan terlihat mirip dengan berikut ini, dengan kolom description menampilkan semua ekspresi yang ditambahkan untuk tabel (relasi).
SELECT * FROM g_columnar_virtual_columns;
category | expression
database_name | testdb
schemas | {public}
relations | {users}
description | profile->>'email'
column_data_type | text
status | Usable
last_accessed_time | 2026-02-04 06:25:32.499601+00
num_times_accessed | 1
Menghapus kolom virtual untuk ekspresi
Untuk menghapus ekspresi, panggil fungsi google_columnar_engine_drop():
SELECT google_columnar_engine_drop(
relation => 'DB.SCHEMA.TABLE_NAME',
expressions => 'EXP1, EXP2, EXP3'
);
Ganti EXP1, EXP2, EXP3 dengan daftar ekspresi yang dipisahkan koma dalam tabel dengan format yang sama seperti yang digunakan saat menambahkan ekspresi.