我正在加载一个以管道作为分隔符的 CSV 文件,该文件位于 blob 位置,并使用突触管道中的 SP 活动将其加载到临时表

问题描述 投票:0回答:1

管道是元数据驱动的 错误消息是 '[昨天 22:20] mruti Ranjan Dehury 代码”:21104,“消息”:“ErrorCode = DelimitedTextMoreColumnsThanDefined,'类型= Microsoft.DataTransfer.Common.Shared.HybridDeliveryException,消息=处理'Csv / Tsv格式文本'源'PomOP_PRF_Status20240311_033449-00001.txt'时发现错误行数字 11:发现的列数多于预期列数 14。,来源=Microsoft.DataTransfer.Common,'

我已经发现了这个错误,因为它在源数据中是用管道分隔的,它本身在列值中有一个管道。 下面是它的样本

这是该行的值 2307906|1/17 - 桥接产品可能需要获得下次输注的授权第一次输注 11/30/2023 | PA 批准 11/1/2023 它是管道分隔的,我们在元数据表中插入分隔符作为“|” 但下面的部分是一列值,但它占用两列,因为它有一个管道,但它不是分隔符 1/17 - 桥接产品可能需要获得下次输注的授权第一次输注 2023 年 11 月 30 日 | PA 已于 2023 年 11 月 1 日批准

它必须在管道中处理,因为我们无法更改源文件

azure-data-factory etl azure-synapse data-engineering
1个回答
0
投票

由于问题源于源数据在列值中包含管道分隔符,因此它会导致管道将其解释为列分隔符并将列分成两部分。由于您无法更改源文件,因此可以通过以下方式处理此问题。

处理此问题的一种方法是使用支持转义列值中分隔符的文件格式。例如,您可以使用竖线分隔的文件格式并将列值括在双引号中。然后,您可以修改元数据表以使用该文件并指定双引号字符作为文本限定符。

样本数据:

"col1"|"col2"|"col3"
"A"|"1"|"3"
"B|C"|"2"|"3"

在此示例数据中,第 3 行数据本身中有一个管道符号。当数据用双引号括起来时,可以使用双引号作为引号字符。

如果您没有引用随附的数据,那么您可以按照以下方法操作。

处理此问题的另一种方法是使用复制活动中的容错功能。此功能允许您在复制过程中检测、跳过和记录不兼容的表格数据。包含预期列数的行已成功复制到接收器存储,而包含超过预期列数的行被检测为不兼容,并根据配置被跳过和记录。

  • 在复制活动设置中,选择
    skip incompatible rows
    作为容错
  • 选中启用日志记录复选框。
  • 从下拉列表中给出存储连接名称,以记录跳过的行。

您可以手动或通过其他进程修复存储帐户中记录的不兼容行,并通过管道重新处理它们。

© www.soinside.com 2019 - 2024. All rights reserved.