手動管理資料欄商店內容

您可以手動將資料表、materialized view、資料欄和向量索引新增至資料欄儲存庫,控管資料欄引擎要加速處理哪些資料。如需精細控管資料欄儲存庫的內容,而非仰賴自動分欄功能自動管理資料欄,請使用手動管理功能。

管理資料表、materialized view 和向量索引

您可以根據工作負載,手動將資料欄新增至資料欄儲存庫,或從資料欄儲存庫中捨棄資料表或 materialized view 的部分或所有資料欄。查詢評估會自動使用儲存的資料欄資料來回答查詢。

同樣地,您也可以手動將 HNSW 或 ScaNN 向量索引新增至資料欄引擎,加快向量搜尋速度。HNSW 索引的資料欄引擎加速功能已正式發布 (GA),ScaNN 索引的加速功能則處於預先發布版階段。這樣一來,就能在大型向量嵌入資料集,有效率地執行最鄰近搜尋。

選擇要新增至資料欄儲存庫的資料表、materialized view 和資料欄時,請考量資料欄儲存庫的大小和工作負載的型態。建議選取經常掃描的大型資料表或檢視表。在這些資料表或檢視表中,找出 OLAP 工作負載使用的任何大型非不重複索引。您可以將這些索引的資料欄新增至資料欄儲存庫,並視情況捨棄索引,進而消除在主要執行個體上維護索引的效能成本。

請使用下列其中一種方法,管理資料欄引擎的內容:

如要瞭解將資料表、資料欄和 materialized view 新增至資料欄儲存庫時,可以使用哪些資料類型和資料來源,請參閱「可新增至資料欄儲存庫的資料」。

事前準備

  • 您必須在使用的 Google Cloud 專案中具備下列其中一個 IAM 角色:
    • roles/alloydb.admin (AlloyDB 管理員預先定義的 IAM 角色)
    • roles/owner (擁有者基本 IAM 角色)
    • roles/editor (編輯者基本 IAM 角色)

    如果您不具備上述任一角色,請向組織管理員要求存取權。

更新資料庫旗標,管理資料欄儲存庫內容

您可以更新 google_columnar_engine.relations 資料庫旗標,手動管理資料欄儲存庫內容。這個旗標只有一個值,用於指定所有資料欄儲存庫的資料來源。重新啟動期間,這個旗標指定的資料欄會自動填入資料欄儲存庫。

這個旗標可與自動分欄搭配使用。如果資料欄引擎在填入您透過 google_columnar_engine.relations 旗標指定的資料欄後,仍有可用記憶體,自動分欄功能會視需要將更多資料欄新增至資料欄儲存庫。

如要進一步瞭解如何使用 Google Cloud CLI 或 Google Cloud 控制台設定執行個體的資料庫旗標,請參閱「設定執行個體的資料庫旗標」。

使用旗標新增資料欄

如要將資料欄新增至資料欄儲存庫,請定義執行個體的 google_columnar_engine.relations 旗標。將其值設為以逗號分隔的清單,每個項目指定要從特定資料表納入的資料欄清單,格式如下:

DATABASE_NAME.SCHEMA_NAME.TABLE_NAME(COLUMN_LIST)

更改下列內容:

  • DATABASE_NAME:包含要新增至資料欄儲存庫的資料欄。

  • SCHEMA_NAME:結構定義,用於識別要新增至資料欄儲存庫的資料表或 materialized view,例如 public。

  • TABLE_NAME:資料表或 materialized view,其中包含要新增至資料欄儲存庫的資料欄。

  • COLUMN_LIST:以半形逗號分隔的清單,列出要新增至資料欄儲存庫的資料欄。

如要新增資料表或 materialized view 的所有資料欄,請省略資料欄清單:

DATABASE_NAME.SCHEMA_NAME.TABLE_NAME

如要進一步瞭解如何設定執行個體的資料庫旗標,請參閱「設定執行個體的資料庫旗標」。

使用 google_columnar_engine.relations 時的 gcloud CLI 語法

如果使用 Google Cloud CLI 設定 google_columnar_engine.relations 旗標,則必須使用替代分隔符號語法,分隔設定的資料庫旗標。這是因為資料欄清單是以半形逗號分隔,因此在同一個指令列引數中指定旗標時,必須使用非半形逗號字元。

以下範例說明如何使用 gcloud CLI,將 public 結構定義中的兩個資料欄新增至資料欄儲存庫。這個範例會設定另一個旗標來啟用資料欄引擎,因為使用 gcloud alloydb instances update 指令設定任何資料庫旗標時,也必須設定所有其他要使用非預設值的資料庫旗標,即使這些旗標已設定也一樣。

gcloud alloydb instances update INSTANCE_NAME \
    --database-flags=^:^\
google_columnar_engine.relations='DATABASE_NAME.public.TABLE_NAME(COLUMN_1,COLUMN_2)'\
:google_columnar_engine.enabled=on\
[:FLAG_3=VALUE_3 ...] \
    --region=REGION_ID \
    --cluster=CLUSTER_ID

更改下列內容:

  • INSTANCE_NAME:執行個體的名稱。
  • DATABASE_NAME:資料庫,包含要新增至資料欄儲存庫的資料欄。
  • TABLE_NAME:資料表或 materialized view 名稱。
  • COLUMN_1, COLUMN_2:要新增至資料欄儲存庫的資料欄。
  • REGION_ID:執行個體所在的區域。
  • CLUSTER_ID:叢集 ID。

使用標記捨棄資料欄

如要從資料欄儲存庫中捨棄資料欄,請為上一節所述的 google_columnar_engine.relations 旗標設定新值,並省略要捨棄的資料欄。

如要從資料欄儲存庫中捨棄所有資料欄,請取消設定執行個體的 google_columnar_engine.relations 旗標。

如要進一步瞭解如何設定執行個體的資料庫旗標,請參閱「設定執行個體的資料庫旗標」。

使用 SQL 函式管理資料欄儲存庫內容

您可以使用 SQL 函式,手動管理資料欄儲存庫內容。

預估資料欄儲存空間需求

執行 google_columnar_engine_estimate SQL 函式,預估資料欄引擎中關係所需的總空間量。

psql 用戶端

SELECT google_columnar_engine_estimate(
    relation => 'TABLE_NAME',
    columns => 'COLUMN_LIST'
);

更改下列內容:

  • TABLE_NAME:包含資料表或 materialized view 名稱的字串。如果資料表或檢視表位於公開以外的結構定義,請指定結構定義名稱、點號,以及資料表或檢視表的名稱,例如 '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 函式移除新增的資料欄。不過,當您這麼做時,執行個體重新啟動後,這些資料欄會重新加入資料欄儲存庫。

管理資料欄引擎中的向量索引

如要加快向量搜尋速度,可以將向量索引載入資料欄引擎的索引快取。HNSW 索引的資料欄引擎加速功能已正式發布 (GA),ScaNN 索引的加速功能則處於預先發布版階段。

使用 SQL 函式新增、移除及驗證向量索引

您可以使用 SQL 函式,手動新增、移除及驗證索引快取中的向量索引。在快取中新增索引,可加快向量搜尋查詢。

新增向量索引

如要將特定索引新增至資料欄引擎的索引快取,請使用下列 SQL 函式:

SELECT google_columnar_engine_add_index(index => 'INDEX_NAME');

將 INDEX_NAME 替換成要新增至資料欄引擎索引快取的 HNSW 或 ScaNN 向量索引名稱。

移除向量索引

如要從資料欄引擎中捨棄特定向量索引,請使用下列 SQL 函式:

SELECT google_columnar_engine_drop_index(index => 'INDEX_NAME');

將 INDEX_NAME 替換為要移除的向量索引名稱。

驗證資料欄引擎用量

如要確認向量索引掃描是否使用資料欄引擎,請執行 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),代表查詢使用了資料欄引擎。

後續步驟