BigQuery:我可以通过在多个表中存储数据来降低查询成本吗?

时间:2017-06-04 16:55:28

标签: google-bigquery

我有单个表,目前在BigQuery中有超过4300万行存储数据样本。其中一个字段是" owner_id"。我的所有查询都是针对单个所有者完成的。

示例:

SELECT COUNT(*)
FROM `mydataset.mytable` 
WHERE owner_id = "owner23" AND color = "red"

为每个所有者创建一个表会降低我的BigQuery查询成本吗?我怀疑使用WHERE owner_id = "owner23" AND color = "red"查询整个表需要处理更多的GB,而不是仅使用所有者23的数据查询表并使用WHERE color = "red"。虽然我怀疑这是真的,但我想证实。

另外,将我的数据拆分到多个表会导致存储成本增加吗?

谢谢!

3 个答案:

答案 0 :(得分:3)

  

为每个所有者创建一个表会降低我的BigQuery查询成本吗?

理论上 - 是的。您只需为查询的列中的数据付费 - 无论您的WHERE子句有多少行符合条件。例如,如果您有10个客户端具有相对均匀的数据 - 您的查询成本可能低至10倍 - 或者只有COUNT(1)且没有其他WHERE子句 - 它将是$ 0(零!)
如果查询成本非零,那么有一个小问题 - 最低费用是10MB - 所以如果你的拆分表小而且涉及的列数小于10MB - 你还需要收取10MB的费用

实际上 - 管理多个表的潜在“成本”可能很高,因此您需要自行比较和决定

  

将数据拆分到多个表会导致存储成本增加吗?

存储定价按每MB,每秒按比例分配 - 所以不 - 存储成本不会增加

答案 1 :(得分:0)

BigQuery将过滤器推送到表存储,特别是对于诸如此类的简单查询。您可以阅读有关过滤器下推here的信息。请注意,从这个角度来看,标准SQL具有更强大的优化器。

所以,我不会认为你会得到很多好处。但是,您可能希望测试并查看它是否有效。我真诚地怀疑这样做的好处是值得管理单独表格的额外复杂性。

答案 2 :(得分:0)

您的存储成本不会受到影响,因为存储的总体数据是相同的。会有额外的表元数据,但这不会影响您的存储成本。查询成本将降低,因为查询扫描的数据减少了 10 倍。

话虽如此,这不是实现大查询用例的推荐方法。 BQ 明确建议避免创建共享表,考虑这个日期分片的例子 - https://cloud.google.com/bigquery/docs/best-practices-performance-communication#avoid_tables_sharded_by_date

您应该考虑的是 clustering 您的桌子到 Owner_id。它有以下优点

  • 与按 owner_id 分表完全相同的计算节省(analysis pricing
  • 没有额外的表元数据或访问控制开销,您不需要为所有分表维护 ACL!
  • 降低摄取时间复杂度,即即使创建了新的所有者,集群也会处理它,而如果您选择为每个所有者创建单独的表,则需要处理新表的创建

集群也是免费的,只有一个缺点是加载时间开销并不大。请参阅这篇旧博文,该博文将引导您了解聚类基础知识 - https://hoffa.medium.com/bigquery-optimized-cluster-your-tables-65e2f684594b