created: 2019-02-24T08:28:42.000Z
GoogleSpreadSheetへBigQueryからクエリできるようにする
こんなコマンドでspreadsheetをbigqueryのテーブルのように使うことができる
$ bq mk --external_table_definition=[SCHEMA]@[SOURCE_FORMAT]=[GOOGLE_DRIVE_URL] \
[DATASET_ID].[TABLE_NAME]
実際の値をいれるとこんな感じ
$ export GOOGLE_SHEETS='https://docs.google.com/spreadsheets/d/1r--MIJGEuZSgx9KMQxyAOL9S80cZaV8BM/edit#gid=1436148405'
$ export TABLE_DEF='shop_id:string,shop_name:string,area:string,business:string,genre:string'
$ bq mk --external_table_definition="$TABLE_DEF"@GOOGLE_SHEETS="$GOOGLE_SHEETS" \
log.test_shops2
これだけでgoogle spreadsheetへbigqueryからクエリできるようになる
$ bq query "select shop_id from log.test_shops2 limit 3"
Waiting on bqjob_r31a9b91bc4ce40b1_000001691e9a3eba_1 ... (1s) Current status: DONE
+----------------+
| shop_id |
+----------------+
| toh-n |
| qqqqkin-aoerei |
| tog-n |
+----------------+
ドキュメント
認証?
gcloud auth login
経由で取得したcredentialだとうまく動作しなかった
$ bq mk --external_table_definition=GOOGLE_SHEETS="$GOOGLE_SHEETS" log.test_shops
BigQuery error in mk operation: Access Denied: BigQuery BigQuery: No OAuth token with Google Drive scope was found.
service-accountの権限を使ってbqコマンドを叩くと期待通り動作した
$ gcloud auth activate-service-account mossan@project-926112.iam.gserviceaccount.com \
--key-file=./gcp/mossan-key.json
原因が公式ドキュメントから読み解けなかったが、 こんなことが書いてあるページを見つけた
The bq tools does NOT request GDRIVE scope using the default authentication mode, and the --enable_gdrive flag is ignored unless you also provide explicit authentication parameters like an explicit service account
わからん
- service-account経由じゃないとGoogleDriveのscopeが手に入らないのだろうか
- そうすると
--enable_gdrive
とは一体なにに使うのだろう
カラム
カラム情報を渡さずに bq mk
するとカラム名が適当な感じになってしまうので、
なるべくテーブル定義はちゃんとやる必要がある
$ bq show log.test_shops
Table project-926112:log.test_shops
Last modified Schema Type Total URIs Expiration Labels
----------------- --------------------------- ---------- ------------ ------------ --------
24 Feb 17:05:53 |- string_field_0: string EXTERNAL 1
|- string_field_1: string
|- string_field_2: string
|- string_field_3: string
|- string_field_4: string