【发布时间】:2021-03-17 08:41:33
【问题描述】:
我想将数据流式传输到 BigQuery 并且我正在考虑使用 PubSub + Cloud Functions,因为不需要转换(至少目前是这样),并且使用 Cloud Data Flow 感觉就像插入行有点过头了到一张桌子。我说的对吗?
数据使用 Python 脚本从 GCP 虚拟机流式传输到 PubSub,格式如下:
{'SEGMENT':'datetime':'2020-12-05 11:25:05.64684','values':(2568.025,2567.03)}
BigQuery 架构是 datetime:timestamp, value_A: float, value_B: float。
我的问题是:
a) 我是否需要将其作为 json/dictionary 并将所有值作为字符串推送到 BigQuery 中,还是必须使用表的数据类型?
b) 使用BQ.insert_rows_json 和BQ.load_table_from_json 有什么区别,我应该使用哪一个来完成这项任务?
编辑:
我想要获取的实际上是一些资产的市场数据。说出大约 28 种乐器并捕捉它们的所有滴答声。平均每天,每个工具有约 60.k 次滴答,因此我们谈论的是每月约 3360 万次调用。 (目前)需要将它们插入表中以进行进一步分析。我目前不确定是否应该执行真正的流式传输或每批加载。由于项目还在做分析,我觉得不需要数据流,但应该使用 PubSub,因为它允许在时机成熟时更容易地扩展到数据流。这是我第一次实现流式传输管道,我正在使用我通过课程和阅读学到的所有知识。如果我有错误的方法,请纠正我:)。
我绝对想做的是,例如,当一个刻度和第 n 个刻度之间的价格差为 10 时,执行另一个插入到另一个表中。为此,我应该使用数据流还是云函数方法仍然有效吗?因为这就像一个触发条件。基本上,触发器是这样的:
if price difference >= 10:
process all these ticks
insert the results in this table
但我不确定如何实现此触发器。
【问题讨论】:
标签: python-3.x google-bigquery stream google-cloud-functions google-cloud-pubsub