2
2

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 1 year has passed since last update.

BigQueryへのCSVロード(Python)におけるCSVスキーマ変更時の挙動まとめ

Posted at

背景

CSVをBigQueryをロードしたいケースはよくあります。何かのはずみに、CSVのカラムが変更され、想定されていないスキーマのCSVが配置されてしまうことは考えられます。そういった場合にロードジョブがどういう挙動をするのかを条件別にまとめました。

TL;DR

  • CSVロードジョブを運用する場合、カラム定義は autodetect ではなく、schemaファイルを用意しましょう
  • CSVカラムの追加や削除がある場合は、基本的にロードジョブはエラーとなるので、schema.jsonファイルを変更して対応しましょう
  • CSVの末尾にカラムが追加される or CSVの末尾のカラムが削除される場合は、loadジョブのオプションによっては、schema.jsonファイルの更新なしでもエラーとせずにジョブを実行させることが可能です

考慮する条件

前提条件

  • 今回はpythonの LoadJobConfigload_table_from_uri を使ったロードジョブとします
  • schemaファイルは用意されてあるとします
    • autodetectジョブでの運用はできるだけ避けましょう
  • WRITE_TRUNCATEで検証します(基本WRITE_APPENDでも挙動は一緒)
  • headerなしCSVデータです(headerあってもschemaファイルがある場合挙動は一緒)

ケース

  1. カラムが末尾に追加される場合
  2. カラムが中間に追加される場合
  3. 末尾のカラムが削除される場合
  4. 中間のカラムが削除される場合

ケース別の挙動

1.カラムが末尾に追加される場合

  • デフォルトの LoadJobConf でのロードでは Too many values in row starting at position: 0. Found 4 column(s) while expected 3. エラーとなります
  • ignore_unknown_values=True オプションを LoadJobConfig に指定すると、末尾のカラムを無視してLoadされます

2.カラムが中間に追加される場合

  • デフォルトの LoadJobConf でのロードでは Too many values in row starting at position: 45. Found 4 column(s) while expected 3. でエラーとなります
  • ignore_unknown_values=True オプションを LoadJobConfig に指定すると、schemaズレの状態でloadしようとします
    • データ型に相違がない場合はschemaズレのままload成功してしまいます
    • データ型に相違がある場合はエラーとなります

3.末尾のカラムが削除される場合

  • デフォルトの LoadJobConf でのロードでは CSV table references column position 2, but line starting at position:20 contains only 2 columns. エラーとなります
  • allow_jagged_rows: True オプションを LoadJobConfig に指定すると、末尾のカラムがNULLでloadされます

4.中間のカラムが削除される場合

  • デフォルトの LoadJobConf でのロードでは CSV table references column position 2, but line starting at position:20 contains only 2 columns. でエラーとなります
  • allow_jagged_rows: True オプションを LoadJobConfig に指定すると、schemaズレの状態でloadしようとします
    • データ型に相違がない場合はschemaズレのままload成功してしまいます
    • データ型に相違がある場合はエラーとなります
2
2
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
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?