【问题标题】:U-SQL Column Type ConvertionU-SQL 列类型转换
【发布时间】:2017-07-25 06:11:36
【问题描述】:

我创建了一个 U-SQL 查询,它从 DataLake 存储中获取输入文件并转换值。最终输出存储在 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":"Error","component":"RUNTIME","source":"User","errorId":"E_RUNTIME_USER_EXTRACT_COLUMN_CONVERSION_INVALID_ERROR" ,"message":"尝试转换列数据时出现无效字符。","description":"HEX: \"2243616E696E6522\" 转换输入记录时出现无效字符。\n位置:第 1 行,列索引:1,列名: \"Id\".","re​​solution":"检查输入是否有错误或使用 \"silent\" 开关忽略输入中过(过)大小的行。\n考虑忽略 \"invalid\" 行可能影响作业结果,并且类型必须可以为空才能忽略转换错误。","helpLink":""

【问题讨论】:

  • 输入文件是否有需要跳过的标题?你能展示一些示例数据吗?

标签: azure-data-lake u-sql


【解决方案1】:

Id 列似乎并不总是整数类型

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

另一种选择是在您的提取器中使用silent:true,这样您就会自动忽略转换失败的行。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-05-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-09
    • 2017-03-03
    • 1970-01-01
    相关资源
    最近更新 更多