使用gzip和虚拟列

时间:2017-07-25 16:23:50

标签: 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);

此代码不起作用(文件的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);

如果我删除虚拟列" 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);

附件是我正在使用的两个文件。有没有人知道发生了什么? 如果我删除了虚拟列id,它适用于两者?

test.csv

test.csv.gz

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

我收到的详细错误是 " internalDiagnostics":"" - " innerError" {" diagnosticCode":195887128 - "严重性":&# 34;错误" - "组分":" RUNTIME" - "源":"用户" - " ErrorID中&#34 ;:" E_RUNTIME_USER_EXTRACT_INVALID_CHARACTER" - " message":"输入流中UTF-8编码的字符无效。" - "说明":& #34;在输入中找到UTF-8编码的无效字符。" - " resolution":"更正输入文件中的无效字符 - 或在提取器中更正正确的编码,然后重试。 "

2 个答案:

答案 0 :(得分:4)

要添加一些额外的问题:

  1. 这是一个确认的缺陷。我们已为此部署了一个修复程序,因此您不应再遇到问题,无论是否有@@FeaturesPreview = "FileSetv2Dot5:on"标记。

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

  4. SET @@FeaturesPreview = "FileSetv2Dot5:on"默认仍处于关闭状态。

答案 1 :(得分:1)

我遇到了完全相同的问题。似乎是ADLA新运行时中的一个错误。 MS正在努力。这个修复对我有用:

SET @@FeaturePreviews = "FileSetV2Dot5:on";