选择每组的最后一条记录作为物化视图bq

Yan*_*ng 5 sql materialized-views google-bigquery google-cloud-platform

是否可以选择每个组中版本最高的记录并将其存储为bigquery中的物化视图?

源表

version name value
1       a    100
1       b    200
1       c    300
2       c    400

Run Code Online (Sandbox Code Playgroud)

我只想获取每个组的最后一条记录(按版本分组),所以输出应该是这样的:

version name value
1       a    100
1       b    200
2       c    400

Run Code Online (Sandbox Code Playgroud)

尝试使用以下答案: https: //stackoverflow.com/a/1313293/5839247,得到一个错误: Materialized views do not support analytic functions or WITH OFFSET. 尝试使用此答案中的方法:https: //stackoverflow.com/a/7745635/5839247,得到Unsupported operator in materialized view: Join.

文档:https ://cloud.google.com/bigquery/docs/materialized-views#supported_mvs

小智 4

目前,BigQuery 的物化视图不支持OFFSET. 因此,您必须创建另一个视图才能使用OFFSET

1.使用创建物化视图ARRAY_AGG

CREATE MATERIALIZED VIEW dataset.mv_name AS
SELECT
  name, 
  ARRAY_AGG(version ORDER BY version DESC) as versions,
  ARRAY_AGG(value ORDER BY version DESC) as values
FROM
  base_table
GROUP BY
  name
Run Code Online (Sandbox Code Playgroud)

2. 然后,使用创建另一个视图OFFSET

CREATE VIEW dataset.v_name AS
SELECT
  name,
  versions[OFFSET(0)] as last_version,
  values[OFFSET(0)] as last_value
FROM
  dataset.mv_name
Run Code Online (Sandbox Code Playgroud)

这是官方文件

  • 既然 BQ 支持(预览版)“内部联接”和不带聚合的物化视图,是否有更好的方法来做到这一点? (2认同)