使用 BigQuery 进行实时分析
Posted
技术标签:
【中文标题】使用 BigQuery 进行实时分析【英文标题】:Realtime Analytics with BigQuery 【发布时间】:2012-05-02 13:28:42 【问题描述】:有没有办法使用 BigQuery 运行实时分析?我使用了 CSV 上传选项来启动一项工作并以离线模式加载数据,一旦加载完成就可以对其进行分析。但在有关 BigQuery 的公告中,提到了。如何做到这一点?我们能否以涓流模式将来自 Google Cloud 数据库的数据(不更新)附加到 BigQuery 以进行实时分析?
作为旁注,我注意到 BigQuery CSV 数据加载比在我的本地 PC 上使用 10GB 数据文件运行的 LucidDB 和 InfiniDB 慢大约一个数量级。 BigQuery 作业完成需要 34 分钟,而 InfiniDB 和 LucidDB 需要 5 分钟。与 InfiniDB 相比,BigQuery 的查询执行时间(对于简单聚合)慢两倍(6 秒,而 10GB 文件加载约 30+ 百万条记录时为 3 秒),但优于 LucidDB。
【问题讨论】:
【参考方案1】:2013 年更新:现在您可以将数据流式传输到 BigQuery,并进行实时查询。
(您流式传输的数据稍后可用于查询)
https://developers.google.com/bigquery/streaming-data-into-bigquery
【讨论】:
【参考方案2】:目前无法使用 BigQuery 一次直接对一条记录流式传输数据。唯一受支持的摄取方法是从 Google Cloud 存储导入 csv 文件,或直接通过多部分 mime POST 请求导入。提取配额为 2 次导入/分钟,每天 1,000 个导入请求,每个导入请求 100GB 总数据(请参阅:https://developers.google.com/bigquery/docs/quota-policy)。
“实时分析”(对大量数据运行非常快速的即席查询的能力)和“实时数据”的持续收集(键值对数据存储更好)之间存在区别适合支持)。 BigQuery 当前的摄取机制不支持持续的单条记录更新,但它允许开发人员在海量数据集上非常快速地运行查询。
虽然 Stack Overflow 不是最适合讨论基准测试的地方,但我要补充一点,如果不了解您使用的数据架构,就很难对摄取和查询速度进行基准测试。虽然 10Gb 是大量数据,但如果比较更大的数据集(例如 10 TB 或更多)的摄取和查询速度会很有趣。
【讨论】:
您的意思是“BigQuery 的当前摄取机制不 支持不断的单条记录更新”吗? 2013 年更新:现在您可以流式传输数据了。developers.google.com/bigquery/streaming-data-into-bigquery【参考方案3】:最好将实时分析和数据仓库分开。一种可以针对数据收集速度进行优化,以提供警报和触发器。后者用于大规模并行搜索和聚合。
两者都没有真正的解决方案,因为它们是互斥的。为了快速进行大型数据聚合,您必须在索引和存储数据方面执行大量工作——您希望最大限度地减少这些操作以快速访问数据。
【讨论】:
【参考方案4】:在 BiqQuery 中导入大量数据的最佳方法是使用 Google 提供的 python 工具。这是上传数据的最有效方式。我正在使用这些工具
-
首先使用gsutil将原始数据上传到Google Cloud
使用 bq 将该数据从 GC 导入 BigQuery
【讨论】:
【参考方案5】:如果您正在寻找与关系数据仓库并行运行的基于 SQL 的实时分析层,我们最近发布了一个名为 Stride 的实时分析 API 产品,它使用对流数据的连续 SQL 查询来支持该类型您正在谈论的实时分析层。 Stride 基于我们的开源流式 SQL 数据库 PipelineDB,它是 PostgreSQL 的一个分支,实际上将在今年年底成为标准的 PostgreSQL 扩展。
对实时分析层的流上的连续 SQL 查询的好处在于,如果您有实时需求,那么根据定义,您已经知道要运行的查询,因此连续查询既可以加快速度,又可以大大简化您的实时数据架构,同时降低存储无关粒度数据所产生的成本。
【讨论】:
以上是关于使用 BigQuery 进行实时分析的主要内容,如果未能解决你的问题,请参考以下文章
AppEngine BigQuery PHP 库在运行时不隐含?
使用 Apache Beam 向 BigQuery 传播插入时如何指定 insertId
BigQuery AEAD 功能的密钥集管理最佳实践 [关闭]