BigQuery:我可以通过将数据存储在多个表中来降低查询成本吗?
Posted
技术标签:
【中文标题】BigQuery:我可以通过将数据存储在多个表中来降低查询成本吗?【英文标题】:BigQuery: can I lower querying costs by storing data in multiple tables? 【发布时间】:2017-06-04 16:55:28 【问题描述】:我有一个表,目前 BigQuery 中有超过 4300 万行用于存储数据样本。其中一个字段是“owner_id”。我的所有查询都是针对单个所有者完成的。
例子:
SELECT COUNT(*)
FROM `mydataset.mytable`
WHERE owner_id = "owner23" AND color = "red"
为每个所有者创建一个表会降低我的 BigQuery 查询成本吗?我怀疑使用 WHERE owner_id = "owner23" AND color = "red"
查询整个表比使用仅使用 owner23 的数据和使用 WHERE color = "red"
查询表需要处理更多 GB。虽然我怀疑这是真的,但我想确认一下。
另外,将我的数据拆分到多个表会导致存储成本增加吗?
谢谢!
【问题讨论】:
【参考方案1】:为每个所有者创建一个表会降低我的 BigQuery 查询成本吗?
理论上 - 是的。您只需为查询的列中的数据付费——无论每个 WHERE 子句有多少行是合格的。例如,如果您有 10 个具有相对均匀数据的客户端 - 您的查询成本可以降低多达 10 倍 - 或者在只有 COUNT(1) 而没有其他 WHERE 子句的情况下 - 它将是 0 美元(零!) 有一个小问题,如果查询成本不为零——最低费用为 10MB——因此,如果您的拆分表小且所涉及的列的大小小于 10MB——您仍将按 10MB 收费
实际上 - 管理多个表的潜在“成本”可能很高,因此您需要自行比较和决定
将我的数据拆分到多个表会导致存储成本增加吗?
存储定价按每 MB、每秒按比例分配 - 所以不 - 存储成本不会增加
【讨论】:
【参考方案2】:BigQuery 将过滤器下推到表存储中,尤其是对于诸如此类的简单查询。您可以阅读有关过滤器下推here 的信息。请注意,从这个角度来看,标准 SQL 具有更强大的优化器。
所以,我不认为你会得到很多好处。但是,您可能想测试一下它是否有效。我真诚地怀疑,管理单独表的额外复杂性是否值得这样做。
【讨论】:
【参考方案3】:您的存储成本不会受到影响,因为存储的整体数据是相同的。会有额外的表元数据,但这不会影响您的存储成本。由于扫描查询的数据减少了 10 倍,因此查询成本将降低。
话虽如此,但这不是实现大查询用例的推荐方法。 BQ 明确建议避免创建共享表,请考虑这个日期分片示例 - https://cloud.google.com/bigquery/docs/best-practices-performance-communication#avoid_tables_sharded_by_date
您应该考虑的是clustering 您的桌子Owner_id
。它具有以下优点
集群也是免费的,只有一个缺点是加载时间开销并不重要。请参阅这篇旧帖子,它会引导您了解集群基础知识 - https://hoffa.medium.com/bigquery-optimized-cluster-your-tables-65e2f684594b
【讨论】:
以上是关于BigQuery:我可以通过将数据存储在多个表中来降低查询成本吗?的主要内容,如果未能解决你的问题,请参考以下文章
如何知道我的表中都有哪些属于 bigQuery 的长期存储?