0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

【BigQuery】TIMESTAMP()orFORMAT_TIMESTAMP()でUTCからJSTへの変換

Last updated at Posted at 2020-03-27

背景

BigQueryについて

インタラクティブ クエリの実行する時、ConsoleでBigQueryウェブUIを使用し、構文エラーなどをその場ですぐ検知されるのはメリットの一つである。

発生された問題

  • BigQueryでJST形式TIMESTAMP型のカラムにデータが格納されており、それらのデータを関数計算して、別のテーブルカラムとして作成すると、デフォルトでUTC形式に変換されて新しいテーブルに挿入されてしまう場合。

  • FORMAT_TIMESTAMP( )を用いて、BigQueryウェブUIに叩いたら、構文エラーはなかったが、クリエ結果は無効のvalueが返された。

以下のようにクエリしようとしてました。
スクリーンショット 2020-03-27 午前9.23.45.png
実行してみると、このようになってます。
スクリーンショット 2020-03-27 午前9.25.51.png

目標

元テーブルのデータをJSTに変換し、最新の日付データ(最大値)を比較してDATEとして抽出すること。

FORMAT_TIMESTAMP( )

説明

資料リスト

  1. 標準SQL関数と演算子
  2. FORMAT_TIMESTAMP( )

タイムスタンプを指定された format_string に従ってフォーマットします。

FORMAT_TIMESTAMP(format_string, timestamp[, time_zone])

戻りデータの型
STRING

ここまで、調べてきたら、エラーの原因は明らかになったようですね。
MAX(STRING)としてしまったのか?!まさか!!!
それでは、string_expressionからtimestamp_expressionへ変換しましょう。

TIMESTAMP( )

説明

資料リスト

  1. 標準SQL関数と演算子
  2. TIMESTAMP( )
TIMESTAMP(
  string_expression[, timezone] |
  date_expression[, timezone] |
  datetime_expression[, timezone]
)

なるほど、TIMESTAMP( )を使えばと良さそうですね。
早速、BigQueryウェブUIに叩いてみましょう。
スクリーンショット 2020-03-27 午前9.40.28.png
エラーだった2020-01-29 00:00:00 UTC+9はうまくJSTに変換されて、DATE型の2020-01-28として抽出されました。
スクリーンショット 2020-03-27 午前9.44.03.png

まとめの一言

複数の関数、演算子を組み合わせてクエリする時や型変換を頻繁に行われる時など、頭が混乱になってしまうのが自分には普通?日常的?なことで、一個一個の関数を整理するかまた誰かに確認していただくかはそのようなミスを抑えられる解決法ではないでしょうか。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?