建立及管理參數化檢視區塊

您可以在 Bigtable 中從邏輯檢視區塊建立參數化檢視區塊,然後對參數化檢視區塊執行作業。

閱讀本頁面之前,請先熟悉「參數化檢視區塊總覽」。

事前準備

如果您打算使用 Google Cloud CLI,請按照下列步驟操作:

  1. 安裝 Google Cloud CLI。

  2. 若您採用的是外部識別資訊提供者 (IdP),請先使用聯合身分登入 gcloud CLI

  3. 執行下列指令,初始化 gcloud CLI:

    gcloud init

必要的角色

如要取得建立及管理參數化檢視區塊所需的權限,請要求管理員授予您執行個體的 Bigtable 管理員 (roles/bigtable.admin) 角色。

或者,您可以在執行個體層級要求下列權限:

  • 建立:bigtable.logicalViews.create
  • 更新狀態:bigtable.logicalViews.update
  • 刪除:bigtable.logicalViews.delete
  • 清單:bigtable.logicalViews.list

如要建立參數化檢視區塊,您也必須至少具備來源資料表的 bigtable.tables.readRows 權限。

建立參數化檢視區塊

參數化檢視表是由 SQL SELECT 陳述式定義的虛擬資料表,可包含 VIEW_PARAMETERS() 函式。

如要建立參數化檢視區塊,請使用 gcloud bigtable logical-views create 指令。

gcloud bigtable logical-views create VIEW \
  --instance=INSTANCE \
  --query="SELECT * FROM TABLE_ID WHERE STARTS_WITH(_key, CAST(VIEW_PARAMETERS('VIEW_PARAMETERS') AS BYTES))"

更改下列內容:

  • VIEW:新參數化檢視區塊的 ID,最多 128 個字元。ID 在執行個體中的資料表 ID 和檢視區塊 ID 中不得重複。
  • INSTANCE:要在其中建立參數化檢視區塊的執行個體 ID。
  • TABLE_ID:來源資料表的 ID。
  • VIEW_PARAMETERS:檢視區塊參數的名稱,以單引號括住,做為 VIEW_PARAMETERS() 函式的引數傳遞。

選用:

  • 如要防止系統刪除參數化檢視區塊,請在指令中附加 --deletion-protection 標記。如果未套用這項設定,系統可能會刪除檢視區塊。您也可以附加 --no-deletion-protection,明確允許刪除檢視區塊。詳情請參閱本文的「更新參數化檢視區塊」一節。

使用結構化資料列索引鍵建立參數化檢視畫面

如果資料表使用結構化資料列索引鍵,您可以篩選資料列索引鍵的特定區隔。

舉例來說,如果購買記錄資料表中的資料列索引鍵儲存了使用者、購買日期的時間戳記和訂單 ID,並以 # 符號做為分隔符號,您可以指定資料列結構定義如下:

field {
    field_name: "user_id"
    type: { bytesType { encoding { raw {} } } }
  }
  field {
    field_name: "reversed_timestamp"
    type: { timestampType { encoding { unixMicrosInt64 { encoding: {           orderedCodeBytes: {} } } } } }
  }
  field {
    field_name: "order_id"
    type: { stringType { encoding { utf8Bytes {} } } }
  }
  encoding {
    delimitedBytes { delimiter "#" }
  }

接著,您可以建立資料檢視,並根據 User-ID 欄位進行篩選:

gcloud bigtable logical-views create VIEW \
    --instance=INSTANCE \
    --query="SELECT * FROM TABLE_ID WHERE user_id = CAST(VIEW_PARAMETERS('user_id') AS BYTES)"

更改下列內容:

  • VIEW:新參數化檢視區塊的 ID,最多 128 個字元。這個 ID 在執行個體中不得與其他表格 ID 和檢視區塊 ID 重複。
  • INSTANCE:要在其中建立參數化檢視區塊的執行個體 ID。
  • TABLE_ID:來源資料表的 ID。

更新參數化檢視

更新參數化檢視區塊的方式與更新邏輯檢視區塊相同。

刪除參數化檢視畫面

刪除參數化檢視區塊的方式與刪除邏輯檢視區塊相同。

查看參數化檢視區塊的相關資訊

查看執行個體的邏輯檢視畫面清單時,也會看到參數化檢視畫面清單。

查詢參數化檢視區塊

查詢參數化檢視表的方式與一般資料表類似,但您會在要求中提供 view_parameters 對應。

以下範例說明如何查詢名為 purchase_history_pv 的參數化檢視區塊,該檢視區塊會根據使用者 ID 篩選資料。

// Assumes 'purchase_history_pv' was created with the definition:
// SELECT * FROM purchases WHERE user_id = CAST(VIEW_PARAMETERS('user_id') AS BYTES)

String query = "SELECT customer_info[email], order_details[status], order_info[items] from purchase_history_pv";
PreparedStatement preparedStatement = dataClient.prepareStatement(query);
BoundStatement boundStatement = preparedStatement.bind().build();

// The user ID is now passed out-of-band in a view parameters map.
Map<String, Value> viewParameters = new HashMap<>();
viewParameters.put("user_id", Value.newBuilder().setType(stringType()).setStringValue(userId).build());

// Execute the query, passing the view parameters using a proto field in the request.
ResultSet rs = dataClient.executeQuery(
    boundStatement,
    viewParameters
);

這樣一來,使用者就無法查看或操控查詢中的 user_id 參數,提供乾淨的邏輯分隔。

後續步驟