我有一个用户事件表,我想用一些谓词将这些事件投影到一个 新列中,然后将每个用户 的事件聚合到一个新的投影中,告诉我用户是否曾经谓词匹配 他们,或者他们从来没有与之相匹配等如何计算BigQuery中某列上的布尔聚合?
在其他语言中,这通常被称为all()
和any()
,在那里你传递 它的布尔值的列表,如果所有它会告诉你的匹配,或者如果在 至少有一个匹配。相当于在所有布尔值 值(如all
的情况下)上使用布尔值AND
,或在所有布尔值 值(如any
中)上使用布尔值OR
。
BigQuery是否具有此功能?我可以使用max
和 min
来近似它,但它并不理想。
例子:
select
month(date_time) m,
count(*) as ct,
max(id_is_present),
min(id_is_present),
max(starts_with_one) max_one,
min(starts_with_one) min_one,
from
(
select
length(user_id) > 1 id_is_present,
regexp_match(user_id, r'^1') starts_with_one,
date_time
from
[user_events.2015_02]
)
group by
m
它利用的max(true, false, false)
行为产生true
,所以你可以排序的通过为值的列搜索,然后从那里建立实施any
和all
。
这是我不得不依赖的破解或者BigQuery是否支持布尔聚合?