はじめに
GCPのデータパイプラインを構築するプロダクトである、Dataflowを利用して
DataStoreにデータを登録する方法を共有します。
最初に、以下の公式ドキュメントより何となくで構わないのでDataflowについて
ご理解をお願いします。
https://cloud.google.com/solutions/smart-analytics?hl=ja
前提
- Cloud Storageにファイルを保存できること
- GCPのコンソールからDataStoreの簡単な操作ができること
- CloudShellやSDKを利用してコマンドを実行できること
できるようになること
- DataStoreにバッチ形式でデータを登録できるようになる
- とりあえずDataFlowが動かせるようになる
テンプレートの準備
今回は、自分でApacheBeamのパイプラインを作成しません。
あらかじめ、Googleが準備しているテンプレートを利用します。
大まかに以下の手順となります。
- GCPコンソールのDataflowのページより、「テンプレートよりジョブを作成」を選択
- Dataflowテンプレートに「Text Files on Cloud Storage to Datastore」を選択
その他のパラメータは適宜、選択入力してください。 - 画面下部の「同等のRESTまたはコマンドライン」というリンクから実行コマンドを取得
後の実行時に取得したコマンドを利用します。
取り込みファイルの準備
Inputに利用するファイルを作成します。
以下の形式で、レコードを任意の件数作ってください。
JSONの形式詳細は、以下のURLを参照ください。
https://cloud.google.com/datastore/docs/reference/data/rest/v1/Entity?hl=ja
{"key": {"path":[{"kind":"test", "name":"VOg6lTbC2h"}]}, "properties": { "s": {"stringValue": "string"} }},
注意点
- 「name」は原則一意の値となること(大量データ作成時は厳密でなくても良いです)
- 文字コードは「UTF-8」であること
実行
GCPのコンソールで取得していたコマンドを実行します。
CloudShellかSDKを利用してください。
以下がコマンドの実行例です。
gcloud dataflow jobs run testText2Datastore --gcs-location gs://dataflow-templates-asia-northeast1/latest/GCS_Text_to_Datastore --region asia-northeast1 --staging-location gs://test-20200919/temp/ --parameters textReadPattern=gs://test-20200919/test3.json,datastoreWriteProjectId=edu-pubsub,errorWritePath=gs://test-20200919/error/failure.txt
実行結果確認
確認ポイントは2つです。
- DataFlowのコンソールから正常終了を確認
- DataStoreにデータが登録されていることを確認
感想
一番時間がかかったのは、取り込みファイルの準備です。
データ構造を理解するのに、試行錯誤をしました。
一般的な、CSVやTSVからデータをInportするには自分でテンプレートを開発するしか
無さそうです。このテンプレートは異なるプロジェクトのDatastoreのコレクションを
連携する時に利用できそうです。
最後に
DataStoreはDBプロダクトの中で唯一無料枠が設定されており、一番安価な
プロダクトです。そのため、コストを重視するプロジェクトで利用する機会
が増えると思います。一方、情報が無く利用に苦戦することが結構ありました。
一助になればと思います。
次は、Dataflowの特徴であるオートスケールとパフォーマンスについて共有
できればと思います。