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 UDF 中使用 SQL

在 BigQuery 中使用 javascript udf 进行 tf idf 计算时,UDF 工作程序在执行期间超时

用于 BigQuery UDF 的纯 javascript HTML 解析器

BigQuery UDF 内存在多行上超出错误,但在单行上工作正常

BigQuery:使用 SQL 从辅助表中查找 ID 数组并连接数据