我的 Databricks Unity 目录中有两个表。
trips
的数据,大约30.000行。行程ID | 客户 | 地点 | 开始 | 结束 | ... |
---|---|---|---|---|---|
ABC | 客户1 | loc1 | 2023-01-01T00:00:00 | 2023-01-01T08:00:00 | ... |
防御 | 客户1 | loc2 | 2023-01-01T10:00:00 | 2023-01-01T15:00:00 | ... |
metrics
数据宽表时间戳 | 传感器1 | 传感器2 | ... |
---|---|---|---|
01-01-2023T02:01:01 | val1 | val2 | ... |
01-01-2023T02:01:02 | val3 | val4 | ... |
我们想将这两个表组合在一个类似的视图中
CREATE VIEW AS my_view
SELECT *
FROM metrics
LEFT JOIN trips ON timestamp BETWEEN start AND end
最终用户将通过类似查询在其应用程序中查询此视图
SELECT *
FROM my_view
WHERE Client = 'my_client' and Location = 'my_location'
创建表而不是视图是不可取的,因为数据会相乘
我的问题是: 在对客户/位置进行过滤之前是否会创建整个视图, 或者当查询视图时会立即执行客户端/位置过滤吗?
在 Databricks 中,单独使用
CREATE VIEW
将创建一个非物化视图。 该视图在执行时通常会像底层选择查询一样运行。
另一方面,如果您要使用
CREATE MATERIALIZED VIEW
,那么视图将被预编译并保留在您的数据库中。 在这种情况下,从物化视图中进行选择将访问底层选择查询的已计算结果。
请参阅此处,了解有关在 Databricks 中使用物化视图的更多信息。