DB

BigQueryで「Invalid integer literal」が出る原因


Invalid integer literal "9223372036854775808"

BigQueryで整数型のカラムにinsertしようとしたら発生したこのエラー。

「Invalid integer literal」だけ書かれても意味がわからない

一体何が原因で起こっているのか。

今回はBigQueryで「Invalid integer literal」が出る原因について解説する。

この記事を書いている人


からさん
システムエンジニア、AIエンジニアと、IT業界で10年以上働いている中堅。PythonとSQLが得意。最近GCPを色々と習得中。

記事を読むメリット

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 のデータ型  |  BigQuery  |  Google Cloud


例のごとく、実際に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

結果

Rownum
19223372036854775807



もうひとつは別の型を用いる

select cast("9223372036854775808" as numeric) as num

int64の代わりに NUMERIC を用いる。

結果

Rownum
19223372036854775808

するとint64の範囲外の値も取り込むことができる。

float64を用いても良い。



まとめ


今回はBigQueryで「Invalid integer literal」が出る原因を紹介した。

エラーメッセージがわかりにくいが、原因としてはintで指定できる範囲を超えたから

回避方法としては以下の通り。

エラーの回避方法

  • int64型の指定範囲で値をセットする
  • NUMERIC型もしくはFLOAT64型を使う


  • 他にもSQLのちょっとしたテクニックについてまとめているので、もし気になったら見てみて欲しい。

    KRSW

    駆け出し機械学習エンジニア。機械学習、DB、WEBと浅く広い感じ。 Junior machine learning engineer. Not a specialist but a generalist who knows DB, WEB too.

    役に立ったらシェアしてくれると励みになります。

    にほんブログ村 IT技術ブログへ

    -DB
    -,

    Translate »

    © 2021 ITips