建立及管理參數化檢視區塊
您可以在 Bigtable 中從邏輯檢視區塊建立參數化檢視區塊,然後對參數化檢視區塊執行作業。
閱讀本頁面之前,請先熟悉「參數化檢視區塊總覽」。
事前準備
如果您打算使用 Google Cloud CLI,請按照下列步驟操作:
-
安裝 Google Cloud CLI。
-
設定 gcloud CLI,使用您的聯合身分。
詳情請參閱「使用聯合身分登入 gcloud CLI」。
-
執行下列指令,初始化 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 參數,提供乾淨的邏輯分隔。