U-SQL 数据类型转换

U-SQL DataType conversion

我的示例数据中有一列包含 1 或 0 或 "null"。 由于 "null" 字符串,我已将列的类型声明为字符串。 在下一个操作中,我只取 1 和 0 并执行 SUM(Value),我得到错误无法从 "string" 转换为 "long?"

SUM 函数适用于数字类型,所以尝试像这样的 SUM(ToInt64(VALUE))

您可以按照 here 所述使用和内联函数表达式。这是一个简单的例子:

@input = 
    SELECT * FROM
        ( VALUES
            ( (string)"0" ),
            ( (string)"1" ),
          ( (string)"null")
        ) AS x( yourCol );


@output =
    SELECT y
    FROM
    (
    SELECT (
           (Func<string, int?>)
           (yourString =>
               {
               int yourInt;
               return int.TryParse(yourString, out yourInt) ? (int?) yourInt : (int?) null;
               }
           )
           ) (yourCol) AS y
    FROM @input
    ) AS x
    WHERE y IS NOT NULL;

OUTPUT @output
TO "/output/output.csv"
USING Outputters.Csv();

我的结果:

对于这个问题的另一种方法,你可以做这样的事情。我建议列名称为 "amount":

@输入= SELECT CASE 列 WHEN 金额 THEN "0" ELSE 金额 END AS 金额 来自@extractedFields

@sum= SELECT SUM(Int32.Parse(金额)) 来自@input

通过这种方法,求和的输入将只考虑带有 1 和 0 的元素。