我有名为 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 数据。
我想知道为什么,有人可以解释一下吗?