BigQuery 具体化视图 - ARRAY_AGG 问题

Posted

技术标签:

【中文标题】BigQuery 具体化视图 - ARRAY_AGG 问题【英文标题】:BigQuery Materialized View - ARRAY_AGG issue 【发布时间】:2021-01-13 19:00:34 【问题描述】:

我们正在尝试使用 ARRAY_AGG 作为 MATERIALIZED 视图的模式,以获取给定 productId 的“最新”产品事件。

下面的 SQL 是一种标准模式(本网站上有详细记录)并且可以自行运行,但在 BigQuery MV 的上下文中,会失败并出现附加错误。

我们本质上想在物化视图上使用这种类型的 SQL,其中“最新”由 BQ MV 增量更新,而不是替代计划查询来重新处理 product_events 中的所有事件?

CREATE MATERIALIZED VIEW `project.product_events_latest`
AS
SELECT
  ARRAY_AGG(
    e ORDER BY PARSE_TIMESTAMP("%Y-%m-%dT%H:%M:%E*S%Ez", event.eventOccurredTime) DESC LIMIT 1
  )[OFFSET(0)].*
FROM
  `project.product_events` e
GROUP BY
  e.productEvent.product.id

我不确定不支持的功能是什么,是否有办法重新编写以使其以不同的方式工作,或者还不可能?任何帮助表示赞赏!

【问题讨论】:

【参考方案1】:

目前 BigQuery 物化视图 does not support OFFSET 和其他后计算存在于聚合函数之上。

相反,将 [OFFSET(0)] 移动到常规视图的顶部 物化视图

【讨论】:

我发现即使我删除了 OFFSET[0].* 运算符,要离开结构,我也会收到另一个不支持的运算符 'Struct' 的错误,仅供参考。 'struct' 部分感觉是最大的障碍,因为我们想要完整的事件,而不是 1 个字段,因为没有偏移我们可以在顶部放置另一个视图来进行偏移。创建物化视图product.product_events_latest AS SELECT ARRAY_AGG( e ORDER BY PARSE_TIMESTAMP("%Y-%m-%dT%H:%M:%E*S%Ez", event.eventOccurredTime) DESC LIMIT 1 ) AS LatestProduct FROM @ 987654323@ e GROUP BY e.productEvent.product.id

以上是关于BigQuery 具体化视图 - ARRAY_AGG 问题的主要内容,如果未能解决你的问题,请参考以下文章

BigQuery 在创建实体化视图时出现“缺少空格”错误

如何使用 UI 从 BigQuery 中的视图创建表?

有没有办法在 BigQuery 中保存的视图中使用脚本方法?

如何清理 BigQuery 视图

如何创建 BigQuery 视图

如何创建使用用户定义函数的 BigQuery 视图?