ラボの設定手順と要件
アカウントと進行状況を保護します。このラボを実行するには、常にシークレット ブラウジング ウィンドウとラボの認証情報を使用してください。

Dataflow を使用したサーバーレス データ分析: 副入力(Python)

ラボ 1時間 30分 universal_currency_alt クレジット: 5 show_chart 上級
info このラボでは、学習をサポートする AI ツールが組み込まれている場合があります。
このコンテンツはまだモバイル デバイス向けに最適化されていません。
快適にご利用いただくには、メールで送信されたリンクを使用して、デスクトップ パソコンでアクセスしてください。

概要

このラボでは、データを BigQuery に読み込んで複雑なクエリを実行する方法を学習します。また、Map オペレーションと Reduce オペレーションの実行、副入力の使用、BigQuery へのストリーミングを行うことができる Dataflow パイプラインを実行します。

目標

このラボでは、Dataflow に対するデータソースとして BigQuery を使用する方法と、あるパイプラインで得られた結果を別のパイプラインへの副入力として使用する方法について学習します。

  • BigQuery のデータを Dataflow に読み込む
  • パイプラインの出力を別のパイプラインへの副入力として使用する

設定

各ラボでは、新しい Google Cloud プロジェクトとリソースセットを一定時間無料で利用できます。

  1. Qwiklabs にシークレット ウィンドウでログインします。

  2. ラボのアクセス時間(例: 1:15:00)に注意し、時間内に完了できるようにしてください。
    一時停止機能はありません。必要な場合はやり直せますが、最初からになります。

  3. 準備ができたら、[ラボを開始] をクリックします。

  4. ラボの認証情報(ユーザー名パスワード)をメモしておきます。この情報は、Google Cloud Console にログインする際に使用します。

  5. [Google Console を開く] をクリックします。

  6. [別のアカウントを使用] をクリックし、このラボの認証情報をコピーしてプロンプトに貼り付けます。
    他の認証情報を使用すると、エラーが発生したり、料金の請求が発生したりします。

  7. 利用規約に同意し、再設定用のリソースページをスキップします。

プロジェクトの権限を確認する

Google Cloud で作業を開始する前に、Identity and Access Management(IAM)内で適切な権限がプロジェクトに付与されていることを確認する必要があります。

  1. Google Cloud コンソールのナビゲーション メニューナビゲーション メニュー アイコン)で、[IAM と管理] > [IAM] を選択します。

  2. Compute Engine のデフォルトのサービス アカウント {project-number}-compute@developer.gserviceaccount.com が存在し、編集者のロールが割り当てられていることを確認します。アカウントの接頭辞はプロジェクト番号で、ナビゲーション メニュー > [Cloud の概要] > [ダッシュボード] から確認できます。

Compute Engine のデフォルトのサービス アカウント名と編集者のステータスがハイライト表示された [権限] タブページ

注: アカウントが IAM に存在しない場合やアカウントに編集者のロールがない場合は、以下の手順に沿って必要なロールを割り当てます。
  1. Google Cloud コンソールのナビゲーション メニューで、[Cloud の概要] > [ダッシュボード] をクリックします。
  2. プロジェクト番号(例: 729328892908)をコピーします。
  3. ナビゲーション メニューで、[IAM と管理] > [IAM] を選択します。
  4. ロールの表の上部で、[プリンシパル別に表示] の下にある [アクセスを許可] をクリックします。
  5. [新しいプリンシパル] に次のように入力します。
{project-number}-compute@developer.gserviceaccount.com
  1. {project-number} はプロジェクト番号に置き換えてください。
  2. [ロール] で、[Project](または [基本])> [編集者] を選択します。
  3. [保存] をクリックします。

タスク 1. 準備

Dataflow デベロッパーのロールを割り当てる

アカウントに Dataflow デベロッパーのロールがない場合は、以下の手順に沿って必要なロールを割り当てます。

  1. ナビゲーション メニューで、[IAM と管理] > [IAM] をクリックします。

  2. デフォルトのコンピューティング サービス アカウント、「{project-number}-compute@developer.gserviceaccount.com」を選択します。

  3. 編集オプション(右端にある鉛筆アイコン)を選択します。

  4. [別のロールを追加] をクリックします。

  5. [ロールを選択] のボックス内をクリックします。[フィルタ テキストを入力] セレクタに入力して [Dataflow デベロッパー] を表示し、選択します。

  6. [保存] をクリックします。

編集権限ページ

Dataflow API が有効になっていることを確認する

  1. Google Cloud コンソールのタイトルバーで、[Cloud Shell をアクティブにする] をクリックします。プロンプトが表示されたら、[続行] をクリックします。

  2. 次のコマンドを実行して、プロジェクトで Dataflow API がスムーズに有効化されるようにします。プロンプトが表示されたら、[承認] をクリックします。

gcloud services disable dataflow.googleapis.com gcloud services enable dataflow.googleapis.com

SSH ターミナルを開いてトレーニング用 VM に接続する

以後すべてのコードは特定の整備済みトレーニング VM から実行します。

  1. Cloud コンソールのナビゲーション メニューナビゲーション メニュー アイコン)で、[Compute Engine] > [VM インスタンス] の順にクリックします。

  2. training-vm という名前のインスタンスがある行を確認します。

  3. 右端の [接続] の下にある [SSH] をクリックしてターミナル ウィンドウを開きます。プロンプトが表示されたら、[承認] をクリックします。

  4. このラボでは、training-vm 上で CLI コマンドを入力します。

コード リポジトリをダウンロードする

  • このラボで使用するコード リポジトリをダウンロードします。training-vm の SSH ターミナルで次のように入力します。
git clone https://github.com/GoogleCloudPlatform/training-data-analyst

Cloud Storage バケットを作成する

次の手順に沿ってバケットを作成します。

  1. コンソールのナビゲーション メニューで、[Cloud Storage] > [バケット] をクリックします。
  2. [+ 作成] をクリックします。
  3. 次のように指定し、残りの設定はデフォルトのままにします。
プロパティ 値(値を入力するか、指定されたオプションを選択)
名前
[ロケーション タイプ] > [リージョン]
  1. [作成] をクリックします。

  2. [公開アクセスの防止] というメッセージが表示されたら、[このバケットに対する公開アクセス禁止を適用する] を選択して [確認] をクリックします。

  3. training_vm の SSH ターミナルで、次のように入力して 3 つの環境変数を設定します。環境変数の名前は「BUCKET」、「PROJECT」、「REGION」です。echo コマンドを使用して環境変数がそれぞれ存在することを確認します。

BUCKET="{{{project_0.project_id|project_place_holder_text}}}" echo $BUCKET PROJECT="{{{project_0.project_id|project_place_holder_text}}}" echo $PROJECT REGION="{{{project_0.startup_script.gcp_region|region_place_holder_text}}}" echo $REGION

タスク 2. BigQuery クエリを使用してみる

  1. Cloud コンソールのナビゲーション メニューナビゲーション メニュー アイコン)で、[BigQuery] をクリックします。
  2. プロンプトが表示されたら、[完了] をクリックします。
  3. [+](SQL クエリ)をクリックして、次のクエリを入力します。
SELECT content FROM `cloud-training-demos.github_repos.contents_java` LIMIT 10
  1. [実行] をクリックします。

返された内容を確認します。

この BigQuery テーブル cloud-training-demos.github_repos.contents_java には、2016 年の GitHub に存在するすべての Java ファイルのコンテンツ(および一部のメタデータ)が含まれています。

  1. このテーブルにある Java ファイルの数を確認するには、次のクエリを入力して [実行] をクリックします。
SELECT COUNT(*) FROM `cloud-training-demos.github_repos.contents_java`

このデータセットには、ファイルがいくつありましたか?

このデータセットは、ローカルとクラウド、どちらでの処理を予定していますか?

タスク 3. パイプライン コードを調べる

  1. training-vm の SSH ターミナルに戻り、/training-data-analyst/courses/data_analysis/lab2/python ディレクトリに移動して、JavaProjectsThatNeedHelp.py ファイルを表示します。

ファイルの表示には nano を使用します。コードは変更しないでください。Ctrl+X キーを押して nano を終了します。

cd ~/training-data-analyst/courses/data_analysis/lab2/python nano JavaProjectsThatNeedHelp.py

この図を参照しながらコードを読みます。パイプラインは次のようになります。

パイプラインの図

  1. 次の質問に答えてください。
  • このパイプラインの目的は何ですか?最上位のクラスのドキュメントから判断してください。
  • コンテンツはどこから取得しますか?
  • パイプラインの左側ではどのような処理が行われますか?
  • パイプラインの右側ではどのような処理が行われますか?
  • ToLines はどのような処理を行いますか?(ヒント: BigQuery の結果の content フィールドを確認してみましょう)
  • ReadFromBQ の結果が、別のステップに直接渡されるのではなく、名前を指定した PCollection に格納されるのはなぜですか?
  • ReadFromBQ から生成される PCollection に対して実行される 2 つのアクションは何ですか?
  • ファイルの内容に(異なる行にある)3 つの FIXME と 2 つの TODO が含まれている場合、それに関連付けられたヘルプの呼び出し回数は何回ですか?
  • ファイルがパッケージ com.google.devtools.build に含まれている場合、それが関連付けられているパッケージは何ですか?
  • popular_packages および help_packages は名前が指定された PCollections であり、パイプラインの Scores(副入力)ステップで使用されます。主入力、副入力はそれぞれどちらですか?
  • Scores ステップで使用されるメソッドは何ですか?
  • Scores ステップで副入力はどの Python データ型に変換されますか?
注: このプログラムの Java のバージョンは Python のバージョンとわずかに異なります。Java SDK では AsMap がサポートされていますが、Python SDK では代わりに AsDict がサポートされています。Java では、PCollection が準備ステップで View に変換されてから使用されます。Python では、PCollection が使用されるステップで PCollection の変換が行われます。

タスク 4. パイプラインを実行する

  1. プログラムは BUCKET、PROJECT、REGION の値、および --DirectRunner を使用してパイプラインをローカルで実行するのか、--DataFlowRunner を使用してクラウドで実行するのかの指定を必要とします。

  2. training-vm の SSH ターミナルで次のように入力して、パイプラインをローカルで実行します。

python3 JavaProjectsThatNeedHelp.py --bucket $BUCKET --project $PROJECT --region $REGION --DirectRunner 注: 'BeamDeprecationWarning' などの警告がある場合は無視して、先に進んでください。
  1. パイプラインの実行が完了したら、ナビゲーション メニューナビゲーション メニュー アイコン)の [Cloud Storage] > [バケット] をクリックして、該当するバケットをクリックします。結果は javahelp フォルダで確認できます。Result オブジェクトをクリックして、出力を調べます。

  2. training-vm の SSH ターミナルで次のように入力して、パイプラインをクラウドで実行します。

python3 JavaProjectsThatNeedHelp.py --bucket $BUCKET --project $PROJECT --region $REGION --DataFlowRunner 注: 'BeamDeprecationWarning' などの警告がある場合は無視して、先に進んでください。
  1. コンソールのブラウザタブに戻り、ナビゲーション メニューナビゲーション メニュー アイコン)で [すべてのプロダクトを表示] をクリックし、[アナリティクス] セクションで [Dataflow] を選択します。

  2. ジョブをクリックして進行状況をモニタリングします。

  3. パイプラインの実行が完了したら、ナビゲーション メニューナビゲーション メニュー アイコン)の [Cloud Storage] > [バケット] をクリックして、該当するバケットをクリックします。結果は javahelp フォルダで確認できます。Result オブジェクトをクリックして、出力を調べます。ファイル名は同じですが、ファイルの作成時刻が最新になっていることがわかります。

[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。 パイプラインを実行する

ラボを終了する

ラボが完了したら、[ラボを終了] をクリックします。ラボで使用したリソースが Google Cloud Skills Boost から削除され、アカウントの情報も消去されます。

ラボの評価を求めるダイアログが表示されたら、星の数を選択してコメントを入力し、[送信] をクリックします。

星の数は、それぞれ次の評価を表します。

  • 星 1 つ = 非常に不満
  • 星 2 つ = 不満
  • 星 3 つ = どちらともいえない
  • 星 4 つ = 満足
  • 星 5 つ = 非常に満足

フィードバックを送信しない場合は、ダイアログ ボックスを閉じてください。

フィードバックやご提案の送信、修正が必要な箇所をご報告いただく際は、[サポート] タブをご利用ください。

Copyright 2026 Google LLC All rights reserved. Google および Google のロゴは、Google LLC の商標です。その他すべての社名および製品名は、それぞれ該当する企業の商標である可能性があります。

始める前に

  1. ラボでは、Google Cloud プロジェクトとリソースを一定の時間利用します
  2. ラボには時間制限があり、一時停止機能はありません。ラボを終了した場合は、最初からやり直す必要があります。
  3. 画面左上の [ラボを開始] をクリックして開始します

シークレット ブラウジングを使用する

  1. ラボで使用するユーザー名パスワードをコピーします
  2. プライベート モードで [コンソールを開く] をクリックします

コンソールにログインする

    ラボの認証情報を使用して
  1. ログインします。他の認証情報を使用すると、エラーが発生したり、料金が発生したりする可能性があります。
  2. 利用規約に同意し、再設定用のリソースページをスキップします
  3. ラボを終了する場合や最初からやり直す場合を除き、[ラボを終了] はクリックしないでください。クリックすると、作業内容がクリアされ、プロジェクトが削除されます

このコンテンツは現在ご利用いただけません

利用可能になりましたら、メールでお知らせいたします

ありがとうございます。

利用可能になりましたら、メールでご連絡いたします

1 回に 1 つのラボ

既存のラボをすべて終了して、このラボを開始することを確認してください

シークレット ブラウジングを使用してラボを実行する

このラボを実行するには、シークレット モードまたはシークレット ブラウジング ウィンドウを使用することをおすすめします。これにより、個人アカウントと受講者アカウントの競合を防ぎ、個人アカウントに追加料金が発生することを防ぎます。