Bigquery - UNION ALL 具有不同参数的相同查询
Posted
技术标签:
【中文标题】Bigquery - UNION ALL 具有不同参数的相同查询【英文标题】:Bigquery - UNION ALL same query with different parameters 【发布时间】:2020-10-27 11:18:37 【问题描述】:我有一个非常大的查询,我想联合所有相同的查询,但更改两个不同的参数。因此,为了使查询更具可读性,我想避免使用 UNION ALL。这是一个简短的例子(废话,但它给出了一个想法) 我所拥有的:
SELECT DISTINCT Name,'7 days' FROM T WHERE DATE(event_time) BETWEEN DATE_SUB(CURRENT_DATE(), INTERVAL 7 DAY) AND CURRENT_DATE())
UNION ALL
SELECT DISTINCT Name, '14 DAYS' FROM T WHERE DATE(event_time) BETWEEN DATE_SUB(CURRENT_DATE(), INTERVAL 14 DAY) AND CURRENT_DATE())
所以重点是避免这种联合并使其可扩展以适应更多联合,只需更改间隔而不创建数百行代码。
【问题讨论】:
【参考方案1】:你可以这样写:
SELECT DISTINCT Name, CONCAT(d, ' days')
FROM T JOIN
(UNNEST(ARRAY[7, 14]) d
ON DATE(event_time) BETWEEN DATE_SUB(CURRENT_DATE, INTERVAL d DAY) AND CURRENT_DATE())
这个查询基本上是无意义的,因为它只是在每个时间段重复最近的名字。
但关键的想法是 UNNEST()
一个包含您想要的值的数组,然后使用 JOIN
而不是 WHERE
。
【讨论】:
以上是关于Bigquery - UNION ALL 具有不同参数的相同查询的主要内容,如果未能解决你的问题,请参考以下文章
BigQuery 中的 UNION ALL 或 CONCATENATE 数据集
是否可以在 Union All BigQuery SQL 中让 where 子句引用另一个 where 子句?
Bigquery 使用 Union All 和通配符删除查询