Dataflow を使用して Spanner との間でデータを移行する
ラボ
1時間
universal_currency_alt
クレジット: 1
show_chart
入門
info
このラボでは、学習をサポートする AI ツールが組み込まれている場合があります。
このコンテンツはまだモバイル デバイス向けに最適化されていません。
快適にご利用いただくには、メールで送信されたリンクを使用して、デスクトップ パソコンでアクセスしてください。
SCBL008
概要
このラボでは、Dataflow と Apache Beam を使用して、Spanner にデータを移行します。
目標
このラボでは、次の方法について学びます。
- Apache Beam を使用して ETL パイプラインを作成する。
- Google Cloud Dataflow を使用して Apache Beam パイプラインを実行する。
設定と要件
[ラボを開始] ボタンをクリックする前に
こちらの説明をお読みください。ラボには時間制限があり、一時停止することはできません。タイマーは Google Cloud のリソースを利用できる時間を示しており、[ラボを開始] をクリックするとスタートします。
このハンズオンラボでは、シミュレーションやデモ環境ではなく実際のクラウド環境を使って、ご自身でラボのアクティビティを行います。そのため、ラボの受講中に Google Cloud にログインおよびアクセスするための、新しい一時的な認証情報が提供されます。
このラボを完了するためには、以下が必要です。
- 標準的なインターネット ブラウザ(Chrome を推奨)
注: このラボの実行には、シークレット モードまたはシークレット ブラウジング ウィンドウを使用してください。これにより、個人アカウントと受講者アカウントの競合を防ぎ、個人アカウントに追加料金が発生することを防ぎます。
- ラボを完了するための時間(開始後は一時停止できません)
注: すでに個人の Google Cloud アカウントやプロジェクトをお持ちの場合でも、このラボでは使用しないでください。アカウントに追加料金が発生する可能性があります。
Google Cloud Shell の有効化
Google Cloud Shell は、デベロッパー ツールと一緒に読み込まれる仮想マシンです。5 GB の永続ホーム ディレクトリが用意されており、Google Cloud で稼働します。Google Cloud Shell では、コマンドラインで GCP リソースにアクセスできます。
GCP Console の右上のツールバーにある [Cloud Shell をアクティブにする] ボタンをクリックします。

[続行] をクリックします。

環境のプロビジョニングと接続には少し時間がかかります。接続すると、すでに認証されており、プロジェクトは PROJECT_ID に設定されています。例えば:

gcloud は Google Cloud Platform のコマンドライン ツールです。このツールは、Cloud Shell にプリインストールされており、タブ補完がサポートされています。
次のコマンドを使用すると、有効なアカウント名を一覧表示できます。
gcloud auth list
出力:
ACTIVE: *
ACCOUNT: student-01-xxxxxxxxxxxx@qwiklabs.net
To set the active account, run:
$ gcloud config set account `ACCOUNT`
次のコマンドを使用すると、プロジェクト ID を一覧表示できます。
gcloud config list project
出力:
[core]
project = <project_ID>
出力例:
[core]
project = qwiklabs-gcp-44776a13dea667a6
タスク 1. Spanner にデータをインポートするための Apache Beam パイプラインを作成する
-
Google Cloud コンソールのタイトルバーで、[Cloud Shell をアクティブにする](
)をクリックします。プロンプトが表示されたら、[続行] をクリックします。
-
次のコマンドを実行して、プロジェクト ID を設定します。
gcloud config set project {{{project_0.project_id|placeholder_project_id}}}
- 次のコマンドを実行して、このラボに必要なファイルをダウンロードします。
git clone https://github.com/GoogleCloudPlatform/training-data-analyst
cd training-data-analyst/courses/understanding_spanner/dataflow
- 次のスクリプトを実行して、Spanner データベースを作成します。
bash ./create-spanner-pets-database.sh {{{project_0.default_region|placeholder_region}}}
- 次のコマンドを実行してスキーマを確認します。このラボでは、テーブルは 1 つだけであり、PetID フィールドと OwnerID フィールドはどちらも文字列ではなく整数です。
cat pets-db-schema.sql
- 次のコマンドを実行して、インポートしたデータを確認します。主キーと外部キーがカウンタを使用していることに注目してください。コースの前半で学んだように、これは Spanner を使用する際のアンチパターンです。
これを解決するには、Apache Beam で作成された Dataflow パイプラインを使用して、Spanner にデータをインポートする前に整数のビットを反転させます。
これにより、関係を維持しながら整数の問題を解決できます。
cat pets.csv
-
[エディタを開く] ボタンをクリックして、training-data-analyst/courses/understanding_spanner/dataflow/csv-to-spanner.py コードファイルを開きます。パイプラインが main 関数(53~68 行目)で作成されていることに注目してください。
パイプラインは CSV ファイルからデータを読み取り、PetID フィールドと OwnerID フィールドのビットを反転してから、Spanner にデータを書き込みます。
reverse_bits 関数は 21 行目から始まります。
-
ターミナルに戻ります。このパイプラインを実行してみましょう。まず、次のコマンドで Python の前提条件をインストールする必要があります。
pip install apache-beam[gcp]==2.42.0
pip install apache-beam[dataframe]
- パイプラインを実行します(このコードは、Cloud Shell でパイプラインをローカルで実行します。Dataflow に移動する必要はありません)。
python csv-to-spanner.py
- パイプラインが完了したら、次のクエリを実行して結果を確認します。
gcloud spanner databases execute-sql pets-db --instance=test-spanner-instance --sql='SELECT * FROM Pets'
- 次のコマンドを実行して、追加したデータを削除します。
gcloud spanner databases execute-sql pets-db --instance=test-spanner-instance --sql='DELETE FROM Pets WHERE True'
- 次に、Dataflow サービスを使用してコードを実行します。
タスク 2. Dataflow ジョブを実行する
- Dataflow を使用してジョブを実行するには、入力、ステージング、出力用の Cloud Storage バケットが必要です。次のコマンドを使用して、プロジェクト ID を含むバケットを作成します(これにより、バケットの名前が一意になります)。また、
pets.csv ファイルをバケットにコピーします。これらのコマンドは、同時に実行するのではなく、個別に実行します。
gsutil mb -l {{{project_0.default_region|place_holder_text}}} gs://$DEVSHELL_PROJECT_ID-data-flow
gsutil cp ./pets.csv gs://$DEVSHELL_PROJECT_ID-data-flow
-
コンソールで Cloud Storage に移動し、バケットが作成され、ファイルがコピーされたことを確認します。
-
次のコマンドを実行して、プロジェクトで Dataflow API がスムーズに有効化されるようにします。
gcloud services disable dataflow.googleapis.com
gcloud services enable dataflow.googleapis.com
- 次のコマンドで、Dataflow を使用してパイプラインを実行します。
python csv-to-spanner.py \
--region {{{project_0.default_region|place_holder_text}}} \
--worker_machine_type e2-standard-2 \
--input gs://$DEVSHELL_PROJECT_ID-data-flow/pets.csv \
--output gs://$DEVSHELL_PROJECT_ID-data-flow/results/outputs \
--runner DataflowRunner \
--project $DEVSHELL_PROJECT_ID \
--temp_location gs://$DEVSHELL_PROJECT_ID-data-flow/tmp/
-
ナビゲーション メニューを使用して、Dataflow ジョブに移動します。ジョブが表示されるまで少し時間がかかることがあります。[更新] ボタンをクリックしてジョブが表示されるのを確認します。ジョブをクリックすると、ジョブの詳細が表示されます。Dataflow サービスでジョブを実行するには数分かかることがあります。これは、ジョブを送信するクラスタ、または 1 つ以上の VM が作成されるためです。
-
先ほどと同じように、Spanner データベースにデータが追加されたことを確認します。次のクエリを実行して、読み込まれたデータを表示します。
gcloud spanner databases execute-sql pets-db --instance=test-spanner-instance --sql='SELECT * FROM Pets'
- Spanner インスタンスを削除して、課金されないようにします。
これで完了です。Dataflow と Apache Beam を使用して、Spanner にデータを移行しました。
ラボを終了する
ラボでの学習が完了したら、[ラボを終了] をクリックします。ラボで使用したリソースが Qwiklabs から削除され、アカウントの情報も消去されます。
ラボの評価を求めるダイアログが表示されたら、星の数を選択してコメントを入力し、[送信] をクリックします。
星の数は、それぞれ次の評価を表します。
- 星 1 つ = 非常に不満
- 星 2 つ = 不満
- 星 3 つ = どちらともいえない
- 星 4 つ = 満足
- 星 5 つ = 非常に満足
フィードバックを送信しない場合は、ダイアログ ボックスを閉じてください。
フィードバック、ご提案、修正事項がございましたら、[サポート] タブからお知らせください。
Copyright 2020 Google LLC All rights reserved. Google および Google のロゴは Google LLC の商標です。その他すべての企業名および商品名はそれぞれ各社の商標または登録商標です。