Open2
Metabase/BigQueryでタイムゾーンを考慮するには?
既存のMetabaseの挙動
v0.38.1はBigQueryがタイムゾーンをサポートしないため基本的にUTCで処理されている。具体的には以下のような挙動となっている
- filterクエリやsummarizeで処理するときはすべてUTCで処理されるため、COUNT ROWS * By Dayとか、フィールド変数を使った日付フィルタではJST09:00で日付が区切られてしまう
- TIMESTAMP型を表示する際には(Report Time Zoneではなく)システムのタイムゾーン(TZ環境変数 or user.timezoneプロパティに変換して表示する
-
DATETIME型やTIME型も同じくタイムゾーンを考慮して変換して表示する
- BigQueryのドキュメントにはDATETIME型などは「タイムゾーンに依存しない」と書いてあるので、これはMetabaseの処理が間違っている
タイムゾーンに期待するふるまい
- TIMESTAMP型の場合、表示する際にローカル時間で表示する
- とりあえずシステムタイムゾーンで良しとする
- DATETIME型、DATE型、TIME型の場合、タイムゾーン変換をしない
- ローカル時間で格納されていることを期待する
- 検索する場合、ローカル時間で検索する
- Metabaseの日付検索はUIから選ぶことが出来るが、タイムゾーン情報は付いてない(
- 例えばJSTで「昨日」のデータを検索するときはJSTでの「昨日」を探す(JSTの00:00で結果が変わる)
- JSTならUTCの前日の15:00~当日の15:00を返す
- 集約する場合も、ローカル時間で集約する
- HourやHour of Dayはタイムゾーン非依存の型とする(変換せずに表示する)
- TIMESTAMP型の場合はローカル時間に変換して集約する
- DATETIME型、DATE型、TIME型の場合はそのまま集約する