BigQuery UDF 在另一个表中查找最大值
Posted
技术标签:
【中文标题】BigQuery UDF 在另一个表中查找最大值【英文标题】:BigQuery UDF to find max values in another table 【发布时间】:2017-07-05 16:22:58 【问题描述】:我有一些看起来像这样的数据,其中有一个不同类型的事件列表、事件发生的时间以及与事件关联的用户。事件 A 每个用户只发生一次,但事件 B 可以发生多次。
我想把它变成这样:
逻辑如下:
-
我查询表以提取每个用户发生事件 A 的时间列表
然后,对于每一行,我找到事件 B 在事件 A 之前发生的最近时间
第一点很简单,类似于
SELECT User, Time AS Event_A_Time FROM Raw_Data WHERE Event = 'Event A'
我卡住的地方是如何获得第三列。它需要类似于
SELECT MAX(Time) FROM Raw_Data WHERE Time < [Event_A_Time for this user]
我假设我需要为此使用 UDF,但我正在努力将其融入语法(使用标准 SQL)。任何帮助表示赞赏!
【问题讨论】:
【参考方案1】:这种计算不需要 UDF。试试这个:
SELECT * EXCEPT(Event_B_Times),
(SELECT MAX(time) FROM UNNEST(Event_B_Times) AS Time
WHERE Time < Event_A_Time) AS Event_B_Time
FROM (
SELECT
User,
MAX(IF(Event = 'Event A', Time, NULL)) AS Event_A_Time,
ARRAY_AGG(IF(Event = 'Event B', Time, NULL) IGNORE NULLS) AS Event_B_Times
FROM Raw_Data
GROUP BY User
);
【讨论】:
谢谢。不过,据我了解,这将为我提供最大 Event_B_Time,无论它高于还是低于 Event_A_Time? 对不起,我误会了。你能看看这个编辑是否有效吗?它找到 B 的最大时间小于 A 的时间。 谢谢,这真的很有帮助:)以上是关于BigQuery UDF 在另一个表中查找最大值的主要内容,如果未能解决你的问题,请参考以下文章
描述如何在 SQL 中内联定义 Javascript UDF 函数的 BigQuery 文档在哪里(不是在 UDF 编辑器或单独的文件中)?
在 BigQuery 中使用 javascript udf 进行 tf idf 计算时,UDF 工作程序在执行期间超时
用于 BigQuery UDF 的纯 javascript HTML 解析器