データの分析や処理に便利なBigQuery(BQ)。
大規模データの処理に優れており、テーブルに保存した大きなデータでも短時間で集計することができる。
SQLに対応しているのでRDBに馴染みがある人には扱いやすいのも特徴だ。
BQでは他のDBと同じようにdate型の日付データを扱うことができる。
日付データが使えると、 YYYYMM
のように年月部分だけ抽出したいこともあるだろう。
しかしどうやって YYYYMM
部分を抽出すればいいのか。
そこで今回はBigQueryで日付からYYYYMM形式のデータを取得する方法について紹介する。
この記事を書いている人
記事を読むメリット
BigQueryで日付からYYYYMM形式のデータを取得する方法がわかり、日付データの変換が少し得意になる。
BigQueryで日付からYYYYMM形式のデータを取得する方法
BigQueryで日付からYYYYMM形式のデータを取得する方法は複数あり、以下のような方法が挙げられる。
日付の一部抽出する方法
1つずつ使い方を紹介していく。
SUBSTR
SUBSTR()
は文字列の一部を抽出する関数。
なので使い方としてはdate型の日付データを文字列に変換してから使うことになる。
SQL
with t as( SELECT DATE("2021-12-08") as date_col ) SELECT CONCAT(SUBSTR(CAST(date_col as string),0,4), SUBSTR(CAST(date_col as string),6,2)) FROM t
結果
2021-12-08
の最初の4文字と6文字目から2文字を抽出して結合すると YYYYMM
形式になる。
EXTRACT
EXTRACT
は名前の通り抽出する関数だ。
使い方としては EXTRACT(抽出したい要素の名前 FROM 日付カラム)
となる。
SQL
with t as( SELECT DATE("2021-02-08") as date_col ) SELECT CONCAT( CAST(EXTRACT(YEAR FROM date_col) as string), LPAD(CAST(EXTRACT(MONTH FROM date_col) as string), 2, "0") ) FROM t
結果
EXTRACT(YEAR FROM ...)
で年を取得し、EXTRACT(MONTH FROM ...)
で月を取得している。
返り値はint型なので月をゼロ埋めする為に文字列型にしてから LPAD
でゼロ埋めしている。
FORMAT_TIMESTAMP
FORMAT_TIMESTAMP
、恐らくこれが最も楽な方法だろう。
使い方としては FORMAT_TIMESTAMP(フォーマット指定文字列, 日付カラム)
。
SQL
with t as( SELECT DATE("2021-02-08") as date_col ) SELECT FORMAT_TIMESTAMP("%Y%m", date_col) FROM t
結果
"%Y%m"
がそのまま YYYYMM
形式を示しており、date型のデータを指定フォーマットの文字列に変換してくれる。
まとめ
今回はBigQueryで日付からYYYYMM形式のデータを取得する方法について解説した。
BigQueryで日付からYYYYMM形式のデータを取得する方法には以下のようなものがある。
日付の一部抽出する方法
どれを使用しても結果を得ることは可能だが、オススメは FORMAT_TIMESTAMP
。
FORMAT_TIMESTAMP("%Y%m", date_col)
のように簡単にフォーマット指定ができるので使いやすい。
YYYYMM
形式のような文字列として取得するなら FORMAT_TIMESTAMP
が適切でしょうねMM
を抽出したいなら EXTRACT(MONTH FROM ...)
がいいと思います他にもBigQueryのテクニックに関する記事もあるので、興味があれば見てみて欲しい。