Передача данных таблицы из одной таблицы BigQuery в другую с помощью существующей схемы - PullRequest
0 голосов
/ 10 июля 2020

У меня есть два набора данных BigQuery: dataset_a и dataset_b

Каждый из этих наборов данных содержит таблицу, например dataset_a_table и dataset_b_table

dataset_a_table содержит потоковые данные и я хочу передавать данные из dataset_a_table в dataset_b_table.

У меня есть схема dataset_a_table типа TableSchema. Как я могу скопировать строки потока из одной таблицы в другую и сохранить существующую схему?

До сих пор я смотрел insertAll метод BigQuery, но я немного не уверен, какую структуру данных использовать получать строки и указывать TableSchema при вставке в новую таблицу.

Я был бы признателен за некоторые рекомендации относительно того, как это сделать. Спасибо.

1 Ответ

1 голос
/ 11 июля 2020

Подход 1: Если dataset_b_table необходимо просто отразить dataset_a_table, например, из-за того, что у вас разные права пользователя для двух наборов данных, вы можете подумать о настройке dataset_b_table как представления вместо таблицы. Представления в BigQuery работают с наборами данных:

CREATE VIEW dataset_b.dataset_b_view AS SELECT * FROM dataset_a.dataset_a_table

Подход 2: если вы хотите, чтобы dataset_b_table с той же схемой, что и dataset_a_table, вы можете использовать встроенные функции BigQuery «передачи». («Передачи»> «Создать передачу»> выберите «Копия набора данных»)

Подход 3: если dataset_b_table имеет схему, отличную от dataset_a_table, или если dataset_b_table уже содержит данные и вы хотите объединить данные из dataset_a_table, вам понадобится какой-то инкрементный лог c. Предполагая, что в вашем dataset_a_table есть какое-то поле created_at (также при условии отсутствия обновлений в записях), вы можете go с добавочной нагрузкой, например:

INSERT INTO dataset_b.dataset_b_table
SELECT
   column_a, column_b, column_c, updated_at
FROM dataset_a.dataset_a_table
WHERE updated_at>(SELECT max(updated_at) FROM dataset_b.dataset_b_table)

Затем вы можете запланировать это для запуска в зависимости от ваши временные требования, один раз в день, час или каждые пару минут. Вы можете использовать встроенную функцию планирования BigQuery или свой собственный logi c.

Если вам нужна фактическая потоковая передача за (милли) секунды, а подход View не работает для вас, вам нужно будет поработать с источником, который в первую очередь заполняет dataset_a_table, поскольку BigQuery не поддерживает триггеры.

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