gcp:selectquerywithunnestfromarray与硬编码值相比有非常大的进程数据要运行

tquggr8v  于 2021-07-29  发布在  Java
关注(0)|答案(1)|浏览(213)

在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')
ffdz8vbo

ffdz8vbo1#

想必,你的 view_a.events 表由 ingest_time .
问题是分区修剪非常保守(bug?)。通过直接比较,bigquery足够聪明,可以准确地识别哪些分区用于查询。但是对于生成的版本,bigquery无法解决这个问题,因此需要读取整个表。

相关问题