Как скопировать из одной таблицы BigQuery в другую, если цель содержит поля REPEATED? - PullRequest
0 голосов
/ 19 февраля 2020

У меня есть две таблицы, которые имеют похожую схему, но у одной есть подмножество полей, в которых для параметра Mode установлено значение REPEATED. Например:

Схема 1:

[
    {"name": "id", "type": "NUMERIC", "mode": "REQUIRED"},
    {"name": "name", "type": "STRING", "mode": "REQUIRED"},
    {"name": "created", "type": "TIMESTAMP", "mode": "REQUIRED"},
    {"name": "valid", "type": "BOOLEAN", "mode": "REQUIRED"},
    {"name": "parameter1", "type": "STRING", "mode": "REQUIRED"},
    {"name": "parameter2", "type": "FLOAT", "mode": "REQUIRED"},
    {"name": "parameter3", "type": "BOOLEAN", "mode": "REQUIRED"}
]

Схема 2:

[
    {"name": "id", "type": "NUMERIC", "mode": "REQUIRED"},
    {"name": "name", "type": "STRING", "mode": "REQUIRED"},
    {"name": "created", "type": "TIMESTAMP", "mode": "REQUIRED"},
    {"name": "valid", "type": "BOOLEAN", "mode": "REQUIRED"},
    {"name": "parameters", "type": "RECORD", "mode": "REPEATED", "fields":
        [
            {"name": "parameter1", "type": "STRING", "mode": "REQUIRED"},
            {"name": "parameter2", "type": "FLOAT", "mode": "REQUIRED"},
            {"name": "parameter3", "type": "BOOLEAN", "mode": "REQUIRED"}
        ]
    }
]

Я создал Table1 и Table2, используя эти схемы. Таблица1 была записана, Таблица2 пуста. Я хотел бы скопировать содержимое таблиц Table1 в Table2, где Table1.parameter1, Table1.parameter2 и Table1.parameter3 записываются в массив параметров Table2.pase ровно по одному элементу каждый. Я предполагаю, что команда SQL, такая как INSERT INTO TABLE2 (id, name, created ...) SELECT id, name, created FROM TABLE1;, должна выполнить эту работу, но я не могу найти правильный синтаксис.

(В будущем в таблице 2 будут записаны данные с несколькими строками parameters отсюда и необходимость в копии)

Я видел документацию по https://cloud.google.com/bigquery/docs/reference/standard-sql/dml-syntax, и ни одно из предложений не подходит для моего варианта использования. Можете ли вы указать мне правильное направление?

Спасибо!

1 Ответ

1 голос
/ 20 февраля 2020

Это можно сделать, сгруппировав столбцы параметров первой таблицы в STRUCT и ARRAY при вставке их во вторую таблицу:

INSERT INTO table2 (id, name, created, valid, parameters)
SELECT id, name, created, valid, [(parameter1, parameter2, parameter3)]
FROM table1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...