Мой JSON выглядит так:
{
"Key1":"Value1","Key2":"Value2","Key3":"Value3","List1":
[
{
"SubKey1":"SubValue1_1","SubKey2":"SubValue1_2","SubKey3":"SubValue1_3"
},
{
"SubKey1":"SubValue2_1","SubKey2":"SubValue2_2","SubKey3":"SubValue2_3"
},
{
"SubKey1":"SubValue3_1","SubKey2":"SubValue3_2","SubKey3":"SubValue3_3"
}
]
}
Он загружается в одну таблицу BigQuery следующим образом:
Но я хочу, чтобы мои данные загружались в две отдельные таблицы, например:
и
Пожалуйста, подскажите, что мне делать.
Я не думаю, что это возможно сделать напрямую при загрузке данных.
Я бы посоветовал загрузить данные как есть, а затем выполнить следующие запросы для создания таблиц с данными в нужном вам формате. «cs_test» — это имя набора данных для ваших таблиц, «so» — это имя таблицы с загруженными данными:
CREATE TABLE cs_test.so_2 AS SELECT key1, list FROM cs_test.so AS s, unnest(s.list1) AS list;
Данные в «so_2» будут выглядеть так:
И создать таблицу с данными в таком формате:
Вам необходимо выполнить следующий запрос:
CREATE TABLE cs_test.so_1 AS SELECT key1, key2, key3 FROM cs_test.so;
Это было бы возможно, если бы вы могли использовать командную строку bq.
Предполагая, что ваш файл JSON (my_json_file.json) находится в корзине GCS (например, my_gcs_bucket) и таблице назначения my_dataset.my_destination_table, вы можете запустить следующую команду
bq load --ignore_unknown_values --source_format=NEWLINE_DELIMITED_JSON my_dataset.my_destination_table "gs://my_gcs_bucket/my_json_file.json" ./schema.json
где в schema.json вы уже выбрали схему целевой таблицы. Например, следующие две схемы загрузят данные, как и ожидалось:
схема_1.json
[
{
"mode": "NULLABLE",
"name": "Key1",
"type": "STRING"
},
{
"mode": "NULLABLE",
"name": "Key2",
"type": "STRING"
},
{
"mode": "NULLABLE",
"name": "Key3",
"type": "STRING"
}
]
и схема_2.json
[
{
"mode": "NULLABLE",
"name": "Key1",
"type": "STRING"
},
{
"fields": [
{
"mode": "NULLABLE",
"name": "SubKey1",
"type": "STRING"
},
{
"mode": "NULLABLE",
"name": "SubKey2",
"type": "STRING"
},
{
"mode": "NULLABLE",
"name": "SubKey3",
"type": "STRING"
}
],
"mode": "REPEATED",
"name": "List1",
"type": "RECORD"
}
]
а потом
bq load --ignore_unknown_values --source_format=NEWLINE_DELIMITED_JSON my_dataset.my_destination_table_1 "gs://my_gcs_bucket/my_json_file.json" ./schema_1.json
bq load --ignore_unknown_values --source_format=NEWLINE_DELIMITED_JSON my_dataset.my_destination_table_2 "gs://my_gcs_bucket/my_json_file.json" ./schema_2.json
Загрузит две разные таблицы на основе одного и того же файла JSON.