首页 > 解决方案 > 无法使用 U-SQL 提取简单的 Csv 文件

问题描述

我有这个 csv 文件,几乎所有的记录都得到了很好的处理,但是有两种情况我遇到了问题。

案例 1: 引号中包含引号的记录:

"some data "some data" some data"

案例 2: 引号内包含逗号的记录:

"some data, some data some data"

我已经研究了这个问题,并设法研究了提取器的引用参数,但我观察到设置(quoting:false)解决了案例 1 并且对于案例 2 失败并且设置(quoting:true)解决了案例 2 但是案例1失败。

约束:没有更改数据文件的空间,未来的数据将相应地调整,但对于这个现有数据,我必须解决这个问题。

标签: csvextractionazure-data-lakeu-sql

解决方案


试试这个,将记录作为一行导入并使用双引号修复行文本(对逗号做同样的事情):

DECLARE @input string = @"/Samples/Data/Sample1.csv";
DECLARE @output string = @"/Output/Sample1.txt";

// Import records as one row

@data =
    EXTRACT rowastext string
    FROM @input
    USING Extractors.Text('\n', quoting: false );

// Fix the row text using double quotes

@query =
    SELECT Regex.Replace(rowastext, "([^,])\"([^,])", "$1\"\"$2") AS rowascsv
    FROM @data;    

OUTPUT @query
TO @output
USING Outputters.Csv(quoting : false);

推荐阅读