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

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的数据

我有一个表,目前BigQuery中有4300多万行存储数据样本。其中一个字段是“所有者id”。我所有的查询都是针对单个所有者完成的

例如:

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
  • 减少了摄取时间复杂性,即即使创建了新的所有者,集群也会处理它,而如果选择为每个所有者创建单独的表,则需要处理新表的创建
此外,集群是免费的,只有一个缺点,那就是加载时间开销不大。请参阅这篇老文章,它将引导您了解集群基础知识-