BigQuery
GCSから
ファイルから
コードを書いて挿入する
BigQuery Data Transfer Service は、あらかじめ設定されたスケジュールに基づき、BigQuery へのデータの移動を自動化するマネージド サービスです。そのため、アナリティクス チームが BigQuery データ ウェアハウス基盤を構築する際にコードの作成はまったく必要ありません。
Amazon S3 からの転送は、常に WRITE_APPEND 設定によってトリガーされ、データが宛先テーブルに追加されます。詳細については、読み込みジョブ構成の configuration.load.writeDisposition をご覧ください。
読み込み間隔は?→24時間
注意: コマンドライン ツールを使用して Amazon S3 転送を作成すると、転送構成は、スケジュールのデフォルト値(24 時間ごと)を使用して設定されます。 追記かどうかの判断ってどうされるんだろう a.csv, b.csv, ..., と増えていったときに a.csv は読み込み済み、とどう判断するのか
それともバケットに残っているファイルは全部追記される?
→前回の実行から更新されたファイルが処理される
ログからの推測
Starting transfer from Amazon S3 for files modified between 2020-05-11T01:23:29-07:00 and 2020-05-11T01:52:31-07:00 (exclusive).
要出典
転送先のテーブル指定
run_timeというのが「実行時」という意味かと思ったらそうじゃなくて本当に日時だった……
→ ソースのファイル名から移行先のテーブル名を決めるみたいなのはできない
テーブルの数だけ転送設定がいる
上限とかある?→ある
Number of daily jobs = Number of transfers x Number of tables x Schedule frequency x Refresh windowが「1 日あたりのプロジェクトあたり読み込みジョブ数 - 100,000 個」を越えてはいけない
1 日あたりのテーブルあたり読み込みジョブ数 - 1,000(失敗を含む)
1 日あたりのプロジェクトあたり読み込みジョブ数 - 100,000 個(失敗を含む)
リアルタイムで追記していくみたいなモデルは合っていない
バッチ処理でまとまった量のデータを挿入するというのが想定されている
partitioning, clustering, and sharding
あるカラムの値でパーティションに分割されたテーブル
カラム
time-unit column: TIMESTAMP, DATE, DATETIME型のカラムでパーティショニングする
ingestion time: 挿入時の時刻にもとづいてパーティショニングする
integer range: 整数値
パーティショニングの範囲
daily
hourly
monthly or yearly
パーティション
clustering
sharding
[PREFIX]_YYYYmmddという命名規則でテーブルを作ること
partitioningのほうがパフォーマンスはいい
それぞれ別のテーブルになる
スキーマも別々に持つ
権限もテーブルごと
クエリ
他の行と比較する