使用查詢範本

資料擁有者和貢獻者可透過 BigQuery 資料無塵室查詢範本,發布經核准的查詢供訂閱者使用。預先定義這些查詢可降低資料外洩風險、確保分析結果一致,並簡化分析師的入門程序,即使他們不熟悉以隱私權為重的 SQL 也能輕鬆上手。

查詢範本會使用資料表值函式 (TVF),接受資料表或特定欄位做為參數,並傳回結果,不會公開原始資料。

限制

查詢範本有下列限制:

  • 查詢範本最多支援兩個資料參照,也就是用來定義 TVF 查詢的資料,以及 TVF 接受的資料參數輸入。您可以在 TVF 的查詢定義中參照多個資料表或檢視區塊,但這些資料表或檢視區塊必須屬於同一個資料擁有者或當事人。
  • 查詢範本 TVF 僅支援 TABLE 和 VIEW 固定類型。
  • 查詢範本定義須遵守與 TVF 相同的限制。

角色

使用資料無塵室查詢範本時,主要有三種角色。每個角色都有特定的工作流程,詳情請參閱本文:

事前準備

如要為 Google Cloud 專案啟用 Analytics Hub API,請選取下列其中一個選項:

控制台

  1. 前往 Google Cloud 控制台的「Analytics Hub API」頁面。

    前往 Analytics Hub API

  2. 在 Google Cloud 控制台工具列中選取專案。

  3. 如果 API 尚未啟用,請點選「啟用」。

bq

執行 gcloud services enable 指令:

gcloud services enable analyticshub.googleapis.com

必要的角色

如要取得執行本文中工作所需的權限,請要求管理員授予您下列 IAM 角色:

如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和組織的存取權」。

這些預先定義的角色具備執行本文件所述工作所需的權限。如要查看確切的必要權限,請展開「Required permissions」(必要權限) 部分:

所需權限

您必須具備下列權限,才能執行本文件中的工作:

  • 在資料無塵室中建立或刪除 TVF:
    • 專案的 bigquery.routines.create
    • 專案有 bigquery.routines.update
    • 專案有 bigquery.routines.delete
  • 授權 TVF: bigquery.datasets.update 在日常安排存取的資料集上
  • 建立查詢範本:
    • 專案的 analyticshub.listings.subscribe
    • 專案的 analyticshub.queryTemplates.create
  • 核准查詢範本:
    • 專案的 bigquery.routines.create
    • bigquery.datasets.update 經常存取的資料集
    • 專案的 analyticshub.listings.create
    • 專案的 analyticshub.queryTemplates.approve
  • 更新現有查詢範本: analyticshub.queryTemplates.update 查詢範本
  • 擷取查詢範本的詳細資料: analyticshub.queryTemplates.get 查詢範本
  • 列出資料交換中的所有查詢範本: analyticshub.queryTemplates.list 在資料交換上
  • 刪除查詢範本:在查詢範本上按一下 analyticshub.queryTemplates.delete

您或許還可透過自訂角色或其他預先定義的角色取得這些權限。

範本建立者工作流程

查詢範本建立者可以執行下列操作:

將產品資訊新增至資料無塵室

建立查詢範本前,請務必先將資料新增至資料無塵室。如要在資料無塵室中建立產品資訊,請按照下列步驟操作:

  1. 前往 Google Cloud 控制台的「Sharing (Analytics Hub)」頁面。

    前往「共用 (Analytics Hub)」

  2. 按一下要建立查詢範本的資料無塵室顯示名稱。

  3. 按一下「Add data」(新增資料),然後按照步驟建立已設定分析規則的檢視表。如需詳細操作說明,請參閱「建立產品資訊 (新增資料)」。

    如要新增其他方的資料,請與其他信任的貢獻者共用資料無塵室。此外,資料提供者也必須將資料新增至資料無塵室,才能在查詢範本中使用。

  4. 為商家資訊設定資料輸出控制選項。

  5. 設定產品資訊的中繼資料控制項。如果只想分享上一步新增資料的結構定義和說明 (而非共用資料本身),請選取「Exclude access to listing from linked dataset」(排除連結資料集的清單存取權)。

  6. 查看商店資訊詳細資料。

  7. 按一下「新增資料」。資料無塵室現在包含您為資料建立的檢視表中繼資料。

將現有 TVF 新增至資料無塵室

您可以使用 Analytics Hub API,將現有的 TVF 新增至資料無塵室。

請使用 projects.locations.dataExchanges.listings.create 方法。

以下範例說明如何使用 curl 指令呼叫 projects.locations.dataExchanges.listings.create 方法:

    curl -H "Authorization: Bearer $(gcloud auth print-access-token)" -H "Content-Type: application/json" -H 'x-goog-user-project:DCR_PROJECT_ID' -X POST https://analyticshub.googleapis.com/v1/projects/DCR_PROJECT_ID/locations/LOCATION/dataExchanges/CLEAN_ROOM_ID/listings?listingId=LISTING_ID -d
    '{"bigqueryDataset":{"dataset":"projects/PROJECT_ID/datasets/DATASET_ID","selectedResources":[{"routine":"projects/PROJECT_ID/datasets/DATASET_ID/tables/ROUTINE_ID"}]},"displayName":"LISTING_NAME"}'

更改下列內容:

  • DCR_PROJECT_ID:資料無塵室建立所在專案的專案 ID。
  • LOCATION:資料無塵室的位置。
  • CLEAN_ROOM_ID:資料無塵室 ID。
  • LISTING_ID:房源 ID。
  • PROJECT_ID:來源資料集所在專案的專案 ID。
  • DATASET_ID:來源資料集 ID。
  • ROUTINE_ID:日常安排 ID。
  • LISTING_NAME:房源顯示名稱。

建立查詢範本

如要建立查詢範本,請選取下列任一選項:

控制台

  1. 前往 Google Cloud 控制台的「Sharing (Analytics Hub)」頁面。

    前往「共用 (Analytics Hub)」

  2. 按一下要建立查詢範本的資料無塵室顯示名稱。

  3. 在資料無塵室中,前往「範本」分頁。

  4. 按一下「建立範本」。

  5. 輸入範本顯示名稱和說明。

  6. 點選「下一步」。

  7. 使用新增至資料無塵室的檢視表結構定義,提出查詢定義:

    • 使用支援的 CREATE TABLE FUNCTION 語法定義查詢。
    • 傳遞整個資料表或檢視表,並使用固定定義。您必須定義完整的資料表路徑參照,包括專案 ID 和資料集 ID,這些資料來自加入無塵室的資料。例如:

          query_template1(t1 TABLE<year INT64>) AS (SELECT * FROM `project_id.dataset_id.table_id` WHERE year = table_id.year)
      
    • 如果您對資料套用了隱私權分析規則,請確認這個 TVF 包含隱私權專屬 SQL 語法,例如 SELECT WITH AGGREGATION_THRESHOLD。

  8. 查看範本詳細資料。

  9. 如要儲存範本,但不送審,請按一下「儲存」。 查詢範本的狀態現在會顯示為「DRAFT」。

您可以更新查詢範本或將查詢範本送交審查。

API

下列範例說明如何使用 curl 指令建立查詢範本:

curl -H "Authorization: Bearer $(gcloud auth print-access-token)" -H "Content-Type: application/json" -H 'x-goog-user-project:DCR_PROJECT_ID' -X POST https://analyticshub.googleapis.com/v1/projects/DCR_PROJECT_ID/locations/LOCATION/dataExchanges/CLEAN_ROOM_ID/queryTemplates?queryTemplateId=QUERY_TEMPLATE_ID -d
  'query_template {
  display_name: "DISPLAY_NAME",
  routine {
    definition_body: "QUERY_TEMPLATE_ID(TVF arguments) AS (TVF_DEFINITION)"
  }
}'

更改下列內容:

  • DCR_PROJECT_ID:資料無塵室建立所在專案的專案 ID。
  • LOCATION:資料無塵室的位置。
  • CLEAN_ROOM_ID:資料無塵室 ID。
  • QUERY_TEMPLATE_ID:查詢範本 ID。
  • DISPLAY_NAME:查詢範本的顯示名稱。查詢範本建立後,即無法更新顯示名稱。
  • TVF_DEFINITION:TVF 定義。

下列程式碼範例顯示 API 呼叫的 definition_body 範例。您必須定義完整的資料表路徑參照,包括專案 ID 和資料集 ID,這些資料來自於加入無塵室的資料:

  query_template1(t1 TABLE<year INT64>) AS (SELECT * FROM `project_id.dataset_id.table_id` WHERE year = table_id.year)

definition_body 類似於日常安排的定義。上述 definition_body 會轉譯為下列常式:

  CREATE OR REPLACE TABLE FUNCTION <approvers_dataset>.query_template1(t1 TABLE, y INT64)
  AS (SELECT * FROM t1 WHERE year > y)

您可以更新查詢範本,或將查詢範本送審。

更新查詢範本

只有在查詢範本處於「草稿」狀態時,才能更新範本。查詢範本送審後即無法修改。

如要更新查詢範本,請選取下列其中一個選項:

控制台

  1. 前往 Google Cloud 控制台的「Sharing (Analytics Hub)」頁面。

    前往「共用」(Analytics Hub)

  2. 按一下含有查詢範本的資料無塵室顯示名稱。

  3. 在資料無塵室中,前往「範本」分頁。

  4. 在要更新的範本列中,依序按一下 「Actions」(動作) >「Edit template」(編輯範本)。

  5. 視需要更新說明和主要聯絡人。

  6. 點選「下一步」。

  7. 查看範本詳細資料。

  8. 如要儲存範本,但不送審,請按一下「儲存」。

API

以下範例說明如何使用 curl 指令更新查詢範本:

 curl -H "Authorization: Bearer $(gcloud auth print-access-token)" \
 -H "Content-Type: application/json" \
 -H 'x-goog-user-project:DCR_PROJECT_ID' \
 -X PATCH "https://analyticshub.googleapis.com/v1/projects/DCR_PROJECT_ID/locations/LOCATION/dataExchanges/CLEAN_ROOM_ID/queryTemplates/QUERY_TEMPLATE_ID?updateMask=description" \
 -d '{
   "query_template": {
     "description": "New query template"
   }
 }'

更改下列內容:

  • DCR_PROJECT_ID:資料無塵室建立所在專案的專案 ID。
  • LOCATION:資料無塵室的位置。
  • CLEAN_ROOM_ID:資料無塵室 ID。
  • QUERY_TEMPLATE_ID:查詢範本 ID。

將查詢範本送交審查

如要提交查詢範本進行審查,請選取下列其中一個選項:

控制台

  1. 前往 Google Cloud 控制台的「Sharing (Analytics Hub)」頁面。

    前往「共用 (Analytics Hub)」

  2. 按一下含有查詢範本的資料無塵室顯示名稱。

  3. 在資料無塵室中,前往「範本」分頁。

  4. 在要送審的範本資料列中,依序按一下 「Actions」(動作) >「Submit for review」(送審)。範本的狀態現在為「需要審查」。

API

以下範例說明如何使用 curl 指令,提交查詢範本以供審查:

  curl -H "Authorization: Bearer $(gcloud auth print-access-token)" -H "Content-Type: application/json" -H 'x-goog-user-project:DCR_PROJECT_ID' -X POST https://analyticshub.googleapis.com/v1/projects/DCR_PROJECT_ID/locations/LOCATION/dataExchanges/CLEAN_ROOM_ID/queryTemplates/QUERY_TEMPLATE_ID:submit

更改下列內容:

  • DCR_PROJECT_ID:資料無塵室建立所在專案的專案 ID。
  • LOCATION:資料無塵室的位置。
  • CLEAN_ROOM_ID:資料無塵室 ID。
  • QUERY_TEMPLATE_ID:查詢範本 ID。

刪除查詢範本

只有在查詢範本處於「草稿」狀態時,才能刪除。查詢範本送審後即無法刪除。

如要刪除查詢範本,請選取下列其中一個選項:

控制台

  1. 前往 Google Cloud 控制台的「Sharing (Analytics Hub)」(共用 (Analytics Hub)) 頁面。

    前往「共用」(Analytics Hub)

  2. 按一下含有查詢範本的資料無塵室顯示名稱。

  3. 在資料無塵室中,前往「範本」分頁。

  4. 在要刪除的範本資料列中,依序按一下 「Actions」(動作) >「Delete template」(刪除範本)。

API

以下範例說明如何使用 curl 指令刪除查詢範本:

  curl -H "Authorization: Bearer $(gcloud auth print-access-token)" -H "Content-Type: application/json" -H 'x-goog-user-project:DCR_PROJECT_ID' -X DELETE https://analyticshub.googleapis.com/v1/projects/DCR_PROJECT_ID/locations/LOCATION/dataExchanges/CLEAN_ROOM_ID/queryTemplates?queryTemplateId=QUERY_TEMPLATE_ID

更改下列內容:

  • DCR_PROJECT_ID:資料無塵室建立所在專案的專案 ID。
  • LOCATION:資料無塵室的位置。
  • CLEAN_ROOM_ID:資料無塵室 ID。
  • QUERY_TEMPLATE_ID:查詢範本 ID。

範本核准者工作流程

查詢範本核准者可以核准查詢範本。

如果 TVF 參照的資料不屬於您 (例如其他貢獻者的資料),則只有該資料的擁有者可以核准查詢範本。如果您建立的 TVF 只參照您的資料,用於單向共用,則可自行核准查詢範本。

核准查詢範本

如要核准查詢範本,請選取下列其中一個選項:

控制台

  1. 前往 Google Cloud 控制台的「Sharing (Analytics Hub)」頁面。

    前往「共用 (Analytics Hub)」

  2. 按一下含有查詢範本的資料無塵室顯示名稱。

  3. 在資料無塵室中,前往「範本」分頁。

  4. 在需要審查的範本資料列中,依序按一下 「核准狀態」 >「需要審查」。

  5. 按一下「核准」。

  6. 選取範本位置。這個位置是建立 TVF 以供分享的位置。

  7. 查看建議的查詢範本。

  8. 如要核准查詢範本,以便在資料無塵室中使用,請按一下「Approve」(核准)。

API

  1. 呼叫 jobserver.query 方法,從查詢範本建立常式:

    curl -H "Authorization: Bearer $(gcloud auth print-access-token)" -H "Content-Type: application/json" -L -X POST https://bigquery.googleapis.com/bigquery/v2/projects/ROUTINE_PROJECT_ID/queries --data '{"query":"ROUTINE_CREATION_QUERY","useLegacySql":false}'

    更改下列內容:

    • ROUTINE_PROJECT_ID:建立常式的專案 ID。
    • ROUTINE_CREATION_QUERY:建立常式的查詢。
  2. 將建立的常式新增至資料無塵室:

    curl -H "Authorization: Bearer $(gcloud auth print-access-token)" -H "Content-Type: application/json" -H 'x-goog-user-project:DCR_PROJECT_ID' -X POST https://analyticshub.googleapis.com/v1/projects/DCR_PROJECT_ID/locations/LOCATION/dataExchanges/CLEAN_ROOM_ID/listings?listingId=LISTING_ID -d
    '{"bigqueryDataset":{"dataset":"projects/PROJECT_ID/datasets/DATASET_ID","selectedResources":[{"routine":"projects/PROJECT_ID/datasets/DATASET_ID/tables/ROUTINE_ID"}]},"displayName":"LISTING_NAME"}'

    更改下列內容:

    • DCR_PROJECT_ID:建立資料無塵室的專案 ID。
    • LOCATION:資料無塵室的位置。
    • CLEAN_ROOM_ID:資料無塵室 ID。
    • LISTING_ID:房源 ID。
    • PROJECT_ID:來源資料集所在專案的專案 ID。
    • DATASET_ID:來源資料集 ID。
    • ROUTINE_ID:日常安排 ID。
    • LISTING_NAME:產品資訊顯示名稱。
  3. 將查詢範本狀態更新為「APPROVED」:

    curl -H "Authorization: Bearer $(gcloud auth print-access-token)" -H "Content-Type: application/json" -L -X POST https://analyticshub.googleapis.com/v1/projects/DCR_PROJECT_ID/locations/LOCATION/dataExchanges/CLEAN_ROOM_ID/queryTemplates/QUERY_TEMPLATE_ID:approve  --data '{}'

    更改下列內容:

    • DCR_PROJECT_ID:建立資料無塵室的專案 ID。
    • LOCATION:資料無塵室的位置。
    • CLEAN_ROOM_ID:資料無塵室 ID。
    • QUERY_TEMPLATE_ID:查詢範本 ID。

拒絕查詢範本

在 Google Cloud 控制台中,您可以不核准提交的查詢範本,藉此拒絕該範本。

範本訂閱者工作流程

查詢範本訂閱者可以查看及訂閱資料無塵室。如果只將查詢範本新增至資料無塵室,訂閱資料無塵室後,只能存取對應的 TVF,無法存取基礎共用資料。

訂閱查詢範本

如要訂閱查詢範本,請選取下列任一選項:

控制台

如要訂閱查詢範本,請訂閱資料無塵室。訂閱後,您就能存取所有已停用「排除連結資料集的清單存取權」設定的清單。

訂閱資料無塵室後,請按照下列步驟執行查詢範本:

  1. 前往 Google Cloud 控制台的「BigQuery」頁面。

    前往「BigQuery」

  2. 在「Explorer」窗格中,前往您訂閱資料無塵室時建立的連結資料集。

  3. 開啟連結資料集中共用的常式或資料表值函式。

  4. 按一下「叫用資料表函式」。

  5. 將參數替換為可接受的輸入內容,也就是資料表名稱或欄位。

  6. 按一下「執行」。

如果無法在「Explorer」窗格中,將 TVF 巢狀結構視為連結資料集的子元素,可以直接在連結的資料集上查詢 TVF:

SELECT * FROM `my_project.dcr_linked_dataset.mytvf`(TABLE myTable);

API

請使用 projects.locations.dataExchanges.subscribe 方法。

以下範例說明如何使用 curl 指令呼叫 projects.locations.dataExchanges.subscribe 方法:

  curl -H "Authorization: Bearer $(gcloud auth print-access-token)" -H "Content-Type: application/json" -L -X POST https://analyticshub.googleapis.com/v1/projects/DCR_PROJECT_ID/locations/LOCATION/dataExchanges/CLEAN_ROOM_ID:subscribe  --data '{"destination":"projects/SUBSCRIBER_PROJECT_ID/locations/LOCATION","subscription":"SUBSCRIPTION"}'

更改下列內容:

  • DCR_PROJECT_ID:資料無塵室建立所在專案的專案 ID。
  • LOCATION:資料無塵室的位置。
  • CLEAN_ROOM_ID:資料無塵室 ID。
  • SUBSCRIBER_PROJECT_ID: 範本訂閱者專案的專案 ID。
  • SUBSCRIPTION:訂閱方案名稱。

訂閱查詢範本後,即可直接在連結的資料集上查詢 TVF:

SELECT * FROM `my_project.dcr_linked_dataset.mytvf`(TABLE myTable);

範例情境

您可以使用查詢範本,在資料無塵室中進行不同形式的資料協作。以下各節說明範例情境。

單向共用情境

資料發布者會建立查詢範本,讓訂閱合作夥伴只能執行發布者定義的查詢。查詢範本建立者會自行核准查詢範本,因為資料無塵室中沒有其他協作者。

在這個情境中,使用者 A 是資料無塵室擁有者,他建立名為 campaign_analysis 的資料無塵室,並新增名為 my_campaign 的資料集,其中包含 campaigns 資料表。使用者 A 設定匯總門檻政策和中繼資料控制項,因此只有中繼資料結構定義會顯示,且範本訂閱者無法存取來源資料。接著,使用者 A 從 campaigns 資料表定義 TVF,建立查詢範本,限制連結資料集的訂閱者只能執行 TVF。

TVF 語法如下:

campaigns_template(t1 TABLE<campaign_ID STRING>) AS (
SELECT WITH AGGREGATION_THRESHOLD company_id, company, sum(impressions) FROM my_project.my_campaign.campaigns
group by company_id, company
);

由於使用者 A 具備 BigQuery 資料擁有者角色,因此擁有 campaigns 資料表的適當權限,使用者 A 提交查詢範本供審查後,可以立即自行核准。

與多方分享協作內容

資料無塵室擁有者邀請受信任的參與者,提議對彼此的資料執行查詢。雙方只能查看中繼資料結構定義,無法存取基礎共用資料,因此可安全地提出查詢。如果查詢定義參照的資料不屬於範本提案者,則只有該資料的擁有者可以核准查詢範本。

在這個情境中,使用者 A 邀請資料無塵室貢獻者使用者 B 加入 campaign_analysis 無塵室。使用者 B 想查看資料表的詮釋資料結構定義,並提出查詢範本,將自己的資料彙整至 campaigns 資料表。

TVF 語法如下:

campaigns_template(t1 TABLE<campaign_ID STRING>) AS (
SELECT WITH AGGREGATION_THRESHOLD company_id, company, sum(impressions) FROM my_project.my_campaign.campaigns
group by company_id, company
);

由於使用者 B 並未新增或擁有 campaigns 資料表,因此只有使用者 A 可以在查詢範本送審後核准。如要使用查詢範本,使用者 B 必須訂閱清空房間並叫用 TVF。使用者 B 會將自己的資料表 (其中包含名為 campaign_ID 的欄位) 做為資料表參數傳遞,並執行查詢範本中定義的隱私權導向 SQL。使用者 B 無須將資料新增至資料無塵室。

使用者 B 也將名為 my_transactions 的資料集新增至資料無塵室,其中包含 transactions 資料表和 products 資料表。使用者 B 設定匯總門檻政策和中繼資料控制項,確保只有中繼資料架構可見,範本訂閱者無法存取來源資料。

使用者 A 現在可以查看資料表的結構定義,提出各種查詢範本,將自己的資料加入該資料表。transactions以下是 TVF 語法範例:

transactions_template(t1 TABLE<user_ID STRING>) AS (
SELECT WITH AGGREGATION_THRESHOLD company_id, company, campaign_id, sku, category, date, sum(amount) FROM my_project.my_transactions.transactions
group by company_id, company, campaign_id, sku, category, date
);
transactions_template_with_join(t1 TABLE<user_ID STRING>) AS (
SELECT WITH AGGREGATION_THRESHOLD t.company_id, t.company, t.campaign_id, t.sku, t.date, p.product_name, p.product_category, sum(t.amount) FROM my_project.my_transactions.transactions t
left join my_project.my_transactions.products p
on t.product_id = p.product_id
group by t.company_id, t.company, t.campaign_id, t.sku, t.date, p.product_name, p.product_category
);

由於使用者 A 並未新增或擁有 transactions 和 products 資料表,因此只有使用者 B 可以在查詢範本送審後核准。如要使用查詢範本,使用者 A 必須訂閱資料無塵室並叫用 TVF。使用者 A 傳遞自己的資料表 (欄位名稱為 user_ID) 做為資料表參數,並執行查詢範本中定義的隱私權導向 SQL。使用者 A 無須將資料新增至資料無塵室。

定價

下表匯總 BigQuery 資料無塵室查詢範本的定價:

角色 定價詳細資料
資料貢獻者 只會收取資料儲存費用。
範本訂閱者 執行查詢時,只需支付運算 (分析) 費用。

後續步驟