首页 > 解决方案 > Azure 数据工厂附加大量与 csv 文件具有不同架构的文件

问题描述

我们有 500 个 CSV 文件上传到 Azure 存储容器。这些文件使用 4 种不同的模式,这意味着它们几乎没有不同的列,并且某些列在所有文件中都是通用的。

我们正在使用 ADF 和模式漂移来映射接收器和源中的列,并能够编写文件。

但这不起作用,它仅将架构用于它为每个文件处理的第一个文件,这会导致数据问题。请就这个问题提出建议。

我们为三个场景运行了管道,但问题没有解决。在所有三种情况下都会出现与下面提到的相同的问题:

1.不正确的映射,即 A 类型的 Description 和 PayClass 映射到 WBSname 和 Activity 名称 2. 如果文件之一中少一列(缺失列)也会干扰映射,即一个文件没有资源类型映射 Group 不正确到其他列。

案例 1 源和接收器没有架构漂移 空的虚拟文件,所有列都在源创建和上传 带有列模式的派生表

案例 2:源和接收器的架构漂移 虚拟文件,所有列都在源创建和上传 带有列模式的派生表

案例 3:源的架构漂移/接收器没有架构漂移 虚拟文件,所有列都在源创建和上传 带有列模式的派生表

标签: azureazure-sql-databaseazure-data-factoryazure-databricksazure-synapse

解决方案


这是因为单源转换正在读取的文件中有不同的架构。

Schema Drift 将自动处理源的架构因来自管道的不同调用而发生更改的情况。

在您的情况下解决此问题的方法是拥有 4 个来源:每个 CSV 模式类型都有 1 个。您始终可以将结果重新合并到一个流中,并在最后将它们汇集在一起​​。

如果您在此场景中使用具有 4 种不同源类​​型的架构漂移,则数据流将自动处理发现更多列并且每次执行此数据流的管道更改列的情况。

顺便说一句,您要求的这个 schemaMerge 功能今天可用于 ADF 数据流中的 Parquet 源。我们正在努力将本机 schemaMerge 添加到 CSV 源。在那之前,您需要使用我上面描述的方法。


推荐阅读