BigQuery は、クエリ対象として一般公開できるいくつかの一般公開データセットをホストしています。このチュートリアルでは、複数の BigQuery クエリジョブを同時に実行するワークフローを作成して、ジョブを順次実行する場合に比べてパフォーマンスが向上していることを示します。
後続のステップがジョブの成功に依存する場合は、ポーリング メカニズムを実装する必要があります。目標
このチュートリアルの内容は次のとおりです。- Wikipedia の一般公開データセットに対してクエリを実行し、特定の月で閲覧数が最も多いタイトルを特定します。
- 複数の BigQuery クエリジョブを順次実行するワークフローをデプロイして実行します。
- 並列イテレーションを使用して BigQuery ジョブを実行するワークフローをデプロイして実行し、通常の
forループが並列実行されます。
コンソールで次のコマンドを実行するか、ターミナルまたは Cloud Shell で Google Cloud CLI を使用できます。 Google Cloud
費用
このドキュメントでは、課金対象である次のコンポーネントを使用します。 Google Cloud
料金計算ツールを使うと、予想使用量に基づいて費用の見積もりを生成できます。
始める前に
組織で定義されているセキュリティの制約により、次の手順を完了できない場合があります。トラブルシューティング情報については、 制約のある Google Cloud 環境でアプリケーションを開発するをご覧ください。
コンソール
- アカウントにログインします。 Google Cloud を初めて使用する場合は、 アカウントを作成して、実際のシナリオで Google プロダクトのパフォーマンスを評価してください。 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 アカウントをまだお持ちでない場合は、 新しいアカウントを登録します。
-
Google Cloud CLI をインストールします。
-
外部 ID プロバイダ(IdP)を使用している場合は、まず連携 ID を使用して gcloud CLI にログインする必要があります。
-
gcloud CLI を初期化するには、次のコマンドを実行します:
gcloud init -
プロジェクトを作成または選択します Google Cloud 。
プロジェクトを選択または作成するために必要なロール
- プロジェクトを選択する: プロジェクトの選択に特定の 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 を有効にするために必要なロール
API を有効にするには、
serviceusage.services.enable権限が必要です。プロジェクトを作成した場合は、オーナーロール(roles/owner)を通じてこの権限が付与されている可能性があります。それ以外の場合は、Service Usage 管理者ロール(roles/serviceusage.serviceUsageAdmin)を通じてこの権限を取得できます。ロールを付与する方法をご覧ください。gcloud services enable workflows.googleapis.com
-
認証を設定します。
-
サービス アカウント作成者 IAM ロール
(
roles/iam.serviceAccountCreator)とプロジェクト IAM 管理者ロール (roles/resourcemanager.projectIamAdmin)があることを確認します。詳しくは、ロールを付与する方法をご覧ください。 -
サービス アカウントを作成します。
gcloud iam service-accounts create SERVICE_ACCOUNT_NAME
SERVICE_ACCOUNT_NAMEをサービス アカウントの名前に置き換えます。 -
サービス アカウントにロールを付与します。次の IAM ロールごとに次のコマンドを 1 回実行します。
roles/bigquery.jobUser, roles/logging.logWritergcloud 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: 付与するロール
-
サービス アカウント作成者 IAM ロール
(
-
Google Cloud CLI をインストールします。
-
外部 ID プロバイダ(IdP)を使用している場合は、まず連携 ID を使用して gcloud CLI にログインする必要があります。
-
gcloud CLI を初期化するには、次のコマンドを実行します:
gcloud init -
プロジェクトを作成または選択します Google Cloud 。
プロジェクトを選択または作成するために必要なロール
- プロジェクトを選択する: プロジェクトの選択に特定の 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 を有効にするために必要なロール
API を有効にするには、
serviceusage.services.enable権限が必要です。プロジェクトを作成した場合は、オーナーロール(roles/owner)を通じてこの権限が付与されている可能性があります。それ以外の場合は、Service Usage 管理者ロール(roles/serviceusage.serviceUsageAdmin)を通じてこの権限を取得できます。ロールを付与する方法をご覧ください。gcloud services enable workflows.googleapis.com
-
認証を設定します。
-
サービス アカウント作成者 IAM ロール
(
roles/iam.serviceAccountCreator)とプロジェクト IAM 管理者ロール (roles/resourcemanager.projectIamAdmin)があることを確認します。詳しくは、ロールを付与する方法をご覧ください。 -
サービス アカウントを作成します。
gcloud iam service-accounts create SERVICE_ACCOUNT_NAME
SERVICE_ACCOUNT_NAMEをサービス アカウントの名前に置き換えます。 -
サービス アカウントにロールを付与します。次の IAM ロールごとに次のコマンドを 1 回実行します。
roles/bigquery.jobUser, roles/logging.logWritergcloud 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: 付与するロール
-
サービス アカウント作成者 IAM ロール
(
BigQuery クエリジョブを実行する
BigQuery では、インタラクティブ(オンデマンド)クエリジョブを実行できます。詳細については、インタラクティブ クエリとバッチクエリのジョブの実行をご覧ください。
コンソール
Google Cloud コンソールで、[BigQuery] ページに移動します。
[クエリエディタ] のテキスト領域に、次の 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 の BigQuery コネクタを使用して、クエリを実行する 5 つのテーブルのリストを定義しています。クエリは順次実行され、各テーブルで最も閲覧されたタイトルが結果マップに保存されます。
コンソール
コンソールで [**ワークフロー**] ページに移動します。 Google Cloud
[作成] をクリックします。
新しいワークフローの名前を入力します(例:
workflow-serial-bqjobs)。適切なリージョンを選択します(例: us-central1)。
先ほど作成したサービス アカウントを選択します。
BigQuery > BigQuery ジョブユーザーと Logging > ログ書き込み IAM ロールの両方がすでにサービス アカウントに付与されている必要があります。
[次へ] をクリックします。
ワークフロー エディタで、次のワークフローの定義を入力します。
[デプロイ] をクリックします。
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.logWriterの両方の IAM ロールを付与している必要があります。
ワークフローを実行し、複数のクエリを順次実行する
ワークフローを実行すると、そのワークフローに関連付けられた現在のワークフロー定義が実行されます。
コンソール
コンソールで [**ワークフロー**] ページに移動します。 Google Cloud
[Workflows] ページで、[workflow-serial-bqjobs] ワークフローを選択して、詳細ページに移動します。
[ワークフローの詳細] ページで [play_arrow 実行] を選択します。
もう一度 [Execute] をクリックします。
ワークフローの結果が [出力] ペインに表示されます。
gcloud
ターミナルを開きます。
ワークフローを実行します。
gcloud workflows run workflow-serial-bqjob
ワークフローの実行には、約 1 分すなわち前回の実行時間の 5 倍ほどの時間を要します。結果には各テーブルが含まれており、次のようになります。
{
"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"
}
}
複数のクエリを並列に実行するワークフローをデプロイして実行する
いくつかの変更を加えることで、5 つのクエリを順次実行する代わりに、クエリを並列に実行することができます。
- runQueries:
parallel:
shared: [results]
for:
value: table
in: ${tables}
parallelステップを使用すると、forループの各イテレーションを並列に実行できます。results変数はsharedとして宣言されます。これにより、ブランチによる書き込みが可能になり、各ブランチの結果を追加できます。
コンソール
コンソールで [**ワークフロー**] ページに移動します。 Google Cloud
[作成] をクリックします。
新しいワークフローの名前を入力します(例:
workflow-parallel-bqjobs)。適切なリージョンを選択します(例: us-central1)。
先ほど作成したサービス アカウントを選択します。
[次へ] をクリックします。
ワークフロー エディタで、次のワークフローの定義を入力します。
[デプロイ] をクリックします。
[ワークフローの詳細] ページで [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
- プロジェクト リストで、削除するプロジェクトを選択し、[削除] をクリックします。
- ダイアログでプロジェクト ID を入力し、 [Shut down] をクリックしてプロジェクトを削除します。
チュートリアル リソースの削除
このチュートリアルで作成したワークフローを削除します。
gcloud workflows delete WORKFLOW_NAME
次のステップ
- 並列ステップの詳細については、並列ステップの実行をご覧ください。
- Workflows コネクタの詳細については、コネクタについてをご覧ください。
- Workflows について詳しくは、Workflows の概要をご覧ください。