BigQuery - 在插入表时调用查询
Posted
技术标签:
【中文标题】BigQuery - 在插入表时调用查询【英文标题】:BigQuery - invoke query upon insert to a table 【发布时间】:2021-02-16 13:39:46 【问题描述】:这是我的用例。
一个新的 CSV 文件被上传到 GCS 存储桶中,接下来数据被插入到 BigQuery 表中,在数据进入 BigQuery 之后,应该在插入事件时触发后处理查询。
为了实现第一步,我在 Python 中创建了一个云函数,将数据从 GCS 存储桶加载到 BigQuery 表。
我正在为第二步苦苦挣扎,因为 BigQuery 不支持数据库触发器的概念。
现在我正在使用不理想的计划查询,因为即使基础表没有更改,它也会运行。
由于涉及成本,我不愿意使用 Composer,我正在寻找一种简单且经济高效的解决方案。
【问题讨论】:
【参考方案1】:可以有多种方法来实现这一点。两个简单的可以是:
您可以使用从 GCS->BQ 加载数据的相同云函数在加载完成时运行附加查询。
从您的云功能中,您可以在某种类型的队列(Pub/Sub、Redis、RabbitMQ 等)中设置一个唯一标识符,该标识符由您的一个进程以离散的时间间隔轮询,并且在看到任何新条目时,它可以运行后处理查询。这样,第二个进程就不会盲目地触发 BQ 查询,并且总是在看到队列中有新条目时运行。您可以阅读如何发布 Pub/Sub 消息 here。您的其他进程可以是 cron 作业,也可以只是另一个云功能,您可以随时按需触发。
另一个选项(更原始的选项)可能是在完成将数据加载到 BQ 后,将一个微小的 JSON 文件发送到某个 GCS 存储桶文件夹,其中包含 "status": True
之类的内容。然后绑定另一个云函数,以在将新文件放入该 GCS 存储桶文件夹时立即触发后处理 BQ 查询。
【讨论】:
感谢您的建议,您能否详细说明使用 Pub/Sub 的第二种方式。 我添加了一些细节。 最终我按照你的第一个建议将代码附加到现有的云函数中,结果正是我想要的。【参考方案2】:作为附加选项考虑:
您的云功能在加载数据后,可以向 PubSub 主题发送一些消息(可能需要一些相关的详细信息)(这将需要几毫秒) - 您修改您的云功能就是这样,并创建一个 PubSub为此目的的主题。
在这个话题的另一边,还有一个云功能,它是自动触发的。您可以开发该云功能并实现您需要的任何功能。
【讨论】:
以上是关于BigQuery - 在插入表时调用查询的主要内容,如果未能解决你的问题,请参考以下文章