本頁說明如何使用資料欄引擎中的運算式虛擬資料欄,加快查詢速度。
資料欄引擎可以具體化並快取常用運算式的結果。AlloyDB 會預先計算並儲存這些結果,避免在多個查詢中重複剖析及評估相同運算式。這個程序可提升查詢效能並降低 CPU 耗用量,特別是處理大型資料集的分析工作負載。
以下是運算式虛擬資料欄的一些用途:
- 依據 JSON 屬性篩選:經常依據 JSON 欄中的特定鍵/值組合篩選查詢。
- 複雜運算式評估:適用於涉及複雜或運算密集型運算式的查詢。
啟用運算式掃描的虛擬資料欄後,系統會自動最佳化使用資料欄引擎且含有常用運算式的查詢。在重新整理基礎資料欄時,直欄引擎會自動重新整理這些虛擬資料欄。
虛擬欄中支援的運算式
在 (預先發布版) 中,AlloyDB 支援對 JSON 和 JSONB 資料欄使用 -> 和 ->> 運算子。
事前準備
為 AlloyDB 叢集啟用資料欄引擎。詳情請參閱「設定直欄式引擎」。
使用查詢洞察功能,找出 AlloyDB 查詢中常用的運算式。
將運算式的基本資料欄新增至資料欄引擎。詳情請參閱「手動管理資料欄存放區內容」。
啟用運算式的虛擬資料欄
您可以使用 gcloud beta alloydb instances update 指令,為執行個體啟用運算式的虛擬資料欄支援功能。
如要使用 gcloud CLI,可以安裝並初始化 Google Cloud CLI,也可以使用 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"更改下列內容:
INSTANCE_ID:您的 AlloyDB 執行個體 ID。REGION_ID:AlloyDB 執行個體所在的區域。CLUSTER_ID:AlloyDB 執行個體的叢集 ID。PROJECT_ID:您的 Google Cloud 專案 ID。
如要在工作階段層級設定這個標記,請執行下列指令:
SET google_columnar_engine.enable_virtual_columns_scan=on;
新增運算式的虛擬資料欄
如要將常用運算式新增至直欄引擎,請使用 psql 用戶端呼叫 google_columnar_engine_add 函式。這些運算式會填入資料欄引擎,做為資料欄,與資料庫中已有的資料欄並列。
您可以透過逗號分隔值的形式指定多個運算式。
SELECT google_columnar_engine_add(
relation => 'DB.SCHEMA.TABLE_NAME',
columns => 'COLUMN_NAME, COLUMN_NAME',
expressions => 'EXP1, EXP2, EXP3'
);
更改下列內容:
DB.SCHEMA:儲存資料表的資料庫結構定義。TABLE_NAME:儲存資料欄的資料表名稱。COLUMN_NAME:包含運算式的資料欄名稱。EXP1, EXP2, EXP3,並以半形逗號分隔運算式。支援的 JSON 擷取運算式為->和->>。舉例來說,如要為
public結構定義中的employee資料表新增user ->> 'email'和user ->> 'name'運算式,請使用下列查詢:SELECT google_columnar_engine_add( relation => 'postgres.public.employee', expressions => '"user ->> ''email''", "user ->> ''name''"' );運算式語法:
- 以單引號括住整個運算式值,例如
expressions => 'EXP1,EXP2,EXP3'。 - 如有多個運算式,請以半形逗號分隔。
- 請將每個個別運算式括在雙引號中。
- 如要逸出運算式中的單引號,請使用另一個單引號。
舉例來說,如要新增
col -> 'level1'和col -> 'level1' ->> 'level2'運算式,請使用下列格式:expressions => '"col -> ''level1''", "col -> ''level1'' ->> ''level2''"'- 以單引號括住整個運算式值,例如
運算式虛擬資料欄範例
這個範例說明如何使用運算式虛擬資料欄功能。建立含有 profile JSONB 資料欄的 users 資料表,並填入範例資料。然後根據查詢分析,使用 google_columnar_engine_add 函式,將常用的 profile ->> 'email' 運算式新增至資料欄引擎。資料欄引擎接著會使用這個常見運算式,協助最佳化後續查詢。
如要將這個常見運算式範例新增至直欄引擎,請按照下列步驟操作:
前往 Google Cloud 控制台的「Clusters」(叢集) 頁面。
在「Resource name」(資源名稱) 欄中,按一下叢集名稱。
在導覽窗格中,按一下「AlloyDB Studio」。
如要建立含有
profileJSONB 資料欄的users資料表,請執行下列指令:CREATE TABLE users ( id int, username TEXT, profile JSONB );如要使用範例資料填入
users資料表,請執行下列指令: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;如要提升包含常用運算式的查詢效能,請將
profile ->> 'email'運算式新增至資料欄引擎:SELECT google_columnar_engine_add( relation => 'users', columns => 'username, profile', expressions => '"profile ->> ''email''"' );執行使用頻繁運算式的查詢,並觀察查詢完成所需的時間。
SELECT username FROM users WHERE profile->>'email' = 'user50000@example.com';啟用運算式虛擬資料欄功能。
SET google_columnar_engine.enable_virtual_columns_scan=on;重新執行使用頻繁運算式的查詢,並觀察查詢完成所需的時間。
SELECT username FROM users WHERE profile->>'email' = 'user50000@example.com';
為運算式啟用虛擬資料欄後,查詢執行時間會縮短。
查看運算式的虛擬資料欄
如要找出特定資料表新增的所有運算式,請查詢 g_columnar_virtual_columns 檢視畫面:
SELECT * FROM g_columnar_virtual_columns;
輸出內容類似如下,其中 description 欄位會顯示為資料表 (關聯) 新增的所有運算式。
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
移除運算式的虛擬資料欄
如要移除運算式,請呼叫 google_columnar_engine_drop() 函式:
SELECT google_columnar_engine_drop(
relation => 'DB.SCHEMA.TABLE_NAME',
expressions => 'EXP1, EXP2, EXP3'
);
將 EXP1, EXP2, EXP3 替換為資料表中以半形逗號分隔的運算式清單,格式與新增運算式時相同。