
データ加工や分析をしていると、「数値のはずなのに文字列として扱われていて集計できない」といった場面に出くわすことがある。
そんなときに役立つのが、データ型を自由に変換できるCAST関数だ。
本記事では、標準SQLに準拠したGoogle BigQueryでのCAST関数の使い方を、初心者にもわかりやすく丁寧に解説していく。
CAST関数とは?
CAST関数とは、データ型を別の型に変換するための関数である。
たとえば、「文字列として扱われている数字」を整数型に変換するといった用途で使う。
下記のSampleStoreテーブルのidフィールドは、デフォルトが文字列型(STRING)だ。
このIdのデータ型を「整数型(INT64)に変更したい」という時などにCAST関数は便利だ。
1 2 3 4 5 | SELECT id ,CAST(id AS INT64) AS id_int FROM `SampleStore` ; |
上記クエリを実行した結果は下記だ。
上記の元の id(文字列型) と、変換後の id_int(整数型) を横に並べて表示すると、違いがとてもわかりやすくなる。
文字列型の id では、"000123" のように先頭にゼロを含めて表示されているが、CAST(id AS INT64) によって変換された id_int では、先頭のゼロは自動的に取り除かれて、123 という純粋な数値だけが表示されている。
このように、CAST 関数を使えば、元のデータの「見た目」や「性質」に合わせて適切な型に変換することができる。
特に、文字列の数値を計算に使いたい時や、日付形式に直したい時などにCAST関数はとても便利な関数である。
そもそもなぜデータ型の変換が必要なのか?
データ型の変換が必要な理由は、データ型が適切でない場合に下記のようなことが起きるからだ。
- データ型に合わないデータをテーブルに登録するとエラーが生じる
- 本来集計を行いたいフィールドが文字列型になっている場合、合計したり、平均したりすることが出来ない(数値型なら出来る)
- 日付の計算をしたいのに文字列型になっているため日付関数が使用できない(日付型なら使用できる)
こういう時のためにCAST関数等を使用して適切なデータ型へ変換しておく必要があるのだ。
もちろん、全てのフィールドが適切なデータ型ならCAST関数等でデータ型を変換する必要はないが、実務でそんなデータはあまり見たことがない笑
CAST関数の使い方
CAST関数の使い方は下記の通りだ。
データ型を変更したいフィールドもしくは値を指定し、どのデータ型に変換するかをAS以降で指定するだけだ。
具体的に先ほどの例を当てはめてみると下記のようになる。
使い方は比較的簡単だろう。
ちなみに指定できるデータ型の種類は対象のフィールドや値のデータ型に応じて決まっているので注意が必要だ。
例えば、下記の文字列をDATE型に変換しようとすると型変換が出来ず、エラーとなってクエリが失敗する。
「テスト」という文字列がサポートされている日付のリテラル形式に従っていないためだ。
1 2 3 4 | SELECT CAST('テスト' AS DATE) AS test_date FROM `SampleStore` ; |
どのデータ型や値からどのデータ型に変換できるかは下記のBigQueryのリファレンスを参考にして欲しい。
https://cloud.google.com/bigquery/docs/reference/standard-sql/conversion_functions?hl=ja#cast
SAFE_CAST関数との違い
CAST関数と似ているのがSAFE_CAST関数だ。
このSAFE_CAST関数はCAST関数とほぼ同じ働きをしてくれる関数だ。
つまり、対象のフィールドや値のデータ型を指定したデータ型に変換してくれる。
ただ1点だけCAST関数と違いがある。
それはエラーになった場合の処理だ。
CAST関数の場合、例えば、先ほどの例の下記クエリの場合、CAST関数で実行すると下記のようにエラーとなってクエリが失敗してしまう。
1 2 3 4 | SELECT CAST('テスト' AS DATE) AS test_date FROM `SampleStore` ; |
一方、下記のようにCAST関数の代わりにSAFE_CAST関数を使用すると、エラーの代わりに対象のフィールドの値をNULLとして返してくれるのでクエリの実行が可能となる。
1 2 3 4 | SELECT SAFE_CAST('テスト' AS DATE) AS test_date FROM `SampleStore` ; |
SAFE_CASTのSAFEは「エラーからクエリを守る」という意味のSAFEだとイメージしておくと整理しやすい。
まとめ
今回はデータ型を変更してくれるCAST関数を紹介した。
本記事の要点は下記だ。
- CAST関数はデータ型を変換してくれる関数
- 適切なデータ型でないと集計ができなかったり、使用したい関数が使用できない
- CAST関数で変換できるデータ型の種類は対象のフィールドデータ型や値によって決まる
- SAFE_CAST関数はデータ型の変換ができない場合にエラーの代わりに対象のフィールドの値をNULLとして返してくれる
CAST関数を正しく使うことで、データ加工や分析の幅が広がる。
特に型エラーを避けたい場合は、SAFE_CASTの活用も有効なので是非使ってみて欲しい。