🐞

Big Query のラッパーでインサートする際のバグと対処法

2022/10/19に公開

バグ

python の Big Query ラッパーでレコードをインサートしようとしたところ、

Field has changed type from STRING to INTEGER

と言われてインサートできなかった。

調べたこと

カラムは定義、実データ共に STRING であり、INTEGER のデータは一件もなかった。
pip のバージョンを最新にしろと言っている人がいたので最新にしたが状況は変わらなかった。

解決法

Big Query へインサートする際、 schema を定義してからインサートすることができる。
具体的には、

filename = "test.csv"
detaset_id = "test"
table_id = "test_id"
dataset_ref = client.dataset(dataset_id)
table_ref = dataset_ref.table(table_id)

schema = [
  {
    "name": "col_1",
    "type": "STRING"
  },
  {
    "name": "col_2",
    "type": "STRING"
  }
]

job_config = bigquery.LoadJobConfig(source_format=bigquery.SourceFormat.CSV, schema=schema)

with open(filename, "rb") as source_file:
    job = client.load_table_from_file(source_file, table_ref, job_config=job_config)

job.result()

などとすれば良い。

まとめ

Big Query へインサートする際は schema を定義してから行おう。

Discussion