Google Cloud SpannerでFORMAT_TIMESTAMP関数使うと時間がずれる

SpannerにUTCでTIMESTAMP型で保存されてるデータをJSTに戻そうとしたときにはまった。

SELECT 
  TIMESTAMP "2017-08-20 20:00:00 UTC"                                                                              AS ORIGIN_UTC,
  TIMESTAMP_ADD(TIMESTAMP "2017-08-20 20:00:00 UTC", INTERVAL 9 HOUR)                                              AS DateTime_9_Plus,
  FORMAT_TIMESTAMP('%Y-%m-%d %H:%M:%S', TIMESTAMP_ADD(TIMESTAMP "2017-08-20 20:00:00 UTC", INTERVAL 9 HOUR))       AS DateTime_WITH_TIME_9_Plus_FORMATED,
  FORMAT_TIMESTAMP('%Y-%m-%d %H:%M:%S', TIMESTAMP_ADD(TIMESTAMP "2017-08-20 20:00:00 UTC", INTERVAL (8 + 9) HOUR)) AS DateTime_8_Plus_9_FORMATED
ORIGIN_UTC DateTime_9_Plus DateTime_WITH_TIME_9_Plus_FORMATED DateTime_8_Plus_9_FORMATED
2017-08-20T20:00:00Z 2017-08-21T05:00:00Z 2017-08-20 22:00:00 (なぜかずれる) 2017-08-21 05:00:00 (8時間を補正分としていれてズレを戻す

よくわからんが、内部で太平洋標準時(たいへいようひょうじゅんじ、Pacific Standard Time: 略称PST)+8:00が影響してるとかしてないとか? www.en.advertisercommunity.com

docs.looker.com

FORMAT_TIMESTAMP関数の第三引数で"+9:00"のように指定しないとだめだった。

FORMAT_TIMESTAMP(format_string, timestamp[, time_zone])

でも、Data Studio使ったときに期間指定すると

(FORMAT_TIMESTAMP('%Y%m%d', t0.DateTime) >= '20181201' AND FORMAT_TIMESTAMP('%Y%m%d', t0.DateTime) <= '20181231')

みたいなクエリになっちゃうので、上記のように手動で8を足しこんだカラムにしないとだめだった