はじめに
Googleドライブに作ったGoogleスプレッドシートをBigQueryに同期させて、スプレッドシートが更新されるとBQにも反映されるという状態を作ります。
注意:BigQueryから更新はできない
この方法で作ったBigQueryのテーブルは、クエリで更新できません。Selectのみです。
↓こういうエラーが出ます。
DML statements are only supported over tables that have data stored in BigQuery. Unsupported table: bigquery-nlp:spread_sheet_test.sp_sync
BigQueryにあるものしか更新できませんよ、ということ。つまりBigQueryとしては、Googleドライブ上にあるデータのショートカット的なイメージ。
ちなみにSelectするときの見積もりもよく見ると、、、費用かからないのかも。これって、そこそこのシステムだったらGoogleドライブを利用すれば、BQ料金をかけずにBQを使えるということか。
スプレッドシートは更新できますよ。
手順
1. Googleドライブにスプレッドシートを作る
ここで、URLをコピーしておきます。
2. BigQueryでテーブル作成
テーブルを作成するときに、「ソース」をドライブ、「ドライブのURI」にスプレッドシートのURL、「ファイル形式」にGoogleスプレッドシートを入れます。
テーブル名は適当に、あとスキーマは自動検出でもいけるし、指定もできます。
詳細オプションで、「スキップするヘッダー行」は、1
とかに変更します。これはデータの始まりの行、と読み替えてもいいです。データに使わない行をスキップするという意味で、これをデフォルトの0
のままにしておくと、列名としているid
とかもデータとして入っちゃいます。
3. 完成
スプレッドシートを更新すると、勝手にBigQueryのテーブルも更新されます。というか、二重に持っているわけではなく、スプレッドシートのデータをBigQueryが見に行っているから、当たり前なんですが。
スピードはわかりません。さすがにBigQueryにある状態よりは遅いんじゃないかなぁ。
おわりに
わかってれば特に難しいことはないです。
注意点①:BigQueryで更新できない
最初に書いた通り、このテーブルをSQLで更新することはできません。スプレッドシートからBigQueryの一方通行です。
まったく別の方法ですが反対に、BigQueryのデータをGoogleスプレッドシートで表示することはできます。これも一方通行です。
注意点②:遅いかも
スピードは遅いかもしれません。でもスプレッドシートで管理するようなデータ量なので、スピードは求めるようなものではないとは思います。