Подход 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 не поддерживает триггеры.