BigQuery 託管多個公開資料集,供一般大眾查詢。在本教學課程中,您將建立工作流程,平行執行多個 BigQuery 查詢工作,並與依序執行工作相比,瞭解效能提升幅度。
目標
教學課程內容:- 對 Wikipedia 公開資料集執行查詢,找出特定月份瀏覽次數最多的標題。
- 部署及執行工作流程,依序執行多個 BigQuery 查詢工作。
- 部署及執行工作流程,使用平行疊代執行 BigQuery 工作,並平行執行一般
for迴圈。
您可以在 Google Cloud 控制台中執行下列指令,也可以在終端機或 Cloud Shell 中使用 Google Cloud CLI 執行。
費用
在本文件中,您會使用下列 Google Cloud的計費元件:
如要根據預測用量估算費用,請使用 Pricing Calculator。
事前準備
貴機構定義的安全性限制,可能會導致您無法完成下列步驟。如需疑難排解資訊,請參閱「在受限的 Google Cloud 環境中開發應用程式」。
控制台
- 登入 Google Cloud 帳戶。如果您是 Google Cloud新手,歡迎 建立帳戶,親自評估產品在實際工作環境中的成效。新客戶還能獲得價值 $300 美元的免費抵免額,可用於執行、測試及部署工作負載。
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
Enable the Workflows API.
Roles required to enable APIs
To enable APIs, you need the
serviceusage.services.enablepermission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). Learn how to grant roles.-
Create a service account:
-
Ensure that you have the Create Service Accounts IAM role
(
roles/iam.serviceAccountCreator) and the Project IAM Admin role (roles/resourcemanager.projectIamAdmin). Learn how to grant roles. -
In the Google Cloud console, go to the Create service account page.
Go to Create service account - Select your project.
-
In the Service account name field, enter a name. The Google Cloud console fills in the Service account ID field based on this name.
In the Service account description field, enter a description. For example,
Service account for quickstart. - Click Create and continue.
-
Grant the following roles to the service account: BigQuery > BigQuery Job User, Logging > Logs Writer.
To grant a role, find the Select a role list, then select the role.
To grant additional roles, click Add another role and add each additional role.
- Click Continue.
-
Click Done to finish creating the service account.
-
Ensure that you have the Create Service Accounts IAM role
(
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
Enable the Workflows API.
Roles required to enable APIs
To enable APIs, you need the
serviceusage.services.enablepermission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). Learn how to grant roles.-
Create a service account:
-
Ensure that you have the Create Service Accounts IAM role
(
roles/iam.serviceAccountCreator) and the Project IAM Admin role (roles/resourcemanager.projectIamAdmin). Learn how to grant roles. -
In the Google Cloud console, go to the Create service account page.
Go to Create service account - Select your project.
-
In the Service account name field, enter a name. The Google Cloud console fills in the Service account ID field based on this name.
In the Service account description field, enter a description. For example,
Service account for quickstart. - Click Create and continue.
-
Grant the following roles to the service account: BigQuery > BigQuery Job User, Logging > Logs Writer.
To grant a role, find the Select a role list, then select the role.
To grant additional roles, click Add another role and add each additional role.
- Click Continue.
-
Click Done to finish creating the service account.
-
Ensure that you have the Create Service Accounts IAM role
(
gcloud
-
登入 Google 帳戶。
如果沒有帳戶,請 註冊新帳戶。
-
安裝 Google Cloud CLI。
-
若您採用的是外部識別資訊提供者 (IdP),請先使用聯合身分登入 gcloud CLI。
-
執行下列指令,初始化 gcloud CLI:
gcloud init -
選取或建立專案所需的角色
- 選取專案:選取專案時,不需要具備特定 IAM 角色,只要您在專案中獲派角色,即可選取該專案。
-
建立專案:如要建立專案,您需要專案建立者角色 (
roles/resourcemanager.projectCreator),其中包含resourcemanager.projects.create權限。瞭解如何授予角色。
-
建立 Google Cloud 專案:
gcloud projects create PROJECT_ID
將
PROJECT_ID替換為您要建立的 Google Cloud 專案名稱。 -
選取您建立的 Google Cloud 專案:
gcloud config set project PROJECT_ID
將
PROJECT_ID替換為 Google Cloud 專案名稱。
啟用 Workflows API:
啟用 API 時所需的角色
您必須具備
serviceusage.services.enable權限,才能啟用 API。如果您建立了專案,可能已透過「擁有者」角色 (roles/owner) 取得這項權限。否則,您可以透過「服務使用情形管理員」角色 (roles/serviceusage.serviceUsageAdmin) 取得這項權限。瞭解如何授予角色。gcloud services enable workflows.googleapis.com
-
設定驗證方法:
-
確認您具備「建立服務帳戶」身分與存取權管理角色 (
roles/iam.serviceAccountCreator) 和「專案 IAM 管理員」角色 (roles/resourcemanager.projectIamAdmin)。瞭解如何授予角色。 -
建立服務帳戶:
gcloud iam service-accounts create SERVICE_ACCOUNT_NAME
將
SERVICE_ACCOUNT_NAME換成服務帳戶的名稱。 -
將角色授予服務帳戶。針對下列每個 IAM 角色,執行一次下列指令:
roles/bigquery.jobUser, roles/logging.logWriter:gcloud projects add-iam-policy-binding PROJECT_ID --member="serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com" --role=ROLE
請替換下列項目:
SERVICE_ACCOUNT_NAME:服務帳戶名稱PROJECT_ID:您建立服務帳戶的專案 IDROLE:要授予的角色
-
確認您具備「建立服務帳戶」身分與存取權管理角色 (
-
安裝 Google Cloud CLI。
-
若您採用的是外部識別資訊提供者 (IdP),請先使用聯合身分登入 gcloud CLI。
-
執行下列指令,初始化 gcloud CLI:
gcloud init -
選取或建立專案所需的角色
- 選取專案:選取專案時,不需要具備特定 IAM 角色,只要您在專案中獲派角色,即可選取該專案。
-
建立專案:如要建立專案,您需要專案建立者角色 (
roles/resourcemanager.projectCreator),其中包含resourcemanager.projects.create權限。瞭解如何授予角色。
-
建立 Google Cloud 專案:
gcloud projects create PROJECT_ID
將
PROJECT_ID替換為您要建立的 Google Cloud 專案名稱。 -
選取您建立的 Google Cloud 專案:
gcloud config set project PROJECT_ID
將
PROJECT_ID替換為 Google Cloud 專案名稱。
啟用 Workflows API:
啟用 API 時所需的角色
您必須具備
serviceusage.services.enable權限,才能啟用 API。如果您建立了專案,可能已透過「擁有者」角色 (roles/owner) 取得這項權限。否則,您可以透過「服務使用情形管理員」角色 (roles/serviceusage.serviceUsageAdmin) 取得這項權限。瞭解如何授予角色。gcloud services enable workflows.googleapis.com
-
設定驗證方法:
-
確認您具備「建立服務帳戶」身分與存取權管理角色 (
roles/iam.serviceAccountCreator) 和「專案 IAM 管理員」角色 (roles/resourcemanager.projectIamAdmin)。瞭解如何授予角色。 -
建立服務帳戶:
gcloud iam service-accounts create SERVICE_ACCOUNT_NAME
將
SERVICE_ACCOUNT_NAME換成服務帳戶的名稱。 -
將角色授予服務帳戶。針對下列每個 IAM 角色,執行一次下列指令:
roles/bigquery.jobUser, roles/logging.logWriter:gcloud projects add-iam-policy-binding PROJECT_ID --member="serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com" --role=ROLE
請替換下列項目:
SERVICE_ACCOUNT_NAME:服務帳戶名稱PROJECT_ID:您建立服務帳戶的專案 IDROLE:要授予的角色
-
確認您具備「建立服務帳戶」身分與存取權管理角色 (
執行 BigQuery 查詢工作
在 BigQuery 中,您可以執行互動式 (隨選) 查詢工作。詳情請參閱「執行互動式和批次查詢工作」。
控制台
前往 Google Cloud 控制台的「BigQuery」頁面。
在「Query editor」(查詢編輯器) 文字區域中輸入下列 BigQuery SQL 查詢:
SELECT TITLE, SUM(views) FROM `bigquery-samples.wikipedia_pageviews.201207h` GROUP BY TITLE ORDER BY SUM(views) DESC LIMIT 100按一下「執行」。
bq
在終端機中輸入下列 bq query 指令,使用標準 SQL 語法執行互動式查詢:
bq query \
--use_legacy_sql=false \
'SELECT
TITLE, SUM(views)
FROM
`bigquery-samples.wikipedia_pageviews.201207h`
GROUP BY
TITLE
ORDER BY
SUM(views) DESC
LIMIT 100'
這會執行查詢,傳回特定月份中觀看次數最多的前 100 個 Wikipedia 標題,並將輸出內容寫入臨時資料表。
請注意查詢執行時間長度。
部署會依序執行多項查詢的工作流程
工作流程定義是由一系列步驟組成,這些步驟使用 Workflows 語法描述。建立工作流程後,您可以部署工作流程以準備執行。部署步驟也會驗證來源檔案是否可執行。
下列工作流程定義了五個資料表清單,可使用 Workflows BigQuery 連接器對這些資料表執行查詢。系統會依序執行查詢,並將每個資料表中最常觀看的影視內容儲存至結果對應表。
控制台
前往 Google Cloud 控制台的「Workflows」頁面:
點選「建立」。
輸入新工作流程的名稱,例如
workflow-serial-bqjobs。選擇適當的區域,例如 us-central1。
選取您先前建立的服務帳戶。
您應該已將「BigQuery」>「BigQuery 工作使用者」和「記錄」>「記錄寫入者」IAM 角色授予服務帳戶。
點選「下一步」。
在工作流程編輯器中,輸入下列工作流程定義:
點選「Deploy」(部署)。
gcloud
開啟終端機,然後為工作流程建立原始碼檔案:
touch workflow-serial-bqjobs.yaml將下列工作流程複製到來源程式碼檔案:
輸入下列指令來部署工作流程:
gcloud workflows deploy workflow-serial-bqjobs \ --source=workflow-serial-bqjobs.yaml \ --service-account=MY_SERVICE_ACCOUNT@MY_PROJECT.iam.gserviceaccount.com
將
MY_SERVICE_ACCOUNT@MY_PROJECT.iam.gserviceaccount.com替換為您先前建立的服務帳戶電子郵件地址。您應該已將
roles/bigquery.jobUser和roles/logging.logWriterIAM 角色授予服務帳戶。
執行工作流程,並依序執行多個查詢
執行工作流程時,系統會執行與該工作流程相關聯的目前工作流程定義。
控制台
前往 Google Cloud 控制台的「Workflows」頁面:
在「Workflows」(工作流程) 頁面中,選取「workflow-serial-bqjobs」工作流程,前往詳細資料頁面。
在「Workflow Details」(工作流程詳細資料) 頁面中,按一下 play_arrow「Execute」(執行)。
再次點選「執行」。
在「輸出」窗格中查看工作流程結果。
gcloud
開啟終端機。
執行工作流程:
gcloud workflows run workflow-serial-bqjob
工作流程執行時間大約為一分鐘,或是先前執行時間的五倍。結果會包含每個資料表,如下所示:
{
"201201h": {
"title": "Special:Search",
"views": "14591339"
},
"201202h": {
"title": "Special:Search",
"views": "132765420"
},
"201203h": {
"title": "Special:Search",
"views": "123316818"
},
"201204h": {
"title": "Special:Search",
"views": "116830614"
},
"201205h": {
"title": "Special:Search",
"views": "131357063"
}
}
部署及執行工作流程,平行執行多個查詢
您可以進行幾項變更,平行執行查詢,不必依序執行五項查詢:
- runQueries:
parallel:
shared: [results]
for:
value: table
in: ${tables}
parallel步驟可讓for迴圈的每次疊代平行執行。results變數會宣告為shared,因此分支可寫入該變數,且每個分支的結果都可以附加至該變數。
控制台
前往 Google Cloud 控制台的「Workflows」頁面:
點選「建立」。
輸入新工作流程的名稱,例如
workflow-parallel-bqjobs。選擇適當的區域,例如 us-central1。
選取您先前建立的服務帳戶。
點選「下一步」。
在工作流程編輯器中,輸入下列工作流程定義:
點選「Deploy」(部署)。
在「Workflow Details」(工作流程詳細資料) 頁面中,按一下 play_arrow「Execute」(執行)。
再次點選「執行」。
在「輸出」窗格中查看工作流程結果。
gcloud
開啟終端機,然後為工作流程建立原始碼檔案:
touch workflow-parallel-bqjobs.yaml將下列工作流程複製到來源程式碼檔案:
輸入下列指令來部署工作流程:
gcloud workflows deploy workflow-parallell-bqjobs \ --source=workflow-parallel-bqjobs.yaml \ --service-account=MY_SERVICE_ACCOUNT@MY_PROJECT.iam.gserviceaccount.com
將
MY_SERVICE_ACCOUNT@MY_PROJECT.iam.gserviceaccount.com替換為您先前建立的服務帳戶電子郵件地址。執行工作流程:
gcloud workflows run workflow-parallel-bqjobs
結果會與先前的輸出內容類似,但工作流程執行時間應約為 20 秒或更短!
清除所用資源
如果您是為了這個教學課程建立新專案,請刪除專案。如果您已使用現有專案,並想保留專案,但不要本教學課程新增的變更,請刪除為本教學課程建立的資源。
刪除專案
如要避免付費,最簡單的方法就是刪除您為了本教學課程所建立的專案。
刪除專案的方法如下:
- 前往 Google Cloud 控制台的「Manage resources」(管理資源) 頁面。
- 在專案清單中選取要刪除的專案,然後點選「Delete」(刪除)。
- 在對話方塊中輸入專案 ID,然後按一下 [Shut down] (關閉) 以刪除專案。
刪除教學課程資源
刪除在本教學課程中建立的工作流程:
gcloud workflows delete WORKFLOW_NAME
後續步驟
- 如要進一步瞭解平行步驟,請參閱「執行平行步驟」。
- 如要進一步瞭解 Workflows 連接器,請參閱「瞭解連接器」一文。
- 如要進一步瞭解 Workflows,請參閱 Workflows 總覽。