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 问题的主要内容,如果未能解决你的问题,请参考以下文章