管理資料表、具體化檢視區塊和 ScaNN 索引
您可以根據工作負載,手動將資料欄新增至資料欄儲存區,或從資料欄儲存區捨棄資料表或具體化檢視區的部分或所有資料欄。查詢評估作業會自動使用儲存的資料欄資料來回答查詢。
同樣地,您也可以手動將 ScaNN 索引新增至資料欄引擎,加快向量搜尋速度。這項功能可對大型向量嵌入資料集執行有效率的最近鄰搜尋。
選擇要新增至資料欄儲存庫的資料表、materialized view 和資料欄時,請考量資料欄儲存庫的大小和工作負載的型態。建議選取經常掃描的大型資料表或檢視表。在這些資料表或檢視區塊中,找出 OLAP 工作負載使用的任何大型非專屬索引。您可以將這些索引的資料欄新增至資料欄儲存庫,並視情況捨棄索引,進而消除在主要執行個體上維護索引所產生的效能成本。
請使用下列其中一種方法,管理資料欄引擎的內容:
如要瞭解將資料表、資料欄和 materialized view 新增至資料欄儲存庫時,可以使用哪些資料類型和資料來源,請參閱「可新增至資料欄儲存庫的資料」。
更新資料庫旗標,管理資料欄儲存庫內容
您可以更新 google_columnar_engine.relations 資料庫旗標,手動管理資料欄儲存區內容。這個旗標只有一個值,用於指定所有資料欄儲存庫的資料來源。重新啟動期間,這個旗標指定的資料欄會自動填入資料欄儲存庫。
您可以搭配自動分欄使用這個旗標。如果資料欄引擎在填入您透過 google_columnar_engine.relations 旗標指定的資料欄後,仍有可用記憶體,自動分欄功能會視需要將更多資料欄新增至資料欄儲存庫。
如要進一步瞭解如何設定資料庫旗標,請參閱「設定 AlloyDB Omni 資料庫旗標」。
使用標記新增資料欄
如要在資料欄存放區中新增資料欄,請定義 google_columnar_engine.relations 標記。將值設為以逗號分隔的清單,其中每個項目指定要從特定資料表納入的資料欄清單,格式如下:
DATABASE_NAME.SCHEMA_NAME.TABLE_NAME(COLUMN_LIST)
更改下列內容:
DATABASE_NAME:包含要新增至資料欄儲存庫的資料欄。
SCHEMA_NAME:識別要新增至資料欄存放區的資料表或具體化檢視區塊的結構定義,例如
public。TABLE_NAME:資料表或 materialized view,其中包含要新增至資料欄儲存庫的資料欄。
COLUMN_LIST:以半形逗號分隔的清單,列出要新增至資料欄儲存庫的資料欄。
如要新增資料表或 materialized view 的所有資料欄,請省略資料欄清單:
DATABASE_NAME.SCHEMA_NAME.TABLE_NAME
使用 google_columnar_engine.relations 時的 SQL 語法
以下範例說明如何使用 ALTER SYSTEM 指令,在資料欄存放區的 public 結構定義中新增兩個資料欄。
ALTER SYSTEM SET google_columnar_engine.relations='DATABASE_NAME.public.TABLE_NAME(COLUMN_1,COLUMN_2)';使用標記捨棄資料欄
如要從資料欄儲存庫中捨棄資料欄,請為上一節所述的 google_columnar_engine.relations 旗標設定新值,並省略要捨棄的資料欄。
如要從資料欄儲存庫中捨棄所有資料欄,請取消設定 google_columnar_engine.relations 旗標。
如要進一步瞭解如何設定資料庫旗標,請參閱「設定 AlloyDB Omni 資料庫旗標」。
使用 SQL 函式管理資料欄儲存庫內容
您可以使用 SQL 函式手動管理資料欄儲存區內容。
估算資料欄商店空間需求
執行 google_columnar_engine_estimate SQL 函式,估算資料欄引擎中關係所需的總空間。
psql 用戶端
SELECT google_columnar_engine_estimate(
relation => 'TABLE_NAME',
columns => 'COLUMN_LIST'
);
-
更改下列內容:
-
TABLE_NAME:包含資料表或具體化檢視區塊名稱的字串。如果資料表或檢視區塊位於 public 以外的結構定義中,請指定結構定義名稱、半形句號,以及資料表或檢視區塊名稱,例如'myschema.mytable'。 -
COLUMN_LIST:字串,包含要新增的資料欄名稱,以半形逗號分隔,且區分大小寫。如要將資料表或 materialized view 的所有資料欄新增至資料欄儲存庫,請省略這個參數。
使用 SQL 函式新增資料欄
執行 google_columnar_engine_add SQL 函式,將資料欄新增至資料欄儲存庫。
這個方法會將指定資料欄新增至資料欄儲存庫,且只會管理連結節點中的資料欄。重新啟動執行個體後,新資料欄不會保留在儲存區中。
這個方法不會變更google_columnar_engine.relations資料庫旗標。自動分欄不會考量這個 SQL 函式新增的資料欄。
psql 用戶端
SELECT google_columnar_engine_add(
relation => 'TABLE_NAME',
columns => 'COLUMN_LIST'
);
-
更改下列內容:
- 「TABLE_NAME」:包含資料表或 materialized view 名稱的字串。如果資料表或檢視表位於
public以外的結構定義,請指定結構定義名稱、點號,以及資料表或檢視表的名稱,例如'myschema.mytable'。 - 「COLUMN_LIST」:字串,包含要新增的資料欄名稱清單,以半形逗號分隔,且區分大小寫。如要將資料表或 materialized view 的所有資料欄新增至資料欄儲存庫,請省略這個參數。
使用 SQL 函式捨棄資料欄
執行 google_columnar_engine_drop SQL 函式,如下所示:
psql 用戶端
SELECT google_columnar_engine_drop(
relation => 'TABLE_NAME',
columns => 'COLUMN_LIST'
);
- 「TABLE_NAME」:包含資料表或 materialized view 名稱的字串。如果資料表或檢視表位於
public以外的結構定義,請指定結構定義名稱、點號,以及資料表或檢視表的名稱,例如'myschema.mytable'。 - 「COLUMN_LIST」:字串,包含要新增的資料欄名稱清單,以半形逗號分隔,且區分大小寫。如要將資料表或 materialized view 的所有資料欄新增至資料欄儲存庫,請省略這個參數。
您可以透過編輯 google_columnar_engine.relations 資料庫旗標,使用 google_columnar_engine_drop 函式移除新增的資料欄。不過,這麼做的話,執行個體重新啟動時,這些資料欄會重新新增至資料欄式儲存空間。
管理資料欄引擎中的 ScaNN 索引
如要加快向量搜尋速度,可以將 ScaNN 索引載入資料欄引擎的索引快取。
使用 SQL 函式新增、移除及驗證 ScaNN 索引
您可以使用 SQL 函式,手動新增、移除及驗證索引快取中的 ScaNN 索引。在快取中新增索引,可加快向量搜尋查詢。
新增 ScaNN 索引
如要將特定索引新增至資料欄引擎的索引快取,請使用下列 SQL 函式:
SELECT google_columnar_engine_add_index(index => 'SCANN_INDEX_NAME');
將 SCANN_INDEX_NAME 替換為要新增至資料欄引擎索引快取的 ScaNN 索引名稱。
移除 ScaNN 索引
如要從資料欄引擎中捨棄特定 ScaNN 索引,請使用下列 SQL 函式:
SELECT google_columnar_engine_drop_index(index => 'SCANN_INDEX_NAME');
將 SCANN_INDEX_NAME 替換為要移除的 ScaNN 索引名稱。
驗證資料欄引擎用量
如要確認向量索引掃描是否使用資料欄引擎,請執行 EXPLAIN ANALYZE 指令並加上 COLUMNAR_ENGINE 選項:
EXPLAIN (ANALYZE TRUE, SCANN TRUE, COSTS FALSE, TIMING FALSE, SUMMARY FALSE, VERBOSE FALSE, COLUMNAR_ENGINE TRUE)
SELECT * FROM t ORDER BY val <=> '[0.5,0.5,0.5,0.5]' LIMIT 100;
指令會傳回類似下列內容的查詢計畫:
Index Scan using t_ix3 on t t_1 (actual rows=100 loops=1)
Order By: (val <=> '[0.5,0.5,0.5,0.5]'::vector)
Limit: 100
ScaNN Info: (... columnar engine nodes hit=6...)
Columnar Engine ScaNN Info: (index found=true)
輸出內容中出現 columnar engine nodes hit 和 Columnar Engine ScaNN Info: (index found=true),代表查詢使用了資料欄引擎。