Google bigquery 使用现有模式将表数据从一个BigQuery表流到另一个BigQuery表

Google bigquery 使用现有模式将表数据从一个BigQuery表流到另一个BigQuery表,google-bigquery,Google Bigquery,我有两个BigQuery数据集:dataset\u a和dataset\u b 每个数据集都包含一个表,例如dataset\u a\u table和dataset\u b\u table dataset\u a\u表包含流式数据,我想将数据从dataset\u表流式传输到dataset\u表 我有dataset\u a\u table类型的TableSchema模式。如何将流行从一个表复制到另一个表并保留现有模式 到目前为止,我已经研究了BigQuery的方法,但我有点不确定在哪个数据结构中获取

我有两个BigQuery数据集:
dataset\u a
dataset\u b

每个数据集都包含一个表,例如
dataset\u a\u table
dataset\u b\u table

dataset\u a\u表
包含流式数据,我想将数据从
dataset\u表
流式传输到
dataset\u表

我有
dataset\u a\u table
类型的
TableSchema
模式。如何将流行从一个表复制到另一个表并保留现有模式

到目前为止,我已经研究了BigQuery的方法,但我有点不确定在哪个数据结构中获取行,以及在插入到新表时如何指定TableSchema


我希望得到一些关于如何做到这一点的指导。谢谢。

方法1:如果DeaseTeTBBLE表需要简单地镜像DeaseTeaAiTable表,例如,因为在两个数据集上有不同的用户权限,您可以考虑将DATETETHETBYTABLE设置为视图而不是表。BigQuery中的视图跨数据集工作:

CREATE VIEW dataset_b.dataset_b_view AS SELECT * FROM dataset_a.dataset_a_table
方法2:如果希望dataset_b_表与dataset_a_表具有相同的模式,则可以使用BigQuery本机“传输”功能。(“传输”>“创建传输”>选择“数据集副本”)

方法3:如果dataset_b_表与dataset_a_表具有不同的模式,或者dataset_b_表已包含数据,并且您希望合并dataset_a_表中的数据,则需要某种增量逻辑。假设您的dataset_a_表具有某种类型的“created_at”字段(也假设没有更新记录),那么您可以像这样进行增量加载:

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本机调度功能,也可以使用您自己的逻辑


如果您需要以毫秒为单位的实际数据流,而查看方法不适合您,则首先需要使用填充dataset a_表的源,因为BigQuery不支持触发器。

感谢您的详细回复,@Alex。鉴于我的问题的性质,我需要一个流式插入。我想知道在BigQuery的
insertAll
中传递现有
TableSchema
的正确语法是什么。您所说的“流式插入”到底是什么意思?您是否有生成数据流的应用程序?如果是这样的话,为什么不能流到两个表中呢?如果您使用BigQueryAPI,insertAll将采用键值对,因此您可以为任何列设置值。我想我不确定在应用程序中更改模式相对于BigQuery的复杂性。谢谢你的回复。