3

我正在构建我的第一个数据工厂管道,一个非常基本的管道。我有一个只有源(csv 平面文件)和接收器(突触表)的数据流。

源有 12 列。因此,我在 Synapse(通过 SSMS)中创建了一个表,其中所有 12 列都为 varchar。没有钥匙。只是一张基本的桌子。当我构建数据流活动时,源和目标上的数据预览看起来都很完美。但是当我尝试运行(调试)管道时,它只是失败并出现以下错误:

Operation on target load_sales_data failed: {"StatusCode":"DFExecutorUserError",
"Message":"at Sink 'Sales': java.sql.BatchUpdateException: 
[Microsoft][ODBC Driver 17 for SQL Server][SQL Server]String or binary data would be truncated.
 ","Details":"at Sink 'Sales': java.sql.BatchUpdateException: 
[Microsoft][ODBC Driver 17 for SQL Server][SQL Server]String or binary data would be truncated. "}

我只是不明白。我花了很多时间试图找出问题所在,但我就是不明白。有人可以告诉我我做错了什么吗?

4

1 回答 1

2

您的列长度太短,无法将 csv 列中的数据放入数据库表中。检查您是否为 varchar 列指定了合适的字段长度。请注意,默认长度为一个字符。varchar 数据类型的文档说varchar(n)

如果在数据定义或变量声明语句中未指定 n,则默认长度为 1。

如果您指定了长度,请仔细检查 csv 中的数据是否包含太长的值。

字段分隔符不匹配可能会导致 ADF 将整行视为第一个字段的值,并且它会比您预期的要长。检查 csv 源的字段分隔符设置。您可以在 ADF 中预览 Azure 门户中的表数据,以验证它是否正确地看到了 csv 结构。

微软文档中的更多信息https://docs.microsoft.com/en-us/sql/t-sql/data-types/char-and-varchar-transact-sql

于 2020-06-12T18:40:45.583 回答