Azure 数据工厂:通过管道从 csv 导入到 sql 服务器期间发生错误和意外的数据类型转换
Azure Data Factory: Wrong and unexpected Datatype conversion during import from csv to sql server via pipeline
我正在尝试使用 Azure 管道复制数据运算符将数据从 csv 加载到 sql 服务器数据库。导入期间数据转换为其他类型。
在管道的源代码预览中,我看到以下内容
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 database/SQL 服务器,我们不能将数据 '0044' 存储为 int 数据类型。您需要将 '0044' 转换为 String:
我们可以使用 select 转换为 44
为 '0044':
select right('0000'+ltrim([a]),4) new_a, b from test12
当我们从csv文件复制数据时,你需要考虑csv文件中的数据是否是Azure SQL database/SQL服务器中的有效数据类型。例如,数据 '2020000000000000' 超出 int 长度。
水槽的设计很重要table。因此,建议您首先在 Azure SQL 数据库中为每一列创建 suitable 数据类型的接收器 table,然后在 Copy active 中手动设置列映射:
映射设置:
管道运行:
SQL数据库中的数据检查:
更新:
现在这个问题已经由 Ramiro Kollmannsperger 自己解决了:
"my sink table in the database has only nvarchar columns. I did this so after a lot of headaches with datatypes and length. I decided that it is easier for me to just do the conversions from nvarchar in the database into a staging table. What helped in the end was to do the schema import in the source Dataset where the csv is read. There is a tab "connection" 和它旁边的另一个选项卡 "schema",您可以在其中导入架构。完成此操作后它起作用了。"
希望对您有所帮助。
我的接收器 table 在数据库中只有 nvarchar 列。
在对数据类型和长度感到头疼之后,我这样做了。
我决定将数据库中的 nvarchar 转换为暂存 table 对我来说更容易。
最终有帮助的是在读取 csv 的源数据集中进行模式导入。
有一个选项卡 "connection",旁边是另一个选项卡 "schema",您可以在其中导入架构。这样做后它起作用了。
我正在尝试使用 Azure 管道复制数据运算符将数据从 csv 加载到 sql 服务器数据库。导入期间数据转换为其他类型。
在管道的源代码预览中,我看到以下内容
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 database/SQL 服务器,我们不能将数据 '0044' 存储为 int 数据类型。您需要将 '0044' 转换为 String:
我们可以使用 select 转换为 44
为 '0044':
select right('0000'+ltrim([a]),4) new_a, b from test12
当我们从csv文件复制数据时,你需要考虑csv文件中的数据是否是Azure SQL database/SQL服务器中的有效数据类型。例如,数据 '2020000000000000' 超出 int 长度。
水槽的设计很重要table。因此,建议您首先在 Azure SQL 数据库中为每一列创建 suitable 数据类型的接收器 table,然后在 Copy active 中手动设置列映射:
映射设置:
管道运行:
SQL数据库中的数据检查:
更新:
现在这个问题已经由 Ramiro Kollmannsperger 自己解决了:
"my sink table in the database has only nvarchar columns. I did this so after a lot of headaches with datatypes and length. I decided that it is easier for me to just do the conversions from nvarchar in the database into a staging table. What helped in the end was to do the schema import in the source Dataset where the csv is read. There is a tab "connection" 和它旁边的另一个选项卡 "schema",您可以在其中导入架构。完成此操作后它起作用了。"
希望对您有所帮助。
我的接收器 table 在数据库中只有 nvarchar 列。 在对数据类型和长度感到头疼之后,我这样做了。
我决定将数据库中的 nvarchar 转换为暂存 table 对我来说更容易。
最终有帮助的是在读取 csv 的源数据集中进行模式导入。 有一个选项卡 "connection",旁边是另一个选项卡 "schema",您可以在其中导入架构。这样做后它起作用了。