USQL转义报价

时间:2018-07-09 13:59:34

标签: double double-quotes u-sql

我是Azure数据湖分析的新手,我正在尝试加载csv,该csv用双引号表示,并且某些随机行的列中有引号。

例如

ID, BookName
1, "Life of Pi"
2, "Story about "Mr X""

当我尝试加载时,它在第二条记录上失败并抛出错误消息。 1,我想知道是否有办法在csv文件中解决此问题,但是很遗憾,由于这些是日志文件,我们无法从源代码中提取新文件?
2,是否可以让ADLA忽略不良行并继续处理其余记录?

  

执行失败,出现错误'1_SV1_Extract错误:   '{“ diagnosticCode”:195887146,“严重性”:“错误”,“组件”:“ RUNTIME”,“源”:“用户”,“ errorId”:“ E_RUNTIME_USER_EXTRACT_ROW_ERROR”,“消息”:“错误   在处理9045条记录后提取行时发生   顶点的输入分割。列索引:9,列名:   'instancename'。“,” description“:”“,” resolution“:”“,” helpLink“:”“,” details“:”“,” internalDiagnostics“:”“,” innerError“:{” diagnosticCode“: 195887144,“严重性”:“错误”,“组件”:“ RUNTIME”,“源”:“用户”,“ errorId”:“ E_RUNTIME_USER_EXTRACT_EXTRACT_INVALID_CHARACTER_AFTER_QUOTED_FIELD”,“消息”:“无效   引号中结尾引号后面的字符   字段。“,”描述“:”在   带引号的字段中的结束引号字符。列定界符,行   定界符或EOF预期。\ n如果双引号引起此错误   内的字段未正确转义为两个   双引号。“,” resolution“:”列应完全用   字段中的双引号和双引号转为两个   双引号。”

1 个答案:

答案 0 :(得分:1)

根据错误消息,如果要导入带引号的csv(在某些列中包含引号),则需要将其转义为两个双引号。在您的特定示例中,第二行需要为:

..."Life after death and ""good death"" models - a qualitative study",...

因此,一种选择是修复输出中的原始文件。如果您无法执行此操作,则可以将所有列导入为一列,使用RegEx固定引号并再次输出文件,例如

// Import records as one row then use RegEx to clean columns
@input =
    EXTRACT oneCol string
    FROM "/input/input132.csv"
    USING Extractors.Text( '|', quoting: false );


// Fix up the quotes using RegEx
@output =
    SELECT Regex.Replace(oneCol, "([^,])\"([^,])", "$1\"\"$2") AS cleanCol
    FROM @input;    

OUTPUT @output
TO "/output/output.csv"
USING Outputters.Csv(quoting : false);

文件现在将成功导入。我的结果:

My results

相关问题