Google bigquery BigQuery:我可以通过在多个表中存储数据来降低查询成本吗?
我有一个表,目前BigQuery中有4300多万行存储数据样本。其中一个字段是“所有者id”。我所有的查询都是针对单个所有者完成的 例如:Google bigquery BigQuery:我可以通过在多个表中存储数据来降低查询成本吗?,google-bigquery,Google Bigquery,我有一个表,目前BigQuery中有4300多万行存储数据样本。其中一个字段是“所有者id”。我所有的查询都是针对单个所有者完成的 例如: SELECT COUNT(*) FROM `mydataset.mytable` WHERE owner_id = "owner23" AND color = "red" 为每个所有者创建一个表会降低我的BigQuery查询成本吗?我怀疑使用WHERE owner\u id=“owner23”和color=“red”查询整个表比仅使用owner23的数据
SELECT COUNT(*)
FROM `mydataset.mytable`
WHERE owner_id = "owner23" AND color = "red"
为每个所有者创建一个表会降低我的BigQuery查询成本吗?我怀疑使用WHERE owner\u id=“owner23”和color=“red”
查询整个表比仅使用owner23的数据和使用WHERE color=“red”
查询表需要处理更多的GBs。虽然我怀疑这是真的,但我想确认一下
另外,在多个表之间拆分数据是否会导致存储成本增加
谢谢 BigQuery将过滤器下推到表存储中,特别是对于这样的简单查询。您可以阅读有关过滤器按下的信息。请注意,从这个角度来看,标准SQL具有更强大的优化器
所以,我认为你不会得到多少好处。但是,您可能需要测试它是否有效。我真诚地怀疑这样做的好处是否值得管理单独表的额外复杂性。BigQuery将过滤器向下推到表存储中,特别是对于这样的简单查询。您可以阅读有关过滤器按下的信息。请注意,从这个角度来看,标准SQL具有更强大的优化器 所以,我认为你不会得到多少好处。但是,您可能需要测试它是否有效。我真诚地怀疑,管理单独的表所带来的额外复杂性是否值得 为每个所有者创建一个表会降低我的BigQuery查询成本吗 理论上——是的。您只对查询的列中的数据收费–无论根据WHERE子句限定了多少行。例如,如果您有10个数据相对均匀的客户机,那么您的查询成本可以低10倍,或者如果只有COUNT(1)而没有其他WHERE子句,那么它将是$0(零!)
有一个小问题,如果查询成本不为零——最低收费是10MB——因此,如果您的拆分表很小且所涉及的列的大小小于10MB——您仍将收取10MB的费用 实际上–管理多个表的潜在“成本”可能很高,因此您需要自己进行比较和决定 在多个表中拆分数据会导致存储成本增加吗 存储定价是按每MB、每秒按比例分配的,因此不会增加存储成本 为每个所有者创建一个表会降低我的BigQuery查询成本吗 理论上——是的。您只对查询的列中的数据收费–无论根据WHERE子句限定了多少行。例如,如果您有10个数据相对均匀的客户机,那么您的查询成本可以低10倍,或者如果只有COUNT(1)而没有其他WHERE子句,那么它将是$0(零!)
有一个小问题,如果查询成本不为零——最低收费是10MB——因此,如果您的拆分表很小且所涉及的列的大小小于10MB——您仍将收取10MB的费用 实际上–管理多个表的潜在“成本”可能很高,因此您需要自己进行比较和决定 在多个表中拆分数据会导致存储成本增加吗
存储定价是按每MB、每秒按比例分配的,因此存储成本不会增加因为存储的总数据是相同的,所以您的存储成本不会受到影响。将有额外的表元数据,但这不会影响存储成本。由于为查询而扫描的数据减少了10倍,因此查询成本将降低 尽管如此,这并不是实现大查询用例的推荐方法。BQ明确建议避免创建共享表,考虑日期碎片的这个例子-
你应该考虑的是你的表:代码> OnrErthIDID<代码>。它有以下优点
- 与按所有者id切分表完全相同的计算节省()
- 没有额外的表元数据或访问控制开销,您不需要为所有分片表维护ACL李>
- 减少了摄取时间复杂性,即即使创建了新的所有者,集群也会处理它,而如果选择为每个所有者创建单独的表,则需要处理新表的创建
此外,集群是免费的,只有一个缺点,那就是加载时间开销不大。请参阅这篇老文章,它将引导您了解集群基础知识-您的存储成本不会受到影响,因为存储的总体数据是相同的。将有额外的表元数据,但这不会影响存储成本。由于为查询而扫描的数据减少了10倍,因此查询成本将降低 尽管如此,这并不是实现大查询用例的推荐方法。BQ明确建议避免创建共享表,考虑日期碎片的这个例子-
你应该考虑的是你的表:代码> OnrErthIDID<代码>。它具有以下优点
- 与按所有者id切分表完全相同的计算节省()
- 没有额外的表元数据或访问控制开销,您不需要为所有分片表维护ACL李>
- 减少了摄取时间复杂性,即即使创建了新的所有者,集群也会处理它,而如果选择为每个所有者创建单独的表,则需要处理新表的创建