从 Unity 目录视图流式传输
重要
此功能目前以公共预览版提供。
在 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
。
源视图中支持的操作
并非所有视图都支持流式读取。 源视图中不支持的操作包括聚合和排序。
以下列表提供受支持操作的说明和示例视图定义:
Project
说明:控制列级权限
运算符:
SELECT... FROM...
示例 语句:
CREATE VIEW project_view AS SELECT id, value FROM source_table
Filter
说明:控制行级权限
运算符:
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.