Cloud Shell経由で手元のデータをBigQueryにアップロードする

小ネタです。割と便利だったので、エントリに書き起しておきます。

背景: エンジニア職種でなくてもでかいデータをBigQueryにアップロードできるようにしたい

  • BigQueryはWebコンソールから手元のcsvなどをアップロードすることができます
  • しかし、これにはファイルサイズの制限があります
    • Google Cloud Console を使用する場合、ローカル データソースから読み込まれるファイルのサイズが 10 MB を超えないようにしてください
  • 10MBは割と簡単に越える量なので、代替手段を考える必要が度々出てきます
    • GCSからBigQueryにロードもできますが、データの管理対象が増えてしまうため、ここでは使わないことを想定しています
  • 数百BM ~ 数GBくらいのデータであればbq loadコマンドなどの利用がぱっと思い浮かびますが、エンジニアリングの経験がない方(例:BizDev / アナリスト / PdM)の手元環境にこれらを整備するのは大変です
    • サポートする側もされる側も大変
    • セルフサービスでBigQueryのテーブルを都度作れるようになって欲しい

解決方法: Cloud Shellを使う

  • BigQueryからクエリを叩けるということは、多くの場合Cloud Shellも使えると思います
    • Cloud Shellはブラウザだけあれば使えるので、bizdevやアナリストの方でもさっと環境が用意できます
  • 問題は「Cloud Shell上にどうやってcsvファイルを持っていくか」ですが、何と公式からアップロードやダウンロードする手段が用意されています...!
  • アップロードさえできてしまえば、bq loadでアップロードするコマンドを叩いてもらうだけであればそこまでハードルは高くないでしょう

Cloud Shellからデータをアップロードできる

Cloud Shellの利点

  • 共有ドライブとは違うので、他の人からデータが参照されるということがない
    • やろうとすればできるかもしれないが、基本的な使い方をしていれば多分ないはず
  • 一定期間利用していないと、データを消してくれる
    • BigQueryにアップロード後、不要になったcsvファイルはCloud Shellから削除して欲しいですが、まあ忘れられているケースがありえると思います
    • 一定期間利用していない場合は削除されるので、古いデータがずっと残ってしまっていた...!という事態が起こりにくいのも管理者観点からは魅力です
    • また、Cloud Shell に 120 日間アクセスしないと、ホームディスクが削除されてしまいます

フィードバックもらいました。