数据处理 - BigQuery 与 Data Proc+BigQuery
Posted
技术标签:
【中文标题】数据处理 - BigQuery 与 Data Proc+BigQuery【英文标题】:Data processing - BigQuery vs Data Proc+BigQuery 【发布时间】:2020-01-14 15:16:49 【问题描述】:BigQuery
表中有大量(10 到 4000 亿)原始数据。我们需要处理这些数据,以便以星型模式表(可能是 bigquery 中的不同数据集)的形式转换和创建数据,然后 atscale 可以访问这些数据。
需要以下两个选项之间的优缺点:1. 在BigQuery
中编写复杂的 SQL,从源数据集读取数据,然后加载到目标数据集(由 Atscale 使用)。2. 将PySpark
或MapReduce
与来自Dataproc
的BigQuery
连接器一起使用,然后将数据加载到BigQuery
目标数据集。
我们转换的复杂性包括以不同的粒度连接多个表、使用分析功能来获取所需的信息等。 目前这个逻辑在 vertica 中使用多个临时表来实现更快的处理,我们希望在 GCP(Big Query 或 Data Proc)中重写这个处理逻辑
【问题讨论】:
这个过程多久执行一次? 我们正在考虑将它们作为 ETL 负载的一部分每天执行,甚至一天执行多次。 【参考方案1】:我使用选项 1 成功了:Big Query 非常有能力使用 SQL 运行非常复杂的转换,除此之外,您还可以使用时间范围装饰器以增量方式运行它们。请注意,将数据来回传输到 BigQuery 需要花费大量时间和资源。运行 BigQuery 时,SQL 数据从一开始就永远不会离开 BigQuery,并且您已经拥有所有原始日志。所以只要你的问题可以通过一系列的SQL来解决我相信这是最好的方法。
我们移除了 Vertica 报告集群,去年成功重写了 ETL,使用选项 1。
大约一年前,我编写了 POC,比较了由 potens.io 工作流编排的 DataFlow 和一系列 BigQuery SQL 作业,允许大规模 SQL 并行化。
我花了一个月的时间用 Java 编写 DataFlow,其中包含 200 多个数据点和复杂的转换,一次调试能力很差。 一周使用一系列 SQL 和potens.io 来做同样的事情 用于Windowed Tables 的云函数和集群临时表的并行化。 我知道从那时起 CloudDataFlow 有了很大的改进,但有时 DataFlow 仅在百万级规模上表现良好,并且从未在数十亿条记录输入时完成(洗牌基数低于数十亿条记录的主要原因,每条记录有 200 多列)。 SQL 方法在 2 小时内为 100 亿用户生成了所有必需的聚合。使用 potens.io 进行调试和最简单的故障排除也有很大帮助。
【讨论】:
【参考方案2】:BigQuery
和DataProc
都可以处理大量复杂数据。
我认为你应该考虑两点:
您希望对数据进行哪种转换?
这两种工具都可以进行复杂的转换,但您必须考虑PySpark
将为您提供完整的编程语言处理能力,而BigQuery
将为您提供 SQL 转换和一些脚本结构。如果只有 SQL 和简单的脚本结构可以解决您的问题,BigQuery
是一个选项。如果您需要一些复杂的脚本来转换数据,或者您认为将来需要构建一些涉及转换的额外功能,PySpark
可能是更好的选择。您可以找到 BigQuery 脚本参考here
定价
BigQuery
和DataProc
具有不同的定价系统。在BigQuery
中,您需要关注在查询中将处理多少数据,而在DataProc
中,您必须关注集群的大小和虚拟机的配置、集群的运行时间以及其他一些配置.您可以找到 BigQuery
here 和 DataProc
here 的定价参考。另外,您可以在Google Cloud Platform Pricing Calculator 中模拟定价
我建议您在这两种工具中为您的项目创建一个简单的 POC,看看哪一种对您来说具有最佳的成本效益。
希望这些信息对你有所帮助。
【讨论】:
以上是关于数据处理 - BigQuery 与 Data Proc+BigQuery的主要内容,如果未能解决你的问题,请参考以下文章
来自 Firebase 的数据未显示在 BigQuery/Data Studio 中
将 Google Data Studio 社区连接器与 BigQuery 结合使用时的时间戳查询问题
如何授予查看者从 Data Studio 更改 BigQuery 参数的权限