在BigQueryGCP中,我试图在一个表中获取一些数据,其中日期与我得到的值列表中的日期相同。如果我硬编码select中的值列表,那么在运行过程中要比使用数组之类的temp结构便宜得多。。。
有没有一种方法可以使用temp结构,同时避免巨大的处理成本?
为什么像这样简单的小东西这么贵。请参见以下示例:
**-----1/ array structure example: this query process's 144.8 GB----------**
WITH
get_a as (
SELECT
GENERATE_DATE_ARRAY('2000-01-01','2000-01-02') as array_of_dates
)
SELECT
a.heading as title
a.ingest_time as proc_date
FROM
'veiw_a.events' as a
get_a as b
UNNEST(b.array_of_dates) as c
WHERE
c in (CAST(a.ingest_time AS DATE)
)
**------2/ hardcoded example: this query processes 936.5 MB over 154 X's less ? --------**
SELECT
a.heading as title
a.ingest_time as proc_date
FROM
'veiw_a.events' as a
WHERE
(CAST(a.ingest_time as DATE)) IN ('2000-01-01','2000-01-02')
1条答案
按热度按时间ffdz8vbo1#
想必,你的
view_a.events
表由ingest_time
.问题是分区修剪非常保守(bug?)。通过直接比较,bigquery足够聪明,可以准确地识别哪些分区用于查询。但是对于生成的版本,bigquery无法解决这个问题,因此需要读取整个表。