对于我正在使用的一种用例,我需要一些建议。
用例:
我们在Cloud SQL中有大约5到10个表的数据,其中一些被视为查找,而其他则被视为事务性。我们需要以某种方式将其发送到BigQuery,以便从其中生成3-4个表(平整,嵌套或非规范化表),这些表将用于Data Studio,Looker等中的报表。
应该对数据进行增量处理,并且每5分钟可能会发生一次Cloud SQL更改,这意味着BigQuery报表应该几乎可以实时获取数据。如果可能的话,我们还应该保留数据更改的历史记录。
解决方案:
我们在BigQuery中保留了3层,因此来自Cloud SQL的数据进入第一层,然后经过展平后将其保存到第二层(保留历史记录),然后进行处理以插入到第三层(报告) 。 问题是因为该方法是为日常处理而开发的,无助于每5分钟更改一次Cloud SQL中的数据更改。
欢迎任何建议。
注意:-我们将要求使用Dataflow,VM或其他方式进行某些逻辑处理,这意味着我们不能仅使用计划查询,因为我们不能使用查询来处理所有逻辑,但是可以的,可以混合使用视图和代码。
答案 0 :(得分:4)
这比您想象的要简单:BigQuery可以直接从Cloud SQL中读取数据。
文档:
更多阅读:
因此,您所需要做的就是编写一个MySQL查询,以查找最近5分钟内的所有更改。您可以在BigQuery中运行此查询-并使用以下查询将所有数据具体化为BigQuery:
INSERT INTO `dataset.table`
SELECT *
FROM EXTERNAL_QUERY(
'your.CloudSql.database'
, 'SELECT * FROM users')
答案 1 :(得分:0)
这是一个有趣的用例!如果不是因为BQ外部查询而引起麻烦,我们最近建立了一种解决方案,可以将MySQL中的表与BigQuery中的表“同步”。
该解决方案通过使用两个组件来工作:
请参阅此自述文件以了解如何部署它:https://github.com/GoogleCloudPlatform/DataflowTemplates/tree/master/v2/cdc-parent/
让我知道它是否有帮助!