google-bigquery - BigQuery 具体化视图 - 组中的最后一个
问题描述
在 BigQuery 中是否可以创建一个物化视图,其中包含基表中每个组的最新行。
例如
CREATE TABLE basetable (
group_id INT64, timestamp TIMESTAMP, value FLOAT64
);
INSERT INTO basetable (group_id, timestamp, value) VALUES
(1, '2020-01-01', 0.1),
(1, '2020-01-02', 0.2),
(2, '2020-01-02', 0.1),
(2, '2020-01-01', 0.2);
Base table
+----------+--------------+-------+
| group_id | timestamp | value |
+----------+--------------+-------+
| 1 | '2020-01-01' | 0.1 |
| 1 | '2020-01-02' | 0.2 |
| 2 | '2020-01-02' | 0.1 |
| 2 | '2020-01-01 | 0.2 |
+----------+--------------+-------+
我希望物化视图如下所示
Materialized view
+----------+--------------+-------+
| group_id | timestamp | value |
+----------+--------------+-------+
| 1 | '2020-01-02' | 0.2 |
| 2 | '2020-01-02' | 0.1 |
+----------+--------------+-------+
BigQuery 具体化视图不支持分析函数或联接。有没有其他方法可以创建这样的视图?
解决方案
您最多可以这样做,请注意结果是一个包含一个项目的数组
CREATE MATERIALIZED VIEW name as
SELECT group_id,
max(t.timestamp) as timestamp,
ARRAY_AGG(t.value IGNORE NULLS ORDER BY t.timestamp DESC LIMIT 1) as value
FROM table t
group by group_id
那么你也需要一个视图
create view viewname as
SELECT group_id,timestamp
cast(value [safe_offset(0)] as string) as value
FROM materialized_view
推荐阅读
- php - 在 CodeIgniter 中显示长脚本执行期间的实时进度和任何错误
- excel - VBScript刷新特定文件夹中的所有excel文件
- html - Bootstrap 4网格布局定制
- android - 在 Android 清单中 android:name 显示错误 -- parse sdk android
- asp.net-mvc - Transport Tracker 以在 MVC Web 应用程序中的 Google 地图上跟踪公交车
- android - 使用 minifyEnabled true 来避免 multidex 禁用断点 - 如何修复?
- javascript - 页面速度见解:渲染阻止字体真棒
- php - 沃尔玛库存更新无法面对 400
- string - 如何使用字符串值访问对象
- ember.js - 对不同的后端服务器请求使用不同的 ember 适配器