GCP:与硬编码值相比,从数组中选择查询具有非常大的流程数据要运行

Posted

技术标签:

【中文标题】GCP:与硬编码值相比,从数组中选择查询具有非常大的流程数据要运行【英文标题】:GCP: select query with unnest from array has very big process data to run compared to hardcoded values 【发布时间】:2020-07-18 02:22:46 【问题描述】: 在 bigQuery GCP 中,我试图在表中获取一些数据,其中日期与我获得的值列表中的日期相同。如果我对选择中的值列表进行硬编码,那么它在运行过程中比使用像数组这样的临时结构要便宜得多... 有没有办法在使用临时结构的同时避免巨大的处理成本? 为什么像这样简单的小东西这么贵。 请看下面的例子:
**-----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】:

大概,您的view_a.events 表是由ingest_time 分区的。

问题是分区修剪非常保守(有问题?)。通过直接比较,BigQuery 足够智能,可以准确识别用于查询的分区。但是对于生成的版本,BigQuery 无法解决这个问题,因此需要读取整个表。

【讨论】:

以上是关于GCP:与硬编码值相比,从数组中选择查询具有非常大的流程数据要运行的主要内容,如果未能解决你的问题,请参考以下文章

与硬编码输入相比,使用 fgets 从用户获取密钥时无法打印密钥流

如何从 PostgreSQL 的子查询中选择包含值数组的列?

SQL 多选一个字段值只选一次 和多次从表里查询但查的字段较少 相比哪个性能更好?为啥?

从 S3 读取大型 JSON 文件 (3K+) 并从数组中选择特定键

在 numpy 数组中查找与所有其他行相比具有最小值的行

GCP Pub/Sub - 如何从 BQ 计划查询中检索状态