【问题标题】:Missing analytics function using PARTITION BY in bigquery在 bigquery 中使用 PARTITION BY 缺少分析功能
【发布时间】:2016-08-27 11:24:53
【问题描述】:

我正在尝试将 LAG 函数与 PARTITION BY 结合使用来计算时间戳的差异。

SELECT
 uuid,
 event_info,
 TIMESTAMP_TO_MSEC(event_time) - LAG(TIMESTAMP_TO_MSEC(event_time),1) OVER (PARTITION BY userId ORDER BY event_time ASC)  
FROM
 [DataSet.TableName]
ORDER BY
 uuid,
 event_time

但这会从 bigquery 生成错误,说“错误:分析表达式中缺少函数:4.95 - 4.153”

但是,如果我将第 4 行分成两部分

 TIMESTAMP_TO_MSEC(event_time) as time,
 LAG(TIMESTAMP_TO_MSEC(event_time),1) OVER (PARTITION BY userId ORDER BY event_time ASC) as previousTime,

然后它运行得很好。解决方法是使用上面的“修复”,然后将整个查询包装在另一个查询中,以便我可以将计算作为

 previousTime - time as difference

但这似乎有点老套,其他 SQL 变体的查询没有问题。

有人有什么建议吗?

谢谢, 布拉德

【问题讨论】:

    标签: google-bigquery


    【解决方案1】:

    这应该在 BigQuery 的标准 SQL 方言中修复 - https://cloud.google.com/bigquery/sql-reference/enabling-standard-sql

    请注意,您需要使用等效的 UNIX_MILLIS 函数,而不是旧版 SQL 中的 TIMESTAMP_TO_MSEC 函数。

    【讨论】:

    • 谢谢莫莎。如果我选择该选项然后将其保存为视图,我是否可以安全地假定该选项将与视图一起保存?
    • 抱歉 - 尚不支持标准 SQL 的视图,但即将推出。
    • 我无法给出确切的时间表,但它正在积极开发中,所以我希望如果一切顺利,它将在几个月内推出。
    • 我在文档中看不到 UNIX_MILLIS 函数。请你给我指出来好吗?谢谢!回复:部署到视图:很好,但现在我必须使用嵌套选择语句解决方案。 :) 感谢您提供有用的信息!
    • UNIX_MILLIS 和其他时间戳转换函数在此处记录:cloud.google.com/bigquery/sql-reference/…
    猜你喜欢
    • 2021-02-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-04
    • 2018-12-11
    • 2021-09-08
    相关资源
    最近更新 更多