从 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 定义的视图读取不支持选项 withEventTimeOrderstartingVersion

源视图中支持的操作

并非所有视图都支持流式读取。 源视图中不支持的操作包括聚合和排序。

以下列表提供受支持操作的说明和示例视图定义:

  • 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.