Azure 数据工厂架构映射不适用于 SQL 接收器

Azure Data Factory schema mapping not working with SQL sink

我有一个简单的管道,可以将数据从 csv 文件加载到 Azure SQL 数据库。

我添加了一个数据流,确保所有模式都匹配 SQL table。我有一个特定字段,其中包含带前导零的数字。 source - projection 中的数据类型设置为字符串。该字段映射到显示为字符串数据类型的 SQL 接收器。 SQL 中的字段具有 nvarchar(50) 数据类型。

一旦管道为 运行,所有前导零都将丢失并且该字段似乎被视为十进制:

Original data: 0012345
Inserted data: 12345.0

数据预览中显示的 CSV 数据正确显示,但由于某种原因,它在插入过程中丢失了格式。

关于如何正确插入它的任何想法?

我在我的实验室中进行了重现,并且能够按预期加载。请查看以下复现详情。

源文件(CSV文件):

下沉table (SQL table):

ADF:

  1. data flow source 连接到 CSV 源文件。由于我的文件是文本格式,投影中的所有源列都是一个字符串。

源数据预览:

  1. sink 连接到 Azure SQL database 以将数据加载到目标 table。

  1. Azure SQL 数据库中的数据 table。

注意:由于sink的数据类型是string,都可以在sink前加上derived columns将值转成string。

非常感谢您的回复。

根据您的 post,DF 数据流似乎工作正常。我终于发现了转换的问题 - 我有一个运行 python 脚本的 Azure 批处理服务,该脚本执行基本转换并将输出保存到 csv 文件。

有趣的是,当我预览数据流中的数据时,它看起来和预期的一样。但是,存储在 SQL 中的值不是。

为了其他人遇到类似问题,我现有的 python 脚本用于将 'float' 数据类型列转换为 string-type。转换后,它过去常常保留 1 个十进制数,但由于我所有的数字都是整数,所以它们以 .0.

结尾

解决方案是将值转换为整数,然后再转换为字符串:

df['col_name'] = df['col_name'].astype('Int64').astype('str')