BigQueryでカラム(列)の型変換を行う方法
BigQueryには列の型そのものを変える機能は存在しない
BigQueryには型変換を行える機能やAPIは存在しないので、いざ型変換をしなきゃいけないとなると、簡単じゃないです。
型変換できないので、列の型変換ではなく、新しい型の列を作成する方法で対応ですね。
なんでSchema変える必要があるんだ、というツッコミもありそうですが、Integerしかありえないと思っていた列に後からFloatのデータもいれる必要があったとか、マイナーではありますが、それなりに発生しそうな要件。
列の型変換ではなく、新しい型の列を作成
説明を簡単にするために、変換前テーブルにはInteger型の列が1列だけ存在し、変換後テーブル(新しく作成したもの)のFloat型の列に、IntegerからFloatに変換したデータを、お引越しするというシナリオで行きたいと思います。
やり方は簡単でCAST()関数を使うだけです。
BigQueryのCAST()関数を利用
BigQueryのヘルプページ
https://cloud.google.com/bigquery/docs/reference/standard-sql/functions-and-operators#casting
具体的なSQLはこちら。
SELECT CAST(value as FLOAT64) from tablename
あとはこれを新しいTableにインサートするだけで、IntegerからFloatにしてお引っ越しは完了です。
新しいテーブルへ変換後のデータをインサート
インサートの方法は色々あると思いますが、簡単な方法は bqコマンドを使う方法。
--destination_tablオプションで新しいテーブル名を指定します。
CAST()関数は標準SQLでのみサポートされるので、--use_legacy_sql=falseも合わせて指定します。
bq query --destination_tabl=new_tablename --use_legacy_sql=false "SELECT CAST(value AS float64) as value FROM tablename"