首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >BigQuery BQ.insert_rows_json和BQ.load_from_json?

BigQuery BQ.insert_rows_json和BQ.load_from_json?
EN

Stack Overflow用户
提问于 2020-12-05 14:35:31
回答 2查看 4.7K关注 0票数 1

我希望将数据流到BigQuery中,并且我正在考虑使用PubSub + Cloud函数,因为不需要进行转换(至少目前是这样),而且使用云数据流似乎有点过分,只需将行插入到表中即可。我是对的?

数据是使用Python脚本从GCP流到PubSub中的,其格式如下:

代码语言:javascript
运行
复制
{'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_jsonBQ.load_table_from_json有什么区别,我应该在这个任务中使用哪一个?

编辑:

我想得到的实际上是一些资产的市场数据。说出大约28种乐器,捕捉它们所有的滴答声。平均一天,每台仪器大约有60支,所以我们说的是每月33.6M的调用。现在所需要的是将它们插入一个表格中以供进一步分析。我目前不确定是否应该执行真正的流或每批加载。由于该项目还在进行分析,所以我不认为需要数据流,但是应该使用PubSub,因为它允许在时机成熟时更容易地扩展到数据流。这是我第一次实现流媒体管道,我正在使用我通过课程和阅读学到的所有知识。如果我有错误的方法,请纠正我:)。

例如,当一个滴答和n个滴答之间的价差是10时,我绝对想做的是,对另一个表执行另一个插入。为此,我应该使用数据流还是云函数方法仍然有效?因为这就像一个触发条件。基本上,触发器应该是这样的:

代码语言:javascript
运行
复制
if price difference >= 10:
     process all these ticks
     insert the results in this table

但我不知道如何实现这个触发器。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-12-05 19:59:36

除了马顿的伟大回答(Pentium10)

( a)您可以在BigQuery (有效的json )中流JSON。您的示例不是。关于类型,有一个与您的模式相一致的自动强制/转换。你可以看到这个这里

加载作业在GCS中加载文件或您在请求中输入的内容。批处理是异步的,可能需要几秒钟或几分钟。此外,您仅限于每天1500箱,每张桌子1500箱 -> 1每分钟工作(每天1440分钟)。负载作业有几个有趣的方面。

  1. 首先,它是免费的!
  2. 您的数据将立即加载到正确的分区中,并立即在分区中请求。
  3. 如果加载失败,则不会插入任何数据。因此,在没有双倍值的情况下重播文件是最简单的。

相反,流作业将数据实时插入到BigQuery中。当你有实时约束时(尤其是视觉化,异常检测,.),这是很有趣的。但也有一些不好的方面

  1. 您仅限于每秒钟500 k行(欧盟和美国),其他地区100 k行,每秒最大1Gb。
  2. 数据不是立即在分区中,而是在有一段时间或更长的时间来填满这个缓冲区。中。因此,在构建和测试实时应用程序时,必须考虑到这种特殊性。
  3. 我是不自由。最便宜的区域是每Gb 0.05美元。

既然您已经意识到了这一点,那么就问问自己关于您的用例。

  • 如果您需要实时(少于2分钟的延迟),毫无疑问,流媒体是适合您的。
  • 如果您每月只有很少的Gb,流也是最简单的解决方案,只需几个$。
  • 如果您有大量的数据(超过1Gb /秒),BigQuery不是一个好的服务,请考虑BigTable (那个您可以使用BigQuery作为联邦表进行请求。)
  • 如果您有重要的数据量(每分钟1或2Gb ),并且您的用例需要minute+中的数据新鲜度,那么您可以考虑一种特殊的设计。
  1. 创建PubSub请求订阅
  2. 创建一个HTTP触发的云函数(或云运行服务),该函数提取订阅1分钟,然后将拉出的内容作为加载作业提交给BigQuery (不需要文件,您可以直接将内存内容发布到BigQuery)。然后优雅地存在
  3. 创建一个,它每分钟触发您的服务。

编辑1:

成本不应该驱动您的用例。

如果,目前,它只用于分析,您只需想象每天触发一次您的工作,以提取全部订阅。使用您的度量: 60k度量*28个仪器*100个字节(24 +内存丢失),您只有168 28。您可以将其存储在云函数或云运行内存中,并执行加载任务。

流对于实时来说是非常重要的!

数据流,在流模式下,将花费你,每月至少20美元(一个类型的小工人N1-标准1。在带有云函数的BigQuery中,超过1.5Gb的流插入。

最后,关于您的智能触发器流或批处理插入,这是不可能的,您必须重新设计数据摄取,如果您改变您的逻辑。但毕竟,只有当你的用例需要这个!

票数 5
EN

Stack Overflow用户

发布于 2020-12-05 14:58:54

回答你的问题:

( a)您需要使用库的接受格式(通常是集合)推进到BigQuery,或者使用格式化为表定义的JSON文档。

( b)要向BigQuery添加数据,可以流数据或加载文件。

对于您的示例,您需要流数据,所以使用'streaming‘方法insert_rows*系列。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65158056

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档