什么是自动加载程序?

自动加载程序会在新数据文件到达云存储空间时以增量方式高效地对其进行处理,而无需进行任何其他设置。

自动加载程序如何工作?

自动加载程序会在新数据文件到达云存储空间时以增量方式高效地对其进行处理。 它提供了名为 cloudFiles 的结构化流式处理源。 给定云文件存储上的输入目录路径后,cloudFiles 源将在新文件到达时自动处理这些文件,你也可以选择处理该目录中的现有文件。 Auto Loader 在 Lakeflow 管道中同时支持 Python 和 SQL。

可以使用自动加载程序处理数十亿个文件以迁移或回填表。 自动加载器可以扩展以支持每小时近乎实时地摄取数百万个文件。

支持的自动加载器源

自动加载器可以从以下源加载数据文件:

  • Azure Data Lake Storage (ADLS, abfss://

  • Unity 目录卷 (/Volumes/

  • Azure Blob 存储 (wasbs://

    注意

    旧版Windows Azure 存储 Blob 驱动程序(WASB)已弃用。 与 WASB 相比,ABFS 具有许多优势。 请参阅有关 ABFS 的 Azure 文档。 有关使用旧版 WASB 驱动程序的文档,请参阅 连接到 Azure Blob 存储 WASB(旧版)

自动加载程序可以引入 JSONCSVXMLPARQUETAVROORCTEXTBINARYFILE 文件格式。 自动加载程序还支持读取这些格式的预压缩文件。 有关按格式支持的压缩类型,请参阅 数据格式选项

自动加载程序如何跟踪引入进度?

当文件被发现时,它们的元数据将保存在自动加载程序管道的检查点位置的可缩放键值存储(RocksDB)中。 这种键值存储可确保只处理一次数据。

如果发生故障,自动加载程序可以借助检查点位置存储的信息从中断处恢复,并在将数据写入 Delta Lake 时持续提供恰好一次性语义保证。 你无需自己维护或管理任何状态即可实现容错或恰好一次性语义。

通过 Lakeflow 管道使用自动加载程序进行增量引入

Databricks 建议在 Lakeflow 管道中使用 Auto Loader 进行增量数据摄取。 无需提供架构或检查点位置,因为 Lakeflow 管道会自动管理管道的这些设置。 有关建议的配置,请参阅 为生产工作负荷配置自动加载程序

Databricks 还建议在使用 Apache Spark 结构化流式处理从云对象存储引入数据时,优先采用自动加载程序。 API 在 Python 和 Scala 中可用。

开始使用 Databricks 自动加载器

请参阅以下文章,了解如何通过 Lakeflow 管道使用自动加载程序配置增量数据引入:

示例:常见的自动加载程序模式

有关常见自动加载程序模式的示例,请参阅常见的数据加载模式

配置自动加载器选项

有关控制自动加载程序读取和处理文件的配置选项的完整参考,请参阅 自动加载程序

自定义自动加载程序

可以根据数据量、多样性和速度来优化自动加载程序。

如果遇到意外的性能,请参阅 自动加载程序常见问题解答

配置自动加载器文件检测模式

自动加载程序支持两种文件检测模式。 默认情况下,自动加载程序使用目录列表模式。 但是,Databricks 建议对大多数工作负荷使用文件事件的文件通知模式。 请参阅:

处理无序数据

无论使用目录列表还是文件通知模式,自动加载程序都不能保证发现或处理文件的顺序。 使用以下策略设计您的数据管道以处理文件无序到达。

带有 AUTO CDC 的 Lakeflow 管道

如果您将 Lakeflow 管道与 Auto Loader 和 AUTO CDC 一起使用,请配置墓碑记录保留期,以便将已删除记录保留足够长的时间来处理乱序到达的文件。 将 pipelines.cdc.tombstoneGCThresholdInSeconds 目标流式处理表上的表属性设置为超过事件到达和管道执行之间的最大预期延迟的值。 默认保留期为两天。 有关详细信息,请参阅 create_auto_cdc_flow

不使用 Lakeflow 管道的结构化流处理

如果将 Apache Spark Structured Streaming 与 Auto Loader 直接配合使用(而不使用 Lakeflow 管道),请考虑采用以下模式来处理乱序数据:

  • 首选软删除而不是硬删除:跟踪 deleted 标志和时间戳,而不是删除行,以便延迟删除不会与早期记录冲突。
  • 在应用更新之前比较时间戳:在更新插入时,将传入记录的更新时间戳与目标行的当前时间戳进行比较,以避免覆盖过时的数据。

使用自动加载器相对于直接在文件中使用结构化流的优势

在 Apache Spark 中,可以使用 spark.readStream.format(fileFormat).load(directory) 以增量方式读取文件。 相比于文件源,自动加载程序具有以下优势:

  • 可伸缩性:自动加载程序可以高效地发现数十亿个文件。 可以以异步方式执行回填,以避免浪费任何计算资源。
  • 性能:使用自动加载程序发现文件的成本会根据要引入的文件的数量(而不是文件可能登陆的目录的数量)进行调整。 请参阅 在目录列表模式下配置自动加载程序流
  • 架构推理和演变支持:自动加载程序可以检测到架构偏移,在发生架构更改时通知你,并且会挽救那些原本会被忽略或丢失的数据。 请参阅自动加载程序架构推理的工作原理是怎样?
  • 成本:自动加载程序使用本机云 API 来获取存储中存在的文件的列表。 另外,自动加载程序的文件通知模式可通过完全避免目录列表来帮助进一步降低云成本。 自动加载程序可在存储上自动设置文件通知服务,从而使文件发现成本大幅降低。