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:
- 将
data flow
source 连接到 CSV 源文件。由于我的文件是文本格式,投影中的所有源列都是一个字符串。
源数据预览:
- 将 sink 连接到
Azure SQL database
以将数据加载到目标 table。
- 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')
我有一个简单的管道,可以将数据从 csv 文件加载到 Azure SQL 数据库。
我添加了一个数据流,确保所有模式都匹配 SQL table。我有一个特定字段,其中包含带前导零的数字。 source - projection 中的数据类型设置为字符串。该字段映射到显示为字符串数据类型的 SQL 接收器。 SQL 中的字段具有 nvarchar(50) 数据类型。
一旦管道为 运行,所有前导零都将丢失并且该字段似乎被视为十进制:
Original data: 0012345
Inserted data: 12345.0
数据预览中显示的 CSV 数据正确显示,但由于某种原因,它在插入过程中丢失了格式。
关于如何正确插入它的任何想法?
我在我的实验室中进行了重现,并且能够按预期加载。请查看以下复现详情。
源文件(CSV文件):
下沉table (SQL table):
ADF:
- 将
data flow
source 连接到 CSV 源文件。由于我的文件是文本格式,投影中的所有源列都是一个字符串。
源数据预览:
- 将 sink 连接到
Azure SQL database
以将数据加载到目标 table。
- 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')