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 的元素。
我的示例数据中有一列包含 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 的元素。