将 Unity Catalog 与结构化流式处理结合使用

将结构化流式处理与 Unity Catalog 结合使用,以管理 Azure Databricks 上的增量和流式工作负载的数据治理。 本文档概述了支持的功能,并对结合使用 Unity Catalog 和结构化流式处理提出了最佳做法建议。

Unity Catalog 支持哪些结构化流式处理功能?

Unity Catalog 不会针对 Azure Databricks 上可用的结构化流式处理源和接收器添加任何显式限制。 Unity Catalog 数据治理模型允许从 Unity Catalog 中的托管表和外部表中流式传输数据。 还可以使用 Unity Catalog 管理的外部位置与使用对象存储 URI 的数据进行交互。 可以使用表名或文件路径写入到外部表。 在 Unity Catalog 上,你只能使用表名与托管表进行交互。

指定结构化流式处理检查点的路径时,请使用由 Unity Catalog 管理的外部位置。 若要详细了解如何使用 Unity Catalog 安全地连接存储,请参阅使用 Unity Catalog 连接到云对象存储

结构化流功能支持的不同取决于运行的 Databricks Runtime 版本以及使用的是分配还是共享集群访问模式。 有关详细信息,请参阅 Unity Catalog 的流式处理限制

有关在 Unity Catalog 上使用结构化流式处理的端到端演示,请参阅教程:运行端到端湖屋分析管道

Unity Catalog 上不支持哪些结构化流式处理功能?

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