Cloud StorageからBigQueryに定期的にデータをロードする

目次

使用するマネージドサービス

Cloud Composerのようなワークフローを使用せずにCloud Storageにあるデータを毎日BigQueryにロードしたい時に Google BigQuery Data Transfer Service  |  Google BigQuery Data Transfer Service  |  Google Cloud を使用すると簡単にデータロードを行うことが出来ます。

データ準備

アイリスデータをダウンロード

アイリスデータを使用してBigQueryに取り込んで行きたいと思います。 GithubからCSV形式データをローカルPCにダウンロードしておきます。

$ wget https://raw.githubusercontent.com/pandas-dev/pandas/master/pandas/tests/data/iris.csv

データには1行目にカラムのヘッダーがあり、5カラム分のデータは保存されています。

  • SpealLength : がく片の長さ
  • SepalWidth : がく片の幅
  • PetalLength : 花びらの長さ
  • PetalWidth : 花びらの幅
  • Name : あやめの種類 f:id:aidazuki:20190813125025p:plain

Cloud Storageにアイリスデータにアップロード

  • バケット名やオブジェクトのパスは適宜設定してください
    • 今回はiris_csvディレクトリ配下にYYYYMMDDの日付形式のフォルダを作成して、その中にCSVファイルをアップロードしています。
$ gsutil cp iris.csv gs://$BUCKET/iris_csv/YYYYMMDD/

BigQuery

テーブル作成

コマンドラインとWeb UIでテーブル作成を用意しておきましたので、どちらか一方の手段でテーブル作成してください。

コマンドライン
  • gistsに使用するBigQueryのスキーマファイルを保存してあるのでローカルPCにダウンロードしておきます。
$ wget https://gist.githubusercontent.com/hirokiokumura/80059ca2cbfade4a2dd1ff3f1aadac49/raw/3d52234da05a50bd609b45a9b4bdf5afc32bd26a/iris_fields.json
  • bqコマンドを使用しテーブルを作成します
$ bq mk --time_partitioning_type=DAY $DATASET.iris ./iris_fields.json
Web UI

f:id:aidazuki:20190813131244p:plain

BigQuery Data Transfer Service for Cloud Storage

  • 画面遷移は[BigQuery] > [転送]から行います f:id:aidazuki:20190813140344p:plain

  • Destination table

  • ${run_time|"%Y%m%d"}はData Transfer Serviceが実行した際に評価されてYYYYMMDD形式に変換されます
iris${run_time|"%Y%m%d"}
  • Cloud Storage URI
    • $BUCKETは適宜変更してください
gs://$BUCKET/iris_csv/{run_time|"%Y%m%d"}/iris.csv

f:id:aidazuki:20190813135329p:plain

参考サイト