【问题标题】:How does partitioning in BigQuery works?BigQuery 中的分区如何工作?
【发布时间】:2020-10-12 03:08:22
【问题描述】:

大家好:我想了解分区表是如何工作的。我有一个大小为 12.9MB 的销售表。我有一个按天分区的日期列。我的假设是,当我使用此日期列过滤数据表时,BigQuery 处理的数据量将得到优化。但是,它似乎并没有那样工作,我想了解原因。 在下面的查询中,我使用子查询过滤 sales.date。当我尝试这样执行查询时,它正在处理 12.9 MB 的整个表。

但是,如果我将下面的子查询替换为实际日期(与子查询的结果相同),则处理的数据量为 4.9 MB。

子查询单独处理 630 KB 的数据。如果我的理解是正确的,下面给出的查询过程不应该是 4.9 MB + 630 KB = ~ 5.6 MB 吗?但是,它仍然处理 12.9 MB。有人能解释一下这里发生了什么吗?

SELECT 
sales.*,
FROM `my-project.transaction_data.sales_table` sales
WHERE DATE(sales.date) >= DATE_SUB(DATE((select max(temp.date) FROM ` my-project.transaction_data.sales_table ` temp)), INTERVAL 2 YEAR)
ORDER BY sales.customer, sales.date

【问题讨论】:

    标签: google-bigquery partitioning


    【解决方案1】:

    有人能解释一下这里发生了什么吗?

    这是预期行为

    一般而言,如果可以在查询开始时评估过滤器而不需要任何子查询评估或数据扫描,则分区修剪将降低查询成本

    需要对查询的多个阶段进行评估以解析谓词(例如内部查询或子查询)的复杂查询不会从查询中删除分区。

    Querying partitioned tables查看更多信息

    可能的解决方法是使用脚本,您将首先计算实际日期并将其分配给变量,然后在查询中使用它,从而消除子查询

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多