BigQuery
#GCP
データの読み込み (公式)
GCSから
ファイルから
ストリーミング
コードを書いて挿入する
Transfer Service
BigQuery Data Transfer Service は、あらかじめ設定されたスケジュールに基づき、BigQuery へのデータの移動を自動化するマネージド サービスです。そのため、アナリティクス チームが BigQuery データ ウェアハウス基盤を構築する際にコードの作成はまったく必要ありません。
S3 Redshiftにも対応している
https://cloud.google.com/bigquery-transfer/docs/s3-transfer
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 個」を越えてはいけない
https://cloud.google.com/bigquery-transfer/quotas
https://cloud.google.com/bigquery/quotas#load_jobs
制限
1 日あたりのテーブルあたり読み込みジョブ数 - 1,000(失敗を含む)
1 日あたりのプロジェクトあたり読み込みジョブ数 - 100,000 個(失敗を含む)
リアルタイムで追記していくみたいなモデルは合っていない
バッチ処理でまとまった量のデータを挿入するというのが想定されている
partitioning, clustering, and sharding
partitioning
あるカラムの値でパーティションに分割されたテーブル
カラム
time-unit column: TIMESTAMP, DATE, DATETIME型のカラムでパーティショニングする
ingestion time: 挿入時の時刻にもとづいてパーティショニングする
integer range: 整数値
パーティショニングの範囲
daily
hourly
monthly or yearly
パーティション
clustering
https://cloud.google.com/bigquery/docs/clustered-tables
sharding
[PREFIX]_YYYYmmddという命名規則でテーブルを作ること
partitioningのほうがパフォーマンスはいい
それぞれ別のテーブルになる
スキーマも別々に持つ
権限もテーブルごと
クエリ
他の行と比較する
LEAD(), LAG()