GCPのData Engineer認定試験に向けて、データウェアハウスに分類されるBigQueryのチュートリアルを一周したのとドキュメントを読み漁った時のメモです。最近メモ続きで今回はコードは一行も出てきませんが、試験直前に見直すために書き残します。そろそろパイプラインとか自前で作ってみないと。。。
データロード方法
データを流し込むのは以下の方法がある。
- GCSのファイルを読み込ませる (CSV, JSON, Avro, Parquet, ORC)
- Googleのサービス経由で流し込む
- ローカル(GCP以外の場所)からファイルをアップロードして読み込む
- DMLで一括挿入
- プログラムからストリーミングインサート
- Dataflowでストリーミングで流し込む
- (ロードじゃないけど) 外部のデータソースの参照
データロードのTips
- 直接ファイルをBQに入れると Upload -> Importの二段階が走って途中でこけると悲しい。GCS経由だと10倍程度早いようだ。
- 圧縮データでロードする場合は、Avroが最適、次点がPurquet。圧縮率が高いのに、並列読み込みできるから。
- CSVとJSONファイルは、gzip圧縮よりも圧縮なしの方が早い。
- 基本は文字コード UTF-8で入れること。ISO-8859-1でも読み込み可能だが、UTF-8に変換しながら読み込むため遅い。
テーブル構造
- 構造化データを入れる
ストリーム処理
- ストリーミングの上限10.000行 / sec
- ストリーミングインサートするときは、上記の上限に引っかからないようにDataflowを噛ませた方が良さそう。
- DataflowならPub/Sub, GCS, JDBC(アプリ経由)のテンプレートが用意されているから使うハードルは低い。
- バッチは強力な整合性、ストリーミングは結果整合性と整合性の性質が異なる。(チュートリアルでFluentd -> BQの場合は1分くらいラグがあった)
課金の話
- 課金対象は、読み込んだ行数 で決まるので出力結果だけ絞っても金額は絞らない場合と変わらない。(よって、LIMIT句を加えても課金額は変わらない!!)
権限設定周り
模擬試験でも出てきて焦ったところだけれども、この人にはこのデータセットは見せたくないとか権限設定は大事。