Invalid integer literal "9223372036854775808"
BigQueryで整数型のカラムにinsertしようとしたら発生したこのエラー。
「Invalid integer literal」だけ書かれても意味がわからない。
一体何が原因で起こっているのか。
今回はBigQueryで「Invalid integer literal」が出る原因について解説する。
この記事を書いている人
記事を読むメリット
BigQueryで「Invalid integer literal」が出る原因がわかる
エラーメッセージ
まずエラーメッセージを見てみる。
Invalid integer literal
翻訳すると
無効な整数リテラル
BigQueryで「Invalid integer literal」が出る原因
ではBigQueryで「Invalid integer literal」が出る原因はというと、型の限界以上の値をセットしようとしているから。
整数型
整数は小数部分を持たない数値です。
名前 範囲
INT64 -9,223,372,036,854,775,808~9,223,372,036,854,775,807
例のごとく、実際にSQLで再現してみる。
select cast(9223372036854775808 as int64) as num
整数型を指定するために cast()
でint64を指定している。
そして実行結果は以下の通り。
Invalid integer literal: 9223372036854775808 at [1:13]
Invalid integer literal
のエラーが発生している。
回避方法
では回避するにはどうするのかというと
ひとつはint64の範囲内で値をセットすること。
-9,223,372,036,854,775,808~9,223,372,036,854,775,807の範囲が指定されているならその範囲のみの値を用いる。
select cast(9223372036854775807 as int64) as num
結果
Row | num |
1 | 9223372036854775807 |
もうひとつは別の型を用いる。
select cast("9223372036854775808" as numeric) as num
int64の代わりに NUMERIC
を用いる。
結果
Row | num |
1 | 9223372036854775808 |
するとint64の範囲外の値も取り込むことができる。
float64を用いても良い。
まとめ
今回はBigQueryで「Invalid integer literal」が出る原因を紹介した。
エラーメッセージがわかりにくいが、原因としてはintで指定できる範囲を超えたから。
回避方法としては以下の通り。
エラーの回避方法
他にもSQLのちょっとしたテクニックについてまとめているので、もし気になったら見てみて欲しい。
あわせて読みたい