繁体   English   中英

Azure 数据工厂:在通过管道从 csv 导入 sql server 期间发生错误和意外的数据类型转换

[英]Azure Data Factory: Wrong and unexpected Datatype conversion during import from csv to sql server via pipeline

我正在尝试使用 Azure 管道复制数据运算符将数据从 csv 加载到 sql server 数据库。 在导入数据期间转换为其他类型。

在管道中的源预览中,我看到以下内容

1- 值“0044”被转换为 44

2- 值 2020000000000000 转换为 2E+16

3- 值 5.2 转换为 2 月 5 日

4- 值 9.78 转换为 1978 年 9 月

到目前为止,我找不到 0044 的解决方案,

我这里的其他情况是我所做的:

对于 2,我将数字 2020000000000000 括在“”中,然后它起作用了,但出于某种原因,我将它括在四个“中”,就像这样:“2020000000000000””表示 3 和 4 我将点替换为逗号,然后它起作用了。

但是我希望能够告诉导入实用程序将所有内容都视为字符串并在数据库中进行转换。

我怎样才能做到这一点?

对于 3 和 4 中的一列,代码显示以下内容:

(

       "source":(

              "name": "Amount"

              "type": "String"

       )

       "sink":(

              "name": "Amount"

              "type": "String"

       )

)

此致,

csv 中的所有默认数据类型都是字符串。

在此处输入图片说明

对于 Azure SQL 数据库/SQL Server,我们不能将数据“0044”存储为int数据类型。 您需要将 '0044' 转换为字符串:

在此处输入图片说明

我们可以使用 select convert to 44 to '0044':

select right('0000'+ltrim([a]),4) new_a, b from test12

在此处输入图片说明

当我们从 csv 文件中复制数据时,您需要考虑 csv 文件中的数据是否是 Azure SQL 数据库/SQL Server 中的有效数据类型。 例如,数据“2020000000000000”超出整数长度。

设计水槽桌非常重要。 因此,建议您首先在 Azure SQL 数据库中使用适合每一列的数据类型创建接收器表,然后手动在复制活动中设置列映射:

映射设置:

在此处输入图片说明

流水线运行:

在此处输入图片说明

SQL数据库中的数据检查:

在此处输入图片说明

更新:

这个问题现在由 Ramiro Kollmannsperger 自己解决了:

“我在数据库中的接收器表只有 nvarchar 列。在对数据类型和长度进行了很多头痛之后,我这样做了。我决定对我来说,只需将数据库中的 nvarchar 转换为临时表就更容易了。什么最后的帮助是在读取 csv 的源数据集中进行模式导入。有一个选项卡“连接”,旁边还有另一个选项卡“模式”,您可以在其中导入模式。这样做后它就起作用了。”

希望这可以帮助。

我在数据库中的接收器表只有 nvarchar 列。 在对数据类型和长度感到头疼之后,我这样做了。

我决定将数据库中的 nvarchar 转换为临时表对我来说更容易。

最终有帮助的是在读取 csv 的源数据集中进行模式导入。 有一个选项卡“连接”,旁边还有另一个选项卡“模式”,您可以在其中导入模式。 这样做后,它起作用了。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM