BigQuery View とパーティション
View の UI から、元テーブルのパーティション情報を知ることはできなさそう
View に含まれるカラムがパーティショニングカラムで、クエリに含まれていれば読む範囲は減る
日付 / タイムスタンプ パーティション
例: timestamp カラムでパーティションを切られているテーブルの View を作る
View のクエリで timestamp を WHERE 句に含めなくていい
View に対して timestamp を WHERE 句に入れてクエリすると読む範囲は小さくなる
? サブクエリ内だと読む範囲が小さくならない?
同クエリだとサブクエリ内でもパーティションが効く/ View で切れたら効かない
↑とおなじく timestamp がパーティショニングカラムだとして
SELECT ... FROM (SELECT ..., timestamp FROM ...) のようなサブクエリ内でパーティショニングカラムを参照する View を作って SELECT ... FROM the_view WHERE DATE(timestamp) = '...'
read 範囲が小さくならない
SELECT ... FROM (SELECT ..., timestamp FROM ...) WHERE DATE(timestamp) = '...'
これはパーティショニングが効く
うーん、クエリコピペするメリットが出てしまう
↑昔確認した話なので今はどうだろう
View と View へのクエリを展開して実行していれば実行計画的には分かりそうだが...
_PARTITIONTIME(取り込み時間別)
ビュー に 擬似列 (_PARTITIONTIME) を つくる
含めたらクエリした際に効く、サブクエリでも効くならメリットが出てくる?
シャーディング
これでいけるらしい(やってない)
SELECT *, _TABLE_SUFFIX AS __TABLE_SUFFIX FROM table_* のように View を作る
_TABLE_SSUFFIX の値を別名のカラム(予約されているため)にして View でアクセスできるようにする
View に対して __TABLE_SUFFIX 含めてクエリする