csv - Azure 数据工厂转义字符和引用问题 - 复制活动
问题描述
我有 ADF 管道将数据从 Azure SQL db 导出(通过复制活动)到 Data Lake (ADLS2),然后从那里导出到另一个 Azure SQL db。在出现一些字符之前,它工作正常。
这是罪魁祸首记录在第一个 Azure SQL 数据库中的样子:“Gasunie\
这是在 ADF 中设置数据集以将其导出到 ADLS 的方式:列分隔符 - 管道行分隔符 - 自动检测编码 - 默认(UTF-8)转义字符 - 反斜杠()引号字符 - 双引号(“)
这是导出文件在 notepad++ 中的样子(它是管道分隔的文件): "\"Gasunie\" 在此处输入图像描述
这些是 ADF 中的 adls 数据集从 adls 加载到 azure sql db 时的设置:列分隔符 - 逗号行分隔符 - 自动检测编码 - 默认(UTF-8)转义字符 - 反斜杠()引号字符 - 双引号(“)
请注意,它现在以逗号分隔,但这不会导致任何问题。
但这就是它加载后的样子:“Gasunie”|1|||||||||||... 最初存在的反斜杠不知何故导致它停止了接下来几列的定界。 在此处输入图像描述
我已经为引号和转义字符尝试了很多很多不同的设置,但是它们给数据集中的其他数据带来了更多问题。
有谁知道我如何纠正它而不必要求纠正来源?
注意:它存储在 adls 中是有原因的,因此它不能从 Azure sql db 复制到另一个 Azure Sql db。
它是由顾问根据模板构建的,高度参数化,因此插入数据流以处理 adls 中的文件将是一个非常漫长的过程。
任何帮助表示赞赏。谢谢你。
解决方案
我遇到了类似的问题。
我认为发生在你身上的是这样的。
- 数据为 9 个字符,如“Gasunie\
- 输出写为“引用”并使用 \ 作为转义字符。
- 所以输出将是“your_text”,但 your_text 中的任何引号都替换为 \"
- 所以输出是 "\"Gasunie\" - 外部引号包含您的文本,内部引号已用 \ 转义
现在我们重新读一遍:它似乎是这样解析的。
- 第一个引号是您引用的字段值的开头,所以从这里开始我正在阅读您的文本字段值。
- 然后我看到 \" 这是一个引号字符(已被转义)。
- 然后我看到加苏尼
- 然后我看到 \" 这是一个引号字符(已被转义)。
- 然后我看到字段分隔符,但由于我仍然认为我在引用的字段内,所以它们只是文本,所以包含在我的输出“Gasunie”|1|||||||||||...
- 我一直在这个字段中读取字符,直到我到达下一个双引号,此时我期待一个新的分隔符开始下一个字段。
所以问题是 ADF 将引号括住它手头的任何字符串并将其写入输出;在输入时,它从左到右解析,因此任何以转义字符结尾的字符串都是一个问题。我不确定您是否会称其为错误。
你能做什么?
在您的情况下,只需将转义字符更改为您输入中从未见过的内容(可能是 @ 或 { 或其他内容)。然后输出文本末尾的 \" 不再是转义引号。
我的类似情况- 转义字符何时不是转义字符?
我有一个包含逗号的字段,但逗号也是字段分隔符。我的数据来自第三方,他们使用反斜杠轻松地为我转义了这个逗号,因此:
Field One, Field\,Two, Field Three
我有 \ 作为我的转义字符,所以你会认为这会给我三个输出字段:
| Field One | Field,Two | Field Three |
错误的。转义字符仅在引用字段内时才有效。我的输入没有被引用,所以反斜杠被视为文本,逗号是字段分隔符,这意味着我的输出有四个字段
| Field One | Field\ | Two | Field Three |
解决方案:告诉我的 ADF 数据集我的输入周围没有引号字符 - 然后它将逗号后面的任何内容视为文本字段并按预期应用转义字符。
因此,如果您正在寻找“csv 中的转义逗号正在创建额外的字段”,我希望这可以为您节省一点时间!
推荐阅读
- google-apps-script - 复制数据输入表格并在 Google 表格中打印出单独的文件
- c# - 滚动,计数,平均骰子卷
- android-studio - 创建 AVD 时缺少一些 arm64 系统映像
- reactjs - 为什么我的 React 客户端文件夹无法在 Github 上访问?
- r - 如何在 R 中使用非标准评估
- java - Retrofit Android:如何使用 Retrofit MVP 获取 JSON 数据
- python - 尝试使用 pd.df 列值替换同一行中的字符串值,单独的列
- flutter - 如何在颤动中单独从数组中获取值?
- android - 滚动时折叠复杂视图
- java - 如何在命令提示符下在 java 中编译两个文件