【问题标题】:Query from Latest Table Partition Wildcard in BigQuery从 BigQuery 中的最新表分区通配符查询
【发布时间】:2017-11-06 07:14:50
【问题描述】:

我有名为 sample 和 table_201606、table_201607 的数据集,直到 table_201710。然后我要完成的事情是从最新的 TABLE SUFFIX 中获取数据,即 table_201710。以下是我的查询:

     WITH max_table_time AS(
        SELECT
            TIMESTAMP_ADD(MAX(time), INTERVAL 1 HOUR) AS max_time,
            FORMAT_DATE("%Y%m", DATE(MAX(time))) AS par
        FROM
            `sample.table_*`
    ),


    xyz as(
        SELECT id, sum(total_a) as total_b, sum(total_c) as sum_total
        FROM `sample.table_*`
        WHERE _TABLE_SUFFIX = (SELECT par from play_partitions) 
        GROUP BY video_id
    )

    SELECT * FROM xyz

不知何故,上面的查询扫描了所有表(从 table_201606 到 table_201710),但结果很好(table_201710 中的数据)。

但是,当我尝试这个时,结果会有所不同:

WITH max_table_time AS(
        SELECT
            TIMESTAMP_ADD(MAX(time), INTERVAL 1 HOUR) AS max_time,
            FORMAT_DATE("%Y%m", DATE(MAX(time))) AS par
        FROM
            `sample.table_*`
    ),


    xyz as(
        SELECT id, sum(total_a) as total_b, sum(total_c) as sum_total
        FROM `sample.table_*`
        WHERE _TABLE_SUFFIX = '201710' 
        GROUP BY video_id
    )

    SELECT * FROM xyz

上面的查询,只是扫描了table_201710和table_201710中的结果数据。与第一个查询不同,它扫描所有表,但结果是 table_201710 中的正确数据。

我怎么能说第一个查询扫描了所有表?因为当我执行第一个查询时,BigQuery 控制台只是说我使用 10 GB 数据,而不是第二个查询,它只使用在进程中处理的 200 MB 数据。

我想知道为什么,有人可以解释一下吗?

【问题讨论】:

    标签: google-bigquery wildcard bigquery-standard-sql


    【解决方案1】:

    刚刚仔细阅读了BigQuery中的通配符表,发现了这些句子:

    使用 _TABLE_SUFFIX 可以大大减少扫描的字节数,从而降低运行查询的成本。 _TABLE_SUFFIX 上包含子查询的过滤器不能用于限制扫描通配符表的表数。例如,以下查询不限制为通配符表 bigquery-public-data.noaa_gsod.gsod19* 扫描的表

    在进行这些查询之前,我没有进行 RTFM。 :D

    【讨论】:

      猜你喜欢
      • 2019-09-22
      • 1970-01-01
      • 2017-08-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-22
      相关资源
      最近更新 更多