11
4

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でカラム(列)の型変換を行う方法

Posted at

BigQueryでカラム(列)の型変換を行う方法

BigQueryには列の型そのものを変える機能は存在しない

BigQueryには型変換を行える機能やAPIは存在しないので、いざ型変換をしなきゃいけないとなると、簡単じゃないです。

型変換できないので、列の型変換ではなく、新しい型の列を作成する方法で対応ですね。

なんでSchema変える必要があるんだ、というツッコミもありそうですが、Integerしかありえないと思っていた列に後からFloatのデータもいれる必要があったとか、マイナーではありますが、それなりに発生しそうな要件。

列の型変換ではなく、新しい型の列を作成

説明を簡単にするために、変換前テーブルにはInteger型の列が1列だけ存在し、変換後テーブル(新しく作成したもの)のFloat型の列に、IntegerからFloatに変換したデータを、お引越しするというシナリオで行きたいと思います。

これを
スクリーンショット 2017-11-16 20.19.17.png

こうする方法ですね。
スクリーンショット 2017-11-16 20.19.40.png

やり方は簡単で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"
11
4
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
11
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?