首页 文章

U-SQL列类型转换

提问于
浏览
0

我创建了一个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 回答

  • 2

    似乎Id列并不总是Integer类型 .

    我首先将Id列提取为字符串,然后在第二步中,尝试使用用户定义的函数将其转换为Int,如下所示:https://msdn.microsoft.com/en-us/library/azure/mt621309.aspx(基于DateTime的示例) .

    另一个选项是在提取器中使用 silent:true ,因此您会自动忽略转换失败的行 .

相关问题