背景
- (BigQueryに限らず)ビューは便利
- テーブル化する必要がないので、ビュー内で参照しているテーブルが更新されたらビューの結果も新しいものを参照できる
- 物理テーブルと違って、保存料金を気にする必要がない
- 一方で、ビューにはパラメータを渡すことができない
- テーブル化するときには渡せるのだが...
- ↑は時々困る
- 例: BigQueryのAudit Logを社内で広く公開したい
- クエリに個人情報などが入るプロジェクトがあり得るため、生のAudit Logを公開したくない
- 適切にフィルタリングした上で公開したい
- ビューとして提供すると、期間が固定になってしまう
- Audit Logの元テーブルは巨大なので、適切に日付で絞れないとスキャン量も巨大になってしまう
- とはいえ、期間を一ヶ月など固定にするとユーザーの利便性を損なってしまう
- クエリに個人情報などが入るプロジェクトがあり得るため、生のAudit Logを公開したくない
- 例: Data Studioで使うクエリにパラメータを渡したい
- 動的にクエリのパラメータを変えたいが、ビューだと実現できない
- パラメータ - データポータルのヘルプ
- 例: BigQueryのAudit Logを社内で広く公開したい
テーブル関数でパラメータを渡す
この欠点は割と最近(?)できたテーブル関数を使うと解決できます。
使うのも簡単で、こんな感じ。
CREATE OR REPLACE TABLE FUNCTION mydataset.names_by_year(y INT64) AS SELECT year, name, SUM(number) AS total FROM `bigquery-public-data.usa_names.usa_1910_current` WHERE year = y GROUP BY year, name
これで事前に決められたフィルタリングと動的に変更したい部分を同居させることができますね。「認可済みテーブル関数」というのもあるようで、承認済みビューに近いユースケースでも使えそうです。