RDSにあるデータをembulkを使ってBigQueryに飛ばすようにテストを繰り返していました….

ところが!!

digdag runにてこんなエラーが出やがった….

message=>”Error while reading data, error message: JSON parsing error in row starting at position 0: Could not convert value ‘boolean_value: false’ to integer. Field: hoge; Value: 0″,

そもそもinteger型のカラムにインサートできないとか言ってる!

Why!!!!😂


■CAST or Boolean

https://cloud.google.com/bigquery/sql-reference/functions-and-operators?hl=ja#top_of_page

tinyintで定義されたカラムの値がEmbulkではtrueやfalseとして扱われるため、
BigQueryのinteger型のカラムにインサートできない仕様になっています。
回避策として、signed型にキャストするSQLを書くか
BigQueryのカラムをbooleanにする必要があります。
※今回はキャスト型に変換しましょう。


■use CAST 

https://cloud.google.com/bigquery/sql-reference/functions-and-operators?hl=ja#casting

キャスト(CAST)SQLで書いた結果を他の型に変換と覚えておきましょう。
今回はhogeカラムとしてSQ:書いてみます。


■embulk

・adachintb.json

・adachintb.yml.liquid

こんな感じで例を書きましたが、
DBにあるadachintb(テーブル)を丸ごと持ってきて、BigQueryに上書きします。
これでエラーなくBigQuery側にカラムとデータがぶちこまれました!

😋


■まとめ

となるとMySQLのカラムの型定義とBigQueryの型定義がまったくちゃうので、
互換性のある型を指定する必要があるということがわかりますね。
他にもBigQueryのタイムゾーンはUTC固定なので、
JSTなどの他のタイムゾーンのDBのデータは時刻補正が必要とか。
BigQueryはなかなか特殊なのでドキュメント理解しないとツライですなあ。
ガンバム😂

column_optionsでもできるそうです!

The following two tabs change content below.

あだちん

1989年生まれ。 ランサーズ/SRE。 2013年新卒に自宅サーバを構築し、技術ブログを立ち上げた。 ホスティングから大規模なアドテクなどのインフラエンジニアとして携わり、他社インフラレスポンス改善、ランサーズにてサーバ系のお仕事も副業で行っている。未経験によるエンジニア勉強会なども実施している。そして「脆弱性スキャナVuls」のOSS活動もしており、広報/エバンジェリスト/VulsRepo init file,chatwork通知のコントリビュータでもある。現在は分析基盤を担当しておりDigdag,embulk,BigQueryを使いこなそうと奮闘中。

コメントを残す

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください