🖥
Bigquery | ひとつのテーブルに対して、スキーマ定義の順序が違う bq load を --nosync で実行するとうまくいかなかっ
問題
諸事情により、ひとつのテーブルに対して「スキーマ定義の順番が違う」リソースを 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オープンチャットもご利用ください。
公開日時
2016-06-14
Discussion