我有一个包含事件日志的表,架构:
userid, event, timestamp
我希望按用户ID分组并找到该用户具有特定事件
离。
userid, events
A, "open, click, remove, restart"
所以我想把结果组作为字符串/数组
有什么方法可以做到这一点吗?
谢谢!
答案 0 :(得分:2)
以下是BigQuery Standard SQL
作为示例 - 假设您想要获取具有remove
事件的用户的所有#standardSQL
SELECT userid,
STRING_AGG(event ORDER BY ts) AS events
FROM `project.dataset.yourtable`
GROUP BY userid
HAVING REGEXP_CONTAINS(LOWER(events), r'\bremove\b')
事件的列表:
#standardSQL
WITH `project.dataset.yourtable` AS (
SELECT 'A' userid, 'open' event, 1 ts UNION ALL
SELECT 'A', 'click', 2 UNION ALL
SELECT 'A', 'remove', 3 UNION ALL
SELECT 'A', 'restart', 4 UNION ALL
SELECT 'B', 'open', 1 UNION ALL
SELECT 'B', 'click', 2
)
SELECT userid,
STRING_AGG(event ORDER BY ts) AS events
FROM `project.dataset.yourtable`
GROUP BY userid
HAVING REGEXP_CONTAINS(LOWER(events), r'\bremove\b')
您可以使用以下虚拟数据进行上述测试/播放
userid events
A open,click,remove,restart
结果如下(用户B未显示,因为此用户甚至不存在删除)
public class Test1
{
public Test2 Test2 { get; set; }
}
public class Test2 { }
答案 1 :(得分:1)
您可以使用update()
中的group_concat
功能实现此目的。
BigQuery
您还简要提一下,您希望找到具有特定事件的用户,您可以将其作为select userid, group_concat(event, ', ') as events
from EventLog
group by userid;
子句的一部分添加,但是您没有提供任何有关如何缩小范围的示例它失败了,我省略了那一部分。如果你能提供一个更具体的案例来说明你在寻找什么,我可以更新我的答案以反映这一点。