具体化 Lake 视图的 Spark SQL 参考

本文介绍与 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 指定违反约束时要执行的作的参数。 可能的作是 DROPFAIL。 默认情况下,如果没有此子句,则作为 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 用户定义的函数。
  • 不能使用临时视图来定义具体化湖视图。