csv - Azure 数据工厂转义字符和引用问题 - 复制事件

标签 csv escaping azure-data-factory quotes copy-activity

我有 ADF 管道将数据从 Azure SQL DB 导出(通过复制事件)到 Data Lake (ADLS2),然后从那里导出到另一个 Azure SQL DB。在出现一些字符之前它工作正常。

这是罪魁祸首记录在第一个 Azure SQL 数据库中的样子: "加苏涅\

enter image description here

这是在 ADF 中设置数据集以将其导出到 ADLS 的方式: 列分隔符 - 管道 行分隔符 - 自动检测 编码 - 默认 (UTF-8) 转义字符 - 反斜杠() 引号字符 - 双引号 (")

enter image description here

导出的文件在 notepad++ 中是这样的(它是一个竖线分隔的文件): “”加苏尼“

enter image description here

这些是将 ADF 中的 adls 数据集从 adls 加载到 azure SQL DB 时的设置: 列分隔符 - 逗号 行分隔符 - 自动检测 编码 - 默认 (UTF-8) 转义字符 - 反斜杠() 引号字符 - 双引号 (")

请注意,它现在是逗号分隔的,但这不会导致任何问题。

enter image description here

但这是加载后的样子: “加苏涅”|1|||||||||||... 最初存在的反斜杠以某种方式导致它停止对接下来的几列进行定界。

enter image description here

我为引号和转义字符尝试了很多很多不同的设置,但它们会给数据集中的其他数据带来更多问题。

有谁知道如何在不要求更正源的情况下更正它?

注意:它存储在 adls 中是有原因的,因此它不能从 Azure sql DB 复制到另一个 Azure Sql DB。

它是由顾问根据模板构建的,并且高度参数化,因此插入数据流以处理 adls 中的文件将是一个非常漫长的过程。

感谢任何帮助。谢谢。

最佳答案

我遇到了类似的问题。

我认为发生在你身上的是这个。

  • 数据是9个字符,比如"Gasunie\
  • 输出被写成“引号”并使用\作为转义字符。
  • 因此输出将是“your_text”,但 your_text 中的任何引号都将替换为\"
  • 所以输出是 "\"Gasunie\"- 外面的引号将你的文本和 里面的一个已经用\
  • 转义了

现在我们回来读这个:它似乎是这样解析的。

  • 第一个引号是您引用的字段值的开头,因此从这里开始我将读取您的文本字段值。
  • 然后我看到\"这是一个引号字符(已被转义)。
  • 然后我看到了 Gasunie
  • 然后我看到\"这是一个引号字符(已被转义)。
  • 然后我看到字段分隔符,但因为我仍然认为我在引用字段中,所以它们只是文本,因此包含在我的输出中 "Gasunie"|1||||||||||| ...
  • 我一直在这个字段中读取字符,直到到达下一个双引号,此时我期待一个新的定界符开始下一个字段。

所以问题是 ADF 将引号放在手头的任何字符串周围并将其写入输出;在输入时,它从左到右进行解析,因此任何以转义字符结尾的字符串都是一个问题。我不确定您是否会称其为错误。

你能做什么?

在您的情况下,只需将转义字符更改为您输入中从未见过的字符(可能是 @ 或 { 或其他字符)。然后输出文本末尾的\"不再是转义引号。

我的类似案例 - 什么时候转义字符不是转义字符?

我有一个包含逗号的字段,但逗号也是字段分隔符。我的数据来自第三方,他们使用反斜杠轻松地为我转义了这个逗号,因此:

字段一,字段\,二,字段三

我有\作为我的转义符,所以你会认为这会给我三个输出字段:

|现场一 |场,二 |字段三 |

错了。转义字符仅在引用字段内时才有效。我的输入未被引用,因此反斜杠仅被视为文本,逗号是字段分隔符,这意味着我的输出有四个字段

|现场一 |字段\|两个 |字段三 |

解决方案:告诉我的 ADF 数据集我的输入周围没有引号字符 - 然后它将逗号后的任何内容视为文本字段并按预期应用转义字符。

enter image description here

您可能也对此感兴趣 https://feedback.azure.com/forums/270578-data-factory/suggestions/35482144-text-format-escape-char-only-if-needed-or-per-fiel .

因此,如果您正在寻找“csv 中的转义逗号正在创建额外的字段”,我希望这能为您节省一些时间!

关于csv - Azure 数据工厂转义字符和引用问题 - 复制事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61593352/

相关文章:

python - 如何在检查重复行标题和共同添加新数据时合并多个 csv 文件

c - 在 .csv 文件中搜索 C 中的名称匹配项

java - 如何在JAVA中使用转义序列

python - 如何防止 Django 模板中的自动转义?

python - 对 python3 中\b(退格)后面发生的事情感到困惑

powershell - “Set-AzureRmDataFactoryV2”未被识别为 cmdlet 的名称

python - 自动更新 CSV 文件

java - 移动文件后找不到 FlatFileItemReader 的资源

azure - 使用 Azure 数据工厂仅复制特定扩展 blob

azure - ADF - HTTP API - 管道查询、排序/orderby 语法?