Exporting Data From Bigquery の機能を使って BigQuery のテーブルを GCS (Google Cloud Storage) に JSON Export する時の挙動をまとめておく。
書いてある仕様
ref. https://cloud.google.com/bigquery/exporting-data-from-bigquery
- BigQuery でエクスポートできるデータはファイルごとに最大 1 GB だが、gs://my-bucket/file-name-*.json のようなワイルドカード指定すると、複数のファイルに分けてエクスポートできる。
- (GCS に書き込むので当然) Developer Console で BigQuery API に加えて GCS API を有効にしてもらう必要あり
- (GCS に書き込むので当然) GCS への write 権限が必要
- 1 日あたりの制限: 1 日あたり 1,000 回のエクスポート、最大 10 TB
- 複数ワイルドカード URI の制限: 1 回のエクスポートで 500 URI
- csv (csv.gz), json (json.gz), または avro で出力できる
- RECORD 型があると CSV では出力できない
ここが変だよ JSON Export
JSON でデータを Export した時に、変な点があったのでまとめておく。ドキュメントに書かれていない挙動である(仕様ではない)ため将来的に変更される可能性がある。
BigQuery Type | Exported JSON Type | 補足 |
---|---|---|
BOOLEAN | boolean | 特記事項なし |
INTEGER | string | string になる仕様... > https://code.google.com/p/google-bigquery/issues/detail?id=31 |
FLOAT | number | FLOAT型だが、小数部が0の場合は integer、小数部が0でない場合は float になる |
TIMESTAMP | string |
小数部があるかどうかでフォーマットが異なる。小数部が0の場合は2014-09-01 14:40:41 UTC (%Y-%m-%d %H:%M:%S %z )、小数部が0でなければ 2014-09-01 14:40:41.1 UTC (%Y-%m-%d %H:%M:%S.%N %z )になる。小数部はマイクロ秒まで。Export時にフォーマットの指定などはできない。 |
RECORD | object (hash) | 特記事項なし |
REPEATED (mode) | array | 特記事項なし |
BYTE | 未調査 | 調査してから新しく追加されたため、まだ調査してない。ToDo |
おわり
出力された JSON を Hadoop にそのまま持って行って Hive や Presto で処理しようとしたり、GCSに吐き出したファイルを embulk-input-gcs で取り込もうとすると、微妙にフォーマットの違うカラムの値があったりして困る、という話でした。