我有单个表,目前在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"
。虽然我怀疑这是真的,但我想证实。
另外,将我的数据拆分到多个表会导致存储成本增加吗?
谢谢!
答案 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
。它有以下优点
集群也是免费的,只有一个缺点是加载时间开销并不大。请参阅这篇旧博文,该博文将引导您了解聚类基础知识 - https://hoffa.medium.com/bigquery-optimized-cluster-your-tables-65e2f684594b