BigQueryの『スケジュールされたクエリ』(以降、スケジュールクエリ)という機能を使うと、プログラムを書かなくてもクエリを定期的に実行し、テーブルを更新することができます。
そのスケジュールクエリに設定したクエリ内で使える専用のパラメータに @run_date というDATE型のパラメータがあり、where dt = date_add(@run_date,interval -1 day)
のような形で多用していました。
しかし、@run_date はUTC(世界標準時)の日付がデフォルトであり、日本時間で9:00AMより前にスケジュールを設定すると、@run_dateが前日になってしまうという問題がありました。
この@run_dateを日本の日付に直さなければならない場面に直面し、なんとなく答えが出たので書いておきます。
@run_dateというパラメータに関するGoogleの公式ドキュメントはこちら。
@run_dateをJSTに変換するのは不可能
@run_dateというパラメータはDATE型なのですが、そもそもDATE型(日付型)のデータ型にタイムゾーンの概念はありません。なので、UTCの日付が入っていても、それをJSTに変換することは不可能なのです。
であれば、タイムゾーンを持つTIMESTAMP型のパラメータを用いて、それをDATE関数でJSTに変換しながらDATE型にすると@run_dateをJSTに直すのと同じことになります。
そして、BigQueryにはスケジュールクエリで使える @run_timeというTIMESTAMP型のパラメータが存在します。
なので、
DATE(@run_time,'Asia/Tokyo')
とすれば良さそうです。