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

結果

Row num
1 9223372036854775807



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

select cast("9223372036854775808" as numeric) as num

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

結果

Row num
1 9223372036854775808

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

float64を用いても良い。



まとめ


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

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

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

エラーの回避方法

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


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

    ITipsと同じようなブログを作る方法

    ブログに興味がありますか?

    もしブログに興味がある場合は↓このページ↓を参考にすれば、ITipsと同じ構成でブログを作ることができます

    サーバー、ドメイン、ASPと【ブログに必要なものは全て】このページに書きました。
    同じ構成でブログ作るのはいいけど、記事はマネしないでネ (TДT;)

    ランキング参加中

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

    他にもブログやSNSで紹介してくれると励みになります。

    はてブのコメントで酷評されると泣きます(´;ω;`)

    -DB
    -,

    © 2022 ITips