我对处理压缩文件的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,它适用于两者?
当我对Data Lake Storage中的文件运行时,我只收到此错误 . 如果我在本地运行文件它工作正常 .
我收到的详细错误是“internalDiagnostics”:“” - “innerError”:{“diagnosticCode”:195887128-“severity”:“Error” - “component”:“RUNTIME” - “source”:“User” - “errorId “:”E_RUNTIME_USER_EXTRACT_INVALID_CHARACTER“ - ”message“:”输入流中UTF-8编码的字符无效 . “ - ”description“:”在输入中找到UTF-8编码的无效字符 . “ - ”resolution“:”更正无效输入文件中的字符 - 或提取器中的正确编码,然后重试 . “
2 回答
要添加一些额外的问题:
@@FeaturesPreview = "FileSetv2Dot5:on"
标志 .上面的
SET @@FeaturesPreview = "FileSetv2Dot5:on"
标志是正确的解决方法,因为它将强制生成不存在缺陷的不同计划 .SET @@FeaturesPreview = "FileSetv2Dot5:on"
默认仍处于关闭状态 .我遇到了完全相同的问题 . 似乎是ADLA新运行时中的一个错误 . MS正在努力 . 这个修复对我有用: