将结构化流式处理与 Unity Catalog 结合使用,以管理 Azure Databricks 上的增量和流式工作负载的数据治理。 本文档概述了支持的功能,并对结合使用 Unity Catalog 和结构化流式处理提出了最佳做法建议。
Unity Catalog 不会针对 Azure Databricks 上可用的结构化流式处理源和接收器添加任何显式限制。 Unity Catalog 数据治理模型允许从 Unity Catalog 中的托管表和外部表中流式传输数据。 还可以使用 Unity Catalog 管理的外部位置与使用对象存储 URI 的数据进行交互。 可以使用表名或文件路径写入到外部表。 在 Unity Catalog 上,你只能使用表名与托管表进行交互。
指定结构化流式处理检查点的路径时,请使用由 Unity Catalog 管理的外部位置。 若要详细了解如何使用 Unity 目录安全地连接存储,请参阅 使用 Unity 目录连接到云对象存储。
结构化流式处理特性支持因您使用的 Databricks Runtime 版本以及是使用分配的还是标准计算访问模式而有所不同。 有关详细信息,请参阅 Unity Catalog 的流媒体限制。
有关 Unity Catalog 不支持的结构化流式传输功能的列表,请参阅 Unity Catalog 的流式传输限制。
在 Databricks Runtime 14.1 及更高版本中,可以使用结构化流式处理从注册到 Unity 目录的视图执行流式传输读取。 Azure Databricks 仅支持从针对 Delta 表定义的视图流式读取。
若要使用结构化流式处理读取视图,请向 .table()
方法提供视图的标识符,如以下示例所示:
df = (spark.readStream
.table("demoView")
)
用户必须对目标视图拥有 SELECT
权限。
配置针对视图的流式读取时,支持以下选项:
maxFilesPerTrigger
maxBytesPerTrigger
ignoreDeletes
skipChangeCommits
withEventTimeOrder
startingTimestamp
startingVersion
流式处理读取器将这些选项应用于定义基础 Delta 表的文件和元数据。
重要
针对使用 UNION ALL
定义的视图读取不支持选项 withEventTimeOrder
和 startingVersion
。
并非所有视图都支持流式读取。 源视图中不支持的操作包括聚合和排序。
以下列表提供受支持操作的说明和示例视图定义:
项目
说明:控制列级权限
运算符:
SELECT... FROM...
示例 语句:
CREATE VIEW project_view AS SELECT id, value FROM source_table
滤波器
说明:控制行级权限
运算符:
WHERE...
示例 语句:
CREATE VIEW filter_view AS SELECT * FROM source_table WHERE value > 100
全部联合
说明:来自多个表的结果
运算符:
UNION ALL
示例 语句:
CREATE VIEW union_view AS SELECT id, value FROM source_table1 UNION ALL SELECT * FROM source_table2
注意
不能修改视图定义来添加或更改视图中引用的表,并使用相同的流式处理检查点。
以下限制适用:
只能从 Delta 表支持的视图中流式传输。 不支持针对其他数据源定义的视图。
必须向 Unity Catalog 注册视图。
如果从视图流式传输了不受支持的运算符,则将显示以下异常:
UnsupportedOperationException: [UNEXPECTED_OPERATOR_IN_STREAMING_VIEW] Unexpected operator <operator> in the CREATE VIEW statement as a streaming source. A streaming view query must consist only of SELECT, WHERE, and UNION ALL operations.
如果提供不受支持的选项,将显示以下异常:
AnalysisException: [UNSUPPORTED_STREAMING_OPTIONS_FOR_VIEW.UNSUPPORTED_OPTION] Unsupported for streaming a view. Reason: option <option> is not supported.