【问题标题】:Select last record of each group as a materialised view bq选择每组的最后一条记录作为物化视图 bq
【发布时间】:2021-01-13 22:36:57
【问题描述】:

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

源表

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

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

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

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

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

【问题讨论】:

  • 最后 - 根据什么?最高版本号?
  • @Yang,您似乎想删除重复数据,其中重复将基于给定列(此处为名称)并保留最后一个版本顺序?重复数据删除是 BQ 社区中很好描述的一个主题。
  • @chaiyachaiya 最高版本
  • @jarlh 正确,最高版本

标签: sql google-cloud-platform google-bigquery materialized-views


【解决方案1】:

目前,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

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

这里是official document。

【讨论】:

  • 既然 BQ 支持(预览中)inner join 和没有聚合的物化视图,有没有更好的方法?
猜你喜欢
  • 2013-03-05
  • 2012-06-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-23
  • 1970-01-01
相关资源
最近更新 更多