使用gzip和虚拟列的u-sql问题

Joh*_*ohn 2 azure-data-lake u-sql

我有一个处理压缩文件的u-sql作业有一个奇怪的问题。如果我在普通的csv文件上运行u-sql,则工作正常。但是,如果我对该文件进行gzip压缩,它将不再起作用(生成E_RUNTIME_USER_EXTRACT_ENCODING_ERROR:在顶点的输入拆分中处理0条记录后,发生编码错误。)

所以有效的代码是

DECLARE @path string = "output/{ids}/{*}.csv";

@data =
    EXTRACT
        a string,
        b string,
        c string, 
        d string,
        ids string
    FROM  @path
    USING 
        Extractors.Csv(skipFirstNRows:1, silent: true);

@output = 
    SELECT *
    FROM @data 
    WHERE ids == "test";

OUTPUT @output
TO "output/res.csv"
USING Outputters.Csv(quoting : false, outputHeader: true);
Run Code Online (Sandbox Code Playgroud)

此代码不起作用(文件的gz版本)

DECLARE @path string = "output/{ids}/{*}.csv.gz";

@data =
    EXTRACT
        a string,
        b string,
        c string, 
        d string,
        ids string
    FROM  @path
    USING 
        Extractors.Csv(skipFirstNRows:1, silent: true);

@output = 
    SELECT *
    FROM @data 
    WHERE ids == "test";

OUTPUT @output
TO "output/res.csv"
USING Outputters.Csv(quoting : false, outputHeader: true);
Run Code Online (Sandbox Code Playgroud)

如果删除虚拟列“ ids”,则适用于gz版本

DECLARE @path string = "output/test/{*}.csv.gz";

@data =
    EXTRACT
        a string,
        b string,
        c string, 
        d string
    FROM  @path
    USING 
        Extractors.Csv(skipFirstNRows:1, silent: true);

@output = 
    SELECT *
    FROM @data;

OUTPUT @output
TO "output/res.csv"
USING Outputters.Csv(quoting : false, outputHeader: true);
Run Code Online (Sandbox Code Playgroud)

附件是我正在使用的两个文件。有谁知道发生了什么事吗?如果我删除虚拟列ID,那么两者都适用吗?

test.csv

test.csv.gz

当我对Data Lake Storage中的文件运行时,只会收到此错误。如果我在本地对文件运行,则可以正常工作。

我收到的详细错误是“ internalDiagnostics”:“”-“ innerError”:{“ diagnosticCode”:195887128-“ severity”:“ Error”-“ component”:“ RUNTIME”-“ source”:“ User”-“ errorId “:” E_RUNTIME_USER_EXTRACT_INVALID_CHARACTER“-”消息“:”输入流中的UTF-8编码无效字符。“-”描述“:”发现输入中的UTF-8编码无效字符。输入文件中的字符-或提取器中的编码正确,然后重试。”

小智 5

要添加一些其他问题:

  1. 这是已确认的缺陷。我们已经为此解决了问题,因此无论是否带有@@FeaturesPreview = "FileSetv2Dot5:on"标志,您都不会再遇到该问题。

  2. SET @@FeaturesPreview = "FileSetv2Dot5:on" 上面的标记是正确的解决方法,因为它将强制在不存在缺陷的地方生成不同的计划。

  3. SET @@FeaturesPreview = "FileSetv2Dot5:on" 默认情况下仍处于关闭状态。