本文介绍与 Microsoft Fabric 中具体化湖视图相关的活动的 Spark SQL 语法。
创建具体化湖视图
可以从任何表或湖屋内的另一个具体化湖视图定义具体化湖视图。 以下代码概述了使用 Spark SQL 声明具体化湖视图的语法:
CREATE MATERIALIZED LAKE VIEW [IF NOT EXISTS][workspace.lakehouse.schema].MLV_Identifier
[(
CONSTRAINT constraint_name1 CHECK (condition expression1)[ON MISMATCH DROP | FAIL],
CONSTRAINT constraint_name2 CHECK (condition expression2)[ON MISMATCH DROP | FAIL]
)]
[PARTITIONED BY (col1, col2, ... )]
[COMMENT "description or comment"]
[TBLPROPERTIES ("key1"="val1", "key2"="val2", ... )]
AS select_statement
Arguments
| 参数 | DESCRIPTION |
|---|---|
MLV_Identifier |
物化湖视图的名称。 |
CONSTRAINT |
用于定义数据质量约束的关键字,后跟用户定义的名称。 该约束适用于具体化湖视图的级别。 |
CHECK |
基于特定列值强制实施条件的参数。 必须在定义约束时使用。 |
ON MISMATCH |
指定违反约束时要执行的作的参数。 可能的作是 DROP 和 FAIL。 默认情况下,如果没有此子句,则作为 FAIL。 |
PARTITIONED BY |
基于指定列创建分区的参数。 |
TBLPROPERTIES |
用于标记具体化湖视图定义的键/值对列表。 |
COMMENT |
描述具体化湖视图的语句。 |
AS select_statement |
使用 SELECT 语句在具体化湖视图中填充数据的查询。 |
例子
以下示例演示了具体化湖视图的定义,该视图通过将表与customers_enriched表联接customers来命名orders:
CREATE MATERIALIZED LAKE VIEW IF NOT EXISTS silver.customers_enriched AS
SELECT
c.customerID,
c.customerName,
c.contact,
CASE
WHEN COUNT(o.orderID) OVER (PARTITION BY c.customerID) > 0 THEN TRUE
ELSE FALSE
END AS has_orders
FROM bronze.customers c LEFT JOIN bronze.orders o
ON c.customerID = o.customerID;
注释
- 如果工作区名称包含空格,请将它括在反引号中:
`My Workspace`.lakehouse.schema.view_name - 物化湖视图名称不区分大小写并转换为小写(例如,
MyTestView变为mytestview)
以下示例定义按列分区customers_enriched的称为city具体化湖视图:
CREATE MATERIALIZED LAKE VIEW IF NOT EXISTS silver.customers_enriched
COMMENT "This is a sample materialized lake view"
PARTITIONED BY (city)
AS SELECT
c.customerID,
c.customerName,
c.contact,
CASE
WHEN COUNT(o.orderID) OVER (PARTITION BY c.customerID) > 0 THEN TRUE
ELSE FALSE
END AS has_orders
FROM bronze.customers c LEFT JOIN bronze.orders o
ON c.customerID = o.customerID;
获取具体化湖视图的列表
若要获取 Lakehouse 中所有具体化湖视图的列表,请使用以下命令:
SHOW MATERIALIZED LAKE VIEWS <IN/FROM> Schema_Name;
下面是一个示例:
SHOW MATERIALIZED LAKE VIEWS IN silver;
检索创建具体化湖视图的语句
若要获取 CREATE 具体化湖视图的语句,请使用以下命令:
SHOW CREATE MATERIALIZED LAKE VIEW MLV_Identifier;
下面是一个示例:
SHOW CREATE MATERIALIZED LAKE VIEW customers_enriched;
更新物化湖视图
若要更新具体化湖视图的定义,必须将其删除并重新创建。 仅 ALTER 支持重命名具体化湖视图的语句。
ALTER MATERIALIZED LAKE VIEW MLV_Identifier RENAME TO MLV_Identifier_New;
下面是一个示例:
ALTER MATERIALIZED LAKE VIEW customers_enriched RENAME TO customers_enriched_new;
删除具体化湖视图
可以使用 lakehouse 对象资源管理器中的 “删除 ”选项或在笔记本中运行以下命令来删除具体化湖视图:
DROP MATERIALIZED LAKE VIEW MLV_Identifier;
下面是一个示例:
DROP MATERIALIZED LAKE VIEW customers_enriched;
注释
删除或重命名实体化湖视图会影响血缘视图和计划刷新。 请务必更新所有依赖具体化湖视图中的引用。
当前限制
- 不支持所有大写字母的架构名称。 可以继续创建具体化的湖视图,而无需在架构名称中使用所有大写字母。
- 在计划世系刷新期间,不会在会话级别设置的 Spark 属性。
- 不支持创建具有增量时间旅行的具体化湖视图。
- 具体化湖视图不支持数据作语言 (DML) 语句。
- 不支持 (CTAS) 语句中的
CREATE TABLE AS SELECT用户定义的函数。 - 不能使用临时视图来定义具体化湖视图。