在数据工厂中映射数据流时出现无转义字符错误
Error with No Escape Character in Mapping Data Flow in Data Factory
TLDR:为什么 Azure 数据工厂数据流不允许您没有转义符?
我们有来自不太可能在其端更新它的源的错误源数据(这是我能表达的最好的方式)。他们有多个列,其中列中的值为 01F\ 或 8239\ 并且反斜杠在其规范中写入为值的一部分,而不是像在整个世界中标准化的那样被视为转义字符。
文件的总体设置是它们以逗号分隔,每一列的内容都在“”中,我们有所有正常的换行符。只是不符合标准的反斜杠。例如
"Column 1","Column 2","Column 3","Column 4"
"John","01F\","34","NY"
"Jane","3K","8239\","CA"
|---------------------|------------------|------------------|------------------|
| Column 1 | Column 2 | Column 3 | Column 4 |
|---------------------|------------------|------------------|------------------|
| "John" | "01F\" | "34" | "NY" |
|---------------------|------------------|------------------|------------------|
| "Jane" | "3K" | "8239\" | "CA" |
|---------------------|------------------|------------------|------------------|
在 Azure 数据工厂中,我们正在尝试查看是否可以让它忽略 \ 作为转义字符。 (仅供参考,当我们将其视为转义字符时,它会将该列紧跟在带有反斜杠的列之后并入一列中)。我们可以在数据集中看到在哪里设置它,这样就没有转义符了。
然而,当我们将该数据集添加到我们的数据流并尝试在那里预览数据时,我们得到一个错误,我们不能在数据流中没有转义字符,引号字符应该是 no当我们没有转义字符时引用字符。
如果我们尝试返回并且不设置引号字符(我们实际上并不想这样做,只是为了测试它是否会起作用),我们会收到一个错误,表明数据流无法'没有转义字符或引号字符。
如果这两个选项在 Azure 数据工厂中不起作用,那么提供这两个选项的目的是什么?或者我们是否需要在其他地方更新其他设置才能使其正常工作?
谢谢!!
编辑:我忘了提及我们还尝试查看是否可以替换数据流列映射部分中的反斜杠。我们尝试使用 replace() 函数,但无法使其正常工作(不断出现语法错误)。
ORIGINAL working code for column: trim(toString($$))
ATTEMPTED WORKAROUNDS:
replace(trim(toString($$)),'\','-')
trim(replace(toString($$),'\','-')
trim(toString(replace($$),'\','-'))
对于 'Delimited Text' 来源,它不允许您 select 用 'No escape character' 引用字符。您可以尝试解决方法选项
- 如果您的目标是 Azure Synapse,请尝试使用 Polybase 加载。 (它将加载带有转义序列和引号字符的数据。数据加载后,您可以进行清理。)
- 如果可能,将源数据格式从 'Delimited Text' 转换为 'parquet' 或 'Json'
我只是想分享一下,Microsoft 论坛上的一位用户提供了一个最终有效的答案。
我们在数据集设置中将转义字符从 \ 更改为 ^(仅在确认 ^ 字符未在任何地方以任何方式使用后才这样做)。我们没有在列的映射中应用替换函数,因为不幸的是我们需要在这些列中保留 \ 字符。但它奏效了,我们的数据现在按照我们需要的方式流动(尽管这些不是数据管理的最佳实践)。
TLDR:为什么 Azure 数据工厂数据流不允许您没有转义符?
我们有来自不太可能在其端更新它的源的错误源数据(这是我能表达的最好的方式)。他们有多个列,其中列中的值为 01F\ 或 8239\ 并且反斜杠在其规范中写入为值的一部分,而不是像在整个世界中标准化的那样被视为转义字符。
文件的总体设置是它们以逗号分隔,每一列的内容都在“”中,我们有所有正常的换行符。只是不符合标准的反斜杠。例如
"Column 1","Column 2","Column 3","Column 4"
"John","01F\","34","NY"
"Jane","3K","8239\","CA"
|---------------------|------------------|------------------|------------------|
| Column 1 | Column 2 | Column 3 | Column 4 |
|---------------------|------------------|------------------|------------------|
| "John" | "01F\" | "34" | "NY" |
|---------------------|------------------|------------------|------------------|
| "Jane" | "3K" | "8239\" | "CA" |
|---------------------|------------------|------------------|------------------|
在 Azure 数据工厂中,我们正在尝试查看是否可以让它忽略 \ 作为转义字符。 (仅供参考,当我们将其视为转义字符时,它会将该列紧跟在带有反斜杠的列之后并入一列中)。我们可以在数据集中看到在哪里设置它,这样就没有转义符了。
然而,当我们将该数据集添加到我们的数据流并尝试在那里预览数据时,我们得到一个错误,我们不能在数据流中没有转义字符,引号字符应该是 no当我们没有转义字符时引用字符。
如果我们尝试返回并且不设置引号字符(我们实际上并不想这样做,只是为了测试它是否会起作用),我们会收到一个错误,表明数据流无法'没有转义字符或引号字符。
如果这两个选项在 Azure 数据工厂中不起作用,那么提供这两个选项的目的是什么?或者我们是否需要在其他地方更新其他设置才能使其正常工作?
谢谢!!
编辑:我忘了提及我们还尝试查看是否可以替换数据流列映射部分中的反斜杠。我们尝试使用 replace() 函数,但无法使其正常工作(不断出现语法错误)。
ORIGINAL working code for column: trim(toString($$))
ATTEMPTED WORKAROUNDS:
replace(trim(toString($$)),'\','-')
trim(replace(toString($$),'\','-')
trim(toString(replace($$),'\','-'))
对于 'Delimited Text' 来源,它不允许您 select 用 'No escape character' 引用字符。您可以尝试解决方法选项
- 如果您的目标是 Azure Synapse,请尝试使用 Polybase 加载。 (它将加载带有转义序列和引号字符的数据。数据加载后,您可以进行清理。)
- 如果可能,将源数据格式从 'Delimited Text' 转换为 'parquet' 或 'Json'
我只是想分享一下,Microsoft 论坛上的一位用户提供了一个最终有效的答案。
我们在数据集设置中将转义字符从 \ 更改为 ^(仅在确认 ^ 字符未在任何地方以任何方式使用后才这样做)。我们没有在列的映射中应用替换函数,因为不幸的是我们需要在这些列中保留 \ 字符。但它奏效了,我们的数据现在按照我们需要的方式流动(尽管这些不是数据管理的最佳实践)。