我创建了一个U-SQL查询,它从DataLake Store获取输入文件并转换值 . 最终输出存储在DataLake Store中 .
DECLARE @in string = "system/dbotable{*}.tsv";
DECLARE @out string ="system/temp.tsv";
@searchlog =
EXTRACT
Id int,
Address string,
number int
FROM @in
USING Extractors.Tsv();
@transactions =
SELECT
*,
ROW_NUMBER()
OVER(PARTITION BY Id ORDER BY Id DESC) AS RowNumber
FROM @searchlog;
@result =
SELECT
Id ,
Address,
number
FROM @transactions
WHERE RowNumber == 1;
OUTPUT @result
TO @out
USING Outputters.Tsv();
它显示以下错误,
执行失败,错误为'1_SV1_Extract错误:'{“diagnosticCode”:195887132,“severity”:“错误”,“组件”:“RUNTIME”,“source”:“User”,“errorId”:“E_RUNTIME_USER_EXTRACT_COLUMN_CONVERSION_INVALID_ERROR”,“消息“:”尝试转换列数据时无效字符 . “,”description“:”HEX:\“2243616E696E6522 \”转换输入记录时字符无效 . \ n位置:第1行,列索引:1,列名:\“ Id \“ . ”,“resolution”:“检查输入是否有错误或使用\”silent \“切换忽略输入中的over(under)-sized行 . \ n忽略”无效“行可能会影响作业结果和类型必须可以为空,以便忽略转换错误 . “,”helpLink“:”“
1 回答
似乎Id列并不总是Integer类型 .
我首先将Id列提取为字符串,然后在第二步中,尝试使用用户定义的函数将其转换为Int,如下所示:https://msdn.microsoft.com/en-us/library/azure/mt621309.aspx(基于DateTime的示例) .
另一个选项是在提取器中使用
silent:true
,因此您会自动忽略转换失败的行 .