我希望将数据流到BigQuery中,并且我正在考虑使用PubSub + Cloud函数,因为不需要进行转换(至少目前是这样),而且使用云数据流似乎有点过分,只需将行插入到表中即可。我是对的?
数据是使用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
。
我的问题是:
我是否需要将其作为json/ BigQuery (所有值都是字符串)推入到json/字典中,还是必须使用表的数据类型?
( b)使用BQ.insert_rows_json
和BQ.load_table_from_json
有什么区别,我应该在这个任务中使用哪一个?
编辑:
我想得到的实际上是一些资产的市场数据。说出大约28种乐器,捕捉它们所有的滴答声。平均一天,每台仪器大约有60支,所以我们说的是每月33.6M的调用。现在所需要的是将它们插入一个表格中以供进一步分析。我目前不确定是否应该执行真正的流或每批加载。由于该项目还在进行分析,所以我不认为需要数据流,但是应该使用PubSub,因为它允许在时机成熟时更容易地扩展到数据流。这是我第一次实现流媒体管道,我正在使用我通过课程和阅读学到的所有知识。如果我有错误的方法,请纠正我:)。
例如,当一个滴答和n个滴答之间的价差是10时,我绝对想做的是,对另一个表执行另一个插入。为此,我应该使用数据流还是云函数方法仍然有效?因为这就像一个触发条件。基本上,触发器应该是这样的:
if price difference >= 10:
process all these ticks
insert the results in this table
但我不知道如何实现这个触发器。
发布于 2020-12-05 19:59:36
除了马顿的伟大回答(Pentium10)
( a)您可以在BigQuery (有效的json )中流JSON。您的示例不是。关于类型,有一个与您的模式相一致的自动强制/转换。你可以看到这个这里
加载作业在GCS中加载文件或您在请求中输入的内容。批处理是异步的,可能需要几秒钟或几分钟。此外,您仅限于每天1500箱,每张桌子1500箱 -> 1每分钟工作(每天1440分钟)。负载作业有几个有趣的方面。
相反,流作业将数据实时插入到BigQuery中。当你有实时约束时(尤其是视觉化,异常检测,.),这是很有趣的。但也有一些不好的方面
既然您已经意识到了这一点,那么就问问自己关于您的用例。
编辑1:
成本不应该驱动您的用例。
如果,目前,它只用于分析,您只需想象每天触发一次您的工作,以提取全部订阅。使用您的度量: 60k度量*28个仪器*100个字节(24 +内存丢失),您只有168 28。您可以将其存储在云函数或云运行内存中,并执行加载任务。
流对于实时来说是非常重要的!
数据流,在流模式下,将花费你,每月至少20美元(一个类型的小工人N1-标准1。在带有云函数的BigQuery中,超过1.5Gb的流插入。
最后,关于您的智能触发器流或批处理插入,这是不可能的,您必须重新设计数据摄取,如果您改变您的逻辑。但毕竟,只有当你的用例需要这个!
发布于 2020-12-05 14:58:54
回答你的问题:
( a)您需要使用库的接受格式(通常是集合)推进到BigQuery,或者使用格式化为表定义的JSON文档。
( b)要向BigQuery添加数据,可以流数据或加载文件。
对于您的示例,您需要流数据,所以使用'streaming‘方法insert_rows*
系列。
https://stackoverflow.com/questions/65158056
复制相似问题