🐞
Big Query のラッパーでインサートする際のバグと対処法
バグ
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