bigquery создать таблицу из определения JSON дает ошибку STORAGE_FORMAT_UNSPECIFIED - PullRequest
0 голосов
/ 20 октября 2018

Я хочу создать таблицу, клонировав схему существующей таблицы, отредактировав ее, добавив некоторые столбцы, переименовав другие.

Я сделал следующее:

Найдите схемутаблица для клонирования:

bq show --format=json $dataset.$from_table | jq -c .schema

Отредактируйте его с помощью некоторых сценариев, сохраните в виде файла, например, schema.json (здесь упрощенно):

schema.json

{"fields":[{"mode":"NULLABLE","name":"project_name","type":"STRING"},
{"mode":"NULLABLE","name":"sample_name","type":"STRING"}]}

Затем попытка создать новую таблицу с помощью команды ниже:

bq mk --table --external_table_definition=schema.json test- 
project1:dataset1.table_v1_2_2

Но я получаю эту ошибку:

Ошибка BigQuery в операции mk: неподдерживаемый формат хранения для внешних данных: STORAGE_FORMAT_UNSPECIFIED

Я просто хочу, чтобы это была еще одна таблица того же типа, что и у меня в системе, которая, как мне кажется, называется "Google Cloud BigQuery".

Есть идеи?

1 Ответ

0 голосов
/ 20 октября 2018

Проблема в том, что вы используете флаг external_table_definition, который имеет значение только в том случае, если вы создаете внешнюю таблицу поверх файлов, например, в GCS или на диске.Гораздо более простой способ создания новой таблицы - использовать оператор CREATE TABLE ... AS SELECT ....В качестве примера предположим, что у меня есть таблица T1 со столбцами и типами

foo: INT64
bar: STRING
baz: BOOL

Я хочу создать новую таблицу, которая переименовывает bar и меняет ее тип, а также с добавлением столбцаназванный id.Я могу выполнить запрос, подобный следующему:

CREATE TABLE dataset.T2 AS
SELECT
  foo,
  CAST(bar AS TIMESTAMP) AS fizz,
  baz,
  GENERATE_UUID() AS id
FROM dataset.T1

Если вы просто хотите клонировать и обновить схему без каких-либо затрат или копирования данных, вы можете использовать LIMIT 0, например:

CREATE TABLE dataset.T2 AS
SELECT
  foo,
  CAST(bar AS TIMESTAMP) AS fizz,
  baz,
  GENERATE_UUID() AS id
FROM dataset.T1
LIMIT 0

Теперь у вас будет новая пустая таблица с нужной схемой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...