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型の場合はそのまま集約する