有关 Databricks 自动加载程序的常见问题。
当文件被追加或覆盖时,自动加载程序是否会再次处理文件?
使用默认设置(cloudFiles.allowOverwrites
= false
),文件将完全处理一次。 将文件追加到或覆盖时,自动加载程序无法保证将处理哪个文件版本。
若要允许自动加载器在文件被追加或覆盖时再次处理该文件,可以将 cloudFiles.allowOverwrites
设置为 true
。 在这种情况下,可以保证自动加载程序处理最新版本的文件。 但是,自动加载程序无法保证处理哪个中间版本。
如果在文件通知模式下启用 cloudFiles.allowOverwrites
,请谨慎使用。 在文件通知模式下,自动加载程序可以通过文件通知和目录列表识别新文件。 由于文件通知事件时间和文件修改时间可能有所不同,因此自动加载程序可能会收到两个不同的时间戳,并引入同一文件两次,即使文件尚未更新。
启用 cloudFiles.allowOverwrites
后,必须自行处理重复记录。 自动加载程序会重新处理整个文件,即使文件被追加或部分更新。 通常,Azure Databricks 建议使用自动加载程序仅引入不可变文件,并使用默认设置 cloudFiles.allowOverwrites
= false
。 如果存在进一步的问题,请联系 Azure Databricks 帐户团队。
如果我的数据文件不是连续送达,而是定期送达(例如,一天一次),我是否仍应使用此源,是否有任何好处?
在这种情况下,你可以设置一个 Trigger.AvailableNow
(在 Databricks Runtime 10.4 LTS 及更高版本中可用)结构化流作业并计划在预期文件到达时间之后运行。 自动加载程序不但适用于不频繁的更新,也适用于频繁的更新。 即使最终更新非常大,自动加载程序也能够很好地根据输入大小进行缩放。 自动加载程序的高效文件发现技术和架构演变功能使自动加载程序成为增量数据引入的建议方法。
如果在重启流时更改了检查点位置,会发生什么情况?
检查点位置维护流的重要标识信息。 更改检查点位置实际上意味着已放弃上一个流并启动一个新流。
是否需要事先创建事件通知服务?
不是。 如果你选择文件通知模式并提供所需的权限,自动加载程序可以为你创建文件通知服务。 请参阅单独管理每个自动加载程序流的文件通知队列(旧版)。
如果在 Unity 目录中的外部位置启用了文件事件,则文件事件服务可以在云提供程序中创建文件事件,并且无需配置自动加载程序来为每个流创建它们。 请参阅 将文件通知模式与文件事件配合使用
如何清理自动加载程序创建的事件通知资源?
你可以使用云资源管理器列出和清除资源。 还可以使用云提供商的 UI 或 API 手动删除这些资源。
我可以从同一个存储桶/容器上的不同输入目录运行多个流式查询吗?
可以,前提是这些目录不是父子关系;例如,不能从 prod-logs/
和 prod-logs/usage/
运行这种查询,因为 /usage
是 /prod-logs
的子目录。
当桶或容器中已存在文件通知时,我是否可以使用此功能?
可以,只要输入目录与现有通知前缀不冲突(例如上面的父子目录)。
自动加载程序如何推理架构?
首次定义数据帧时,自动加载程序会列出源目录,选择最近的 50 GB 数据或 1000 个文件(按文件修改时间),并使用这些文件来推理数据架构。
自动加载程序还通过检查源目录结构来推理分区列,并查找包含 /key=value/
结构的文件路径。 例如,如果源目录采用了不一致的结构:
base/path/partition=1/date=2020-12-31/file1.json
// inconsistent because date and partition directories are in different orders
base/path/date=2020-12-31/partition=2/file2.json
// inconsistent because the date directory is missing
base/path/partition=3/file3.json
自动加载程序会将分区列推理为空。 使用 cloudFiles.partitionColumns
显式分析目录结构中的列。
当源文件夹为空时,自动加载程序的行为如何?
如果源目录为空,则自动加载程序会要求你提供架构,因为没有任何数据可用于执行推理。
自动加载程序何时推理架构? 它是否会在完成每个微批后自动演变?
首次在代码中定义数据帧时,将推理架构。 在每个微批处理期间,会实时评估架构更改;因此,无需担心性能影响。 当流重启时,它会从架构位置选取已演变的架构并开始执行,而不会产生任何推理开销。
使用自动加载程序架构推理时引入数据对性能有何影响?
在执行初始架构推理期间,对于极大的源目录,架构推理预期会花费几分钟时间。 在流执行期间,你不应看到显著的性能下降。 如果在 Azure Databricks 笔记本中运行代码,则可以看到状态更新,其中会指明自动加载程序何时列出目录用于采样和推理数据架构。
由于出现 bug,某个错误的文件极大地改变了我的架构。 如何回滚架构更改?
请联系 Databricks 支持人员取得帮助。