我们正在将数据从 MySql 写入 BigQuery。我们设定了一些指标,例如
- 插入 - 如果是第一次添加记录,则在指示符字段中用“I”保存
- 更新 - 如果记录有一些更新的数据,则在“指示符”字段中将其保存为“U”,如果未更改则忽略重复记录。
但在“更新”的情况下,它也会写入重复的记录,甚至没有改变。以下是我们当前用于将数据插入 BigQuery 表的查询。我们可以对此查询进行哪些更改?
"insert into `actual_table`
(
Id,
...
)
select
temp.Id,
...
case when actual.Id is null then 'I'
when actual.Id is not null and actual.field1<>temp.field1 then 'U'
end as Indicator,
FROM `temp_table` temp
left outer join `actual_table` actual
on temp.Id= actual.Id"
实际表是 BigQuery 中的表,而临时表是 BigQuery 上的临时表。每次我们从 MySql 读取数据时,都会将其存储在临时表中。
Thanks
我喜欢 BigQuery 的另一个选项是使用合并 DML 进行插入,如果这个套件适合您的用例,那么这是一个非常简洁的解决方案。您可以在此查看更多详细信息link https://cloud.google.com/bigquery/docs/reference/standard-sql/dml-syntax#merge_statement.
sql示例:
MERGE
`mytable` as tgt
USING
`mytable` as src
ON FALSE
WHEN NOT MATCHED AND src._PARTITIONTIME = '2019-02-21'
THEN INSERT (_PARTITIONTIME, fields...) VALUES (_PARTITIONTIME, fields...)
WHEN NOT MATCHED BY SOURCE AND tgt._PARTITIONTIME = '2019-02-21'
THEN DELETE
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)