🖥

Bigquery | ひとつのテーブルに対して、スキーマ定義の順序が違う bq load を --nosync で実行するとうまくいかなかっ

2023/08/26に公開

問題

諸事情により、ひとつのテーブルに対して「スキーマ定義の順番が違う」リソースを bq load する必要があった。

だが立て続けに bq load --nosync を実行すると、(スキーマ定義の順序違う)後半のロードはうまくいかない。
( JobHistory にエラーが出る )

bq load --nosync [BQ_TABLE_NAME] [RESOURCE_1] [SCHEMA_A]
bq load --nosync [BQ_TABLE_NAME] [RESOURCE_2] [SCHEMA_A]

(中略)

bq load --nosync [BQ_TABLE_NAME] [RESOURCE_11] [SCHEMA_B]
bq load --nosync [BQ_TABLE_NAME] [RESOURCE_12] [SCHEMA_B]

解決

結論としては、最初の bq load だけ --nosync オプションを外して、直列実行することで解決した。

bq load [BQ_TABLE_NAME] [RESOURCE_1] [schema_A.json]
bq load --nosync [BQ_TABLE_NAME] [RESOURCE_2] [schema_A.json]

(中略)

bq load --nosync [BQ_TABLE_NAME] [RESOURCE_11] [schema_B.json]
bq load --nosync [BQ_TABLE_NAME] [RESOURCE_12] [schema_B.json]

おそらくこうすると。

「最初の bq load が完了して、BQ側でスキーマが確定した後」に、 後続の bq load がおこなわれるため。
「スキーマ定義の順番」が食い違っていても、問題がなくなったと思われる。

BQ側でスキーマが確定していないのに、矛盾のあるスキーマ定義で bq load --nosync をおこなうとよろしくない模様。

ちなみに

「スキーマ定義の順番が違う」というのは、こんな状態。

[
  {"name": "Job","type":"INTEGER"},
  {"name": "Name","type":"STRING"}
]
[
  {"name": "Name","type":"STRING"},
  {"name": "Job","type":"INTEGER"}
]

チャットメンバー募集

何か質問、悩み事、相談などあればLINEオープンチャットもご利用ください。

https://line.me/ti/g2/eEPltQ6Tzh3pYAZV8JXKZqc7PJ6L0rpm573dcQ

Twitter

https://twitter.com/YumaInaura

公開日時

2016-06-14

Discussion