【问题标题】:ADF Copy Activity Failing Source REST, SINK SQLMI database. Invalid Column Length from the bcp client error?ADF 复制活动失败源 REST、SINK SQLMI 数据库。 bcp 客户端错误中的无效列长度?
【发布时间】:2021-10-23 16:34:41
【问题描述】:

我正在尝试对我创建的具有复制数据活动的管道进行故障排除。源是 REST API,接收器是 Azure SQL 托管实例。我设置了分页规则,以便它遍历数据并将其全部读取,但管道失败。如果我关闭分页并且只读取前 100 行它不会失败并将前 100 行下沉到数据库。

这是我的错误: ErrorCode=SqlOperationFailed,'Type=Microsoft.DataTransfer.Common.Shared.HybridDeliveryException,Message=数据库操作失败。请搜索错误以获取更多详细信息。,Source=Microsoft.DataTransfer.ClientLibrary,''Type=System.Data.SqlClient.SqlException,Message=从 bcp 客户端收到无效的列长度为 colid 20.,Source=.Net SqlClient Data Provider,SqlErrorNumber=4815,Class=17,ErrorCode=-2146232060,State=1,Errors=[{Class=17,Number=4815,State=1,Message=从 bcp 客户端接收到 colid 20 的无效列长度.,},],'

我的问题是,它说,colid 20。那个 colid 20 来自我的管道中的 Mappings 选项卡中的映射,还是 REST API 返回的 colid 20?有没有办法找出导致问题的字段/值,错误似乎太模糊而无济于事!如果源字段比此复制活动的映射中的数据库表数据类型长,是否可以截断源字段?

【问题讨论】:

  • 也许你可以把你的问题分成两半。如果您选择不同的水槽,它仍然会失败,例如到 Azure 存储作为文件。也许你可以检查文件是否包含不寻常的东西。
  • 问题可能是第 20 列中的数据比预期的大,请参阅stackoverflow.com/questions/10442686/… 了解类似问题。
  • 如果您想查看 REST API 返回的内容,您可以使用管道中的 Web 活动来进行调试。确保您发出与 Copy 活动相同的调用。 API 输出将出现在 ADF 的输出选项卡中,假设此错误不是来自 API 本身,在这种情况下您将看不到任何内容。您也可以使用 Postman 之类的客户端,或者只是在浏览器中调用它,具体取决于 API。

标签: azure-pipelines azure-data-factory


【解决方案1】:

您的第一个问题是确定导致此问题的列。

正如以下错误消息所暗示的,看起来问题出在源列。

Message=Received an invalid column length from the bcp client for colid 20

您的第二个问题是,如何更改 ADF 中的列。

要更改数据集的列,请使用 Dataflow。

这里可以使用 Derived 列和 Select 语句,如下所示

在派生列中,您可以更改数据类型,也可以在表达式生成器中探索许多选项。

这里我已将 Column Salary 的数据类型从 int 更改为 String

按照cmets中Koen的建议,请通过这个link一次

【讨论】:

    猜你喜欢
    • 2012-05-13
    • 1970-01-01
    • 2019-05-12
    • 2019-11-22
    • 1970-01-01
    • 1970-01-01
    • 2021-06-25
    • 1970-01-01
    • 2021-07-25
    相关资源
    最近更新 更多