U-SQL 子串越界异常
U-SQL Substring out of range exception
我们正在尝试使用 ADLA 中的 U-SQL 从 table 发布数据。我们使用以下代码获取 FirstName 的子字符串,因为我们希望将 FirstName 的长度限制为 50 个字符。
SELECT (firstName == null || firstName.Length <= 50) ? firstName : firstName.Substring(0, 50) AS FirstName
但是,我们遇到以下错误:
E_RUNTIME_USER_EXPRESSION_EVALUATION >
E_RUNTIME_USER_SUBSTRING_OUT_RANGE
当我们尝试使用自定义 .NET 代码执行子字符串时,我们没有遇到异常。作业正在成功完成。我们没有收到任何错误行。
public static string DoSubString(string firstName)
{
string subFirstName;
try
{
subFirstName = (firstName == null || firstName.Length <= 50) ? firstName : firstName.Substring(0, 50);
}
catch(ArgumentOutOfRangeException ae)
{
subFirstName = string.Format("Argument Out of range Error {0} {1}",firstName,ae.Message);
}
catch(Exception Ex)
{
subFirstName = string.Format("Generic Error {0} {1}",firstName, Ex.Message);
}
return subFirstName;
}
我们无法找出错误行。当我们查看 Profile.xml 时,我们没有得到行转储。
Inner exception from user expression: \nCurrent row
dump: "
如何找出导致此异常的错误行?如何解决此类问题?
为了测试,我使用了 10 个字符,修改为 50 个。
@table =
SELECT * FROM
( VALUES
("appleJackss"),
("apple Jacks"),
("appleJacks"),
(" "),
(""),
((string)null)
) AS T(word);
@result =
SELECT //Method 1
CASE
WHEN word.Length <= 10 THEN word
ELSE word.Substring(0, 10)
END AS justTen,
// Method 2
(word.Length <= 10) ? word : word.Substring(0, 10) AS anotherTen
FROM @table;
OUTPUT @result
TO "/Temp/Example1.txt"
USING Outputters.Tsv();
我们提出了产品组的问题。 U-SQL中的子串操作好像有问题。他们要求我们将以下修复程序应用于子字符串计算。我们试过了,它工作正常。
SELECT (firstName == null || firstName.Length <= 50) ? firstName : firstName.Substring(0, Math.Min(firstName.Length, 50)) AS FirstName
我们正在尝试使用 ADLA 中的 U-SQL 从 table 发布数据。我们使用以下代码获取 FirstName 的子字符串,因为我们希望将 FirstName 的长度限制为 50 个字符。
SELECT (firstName == null || firstName.Length <= 50) ? firstName : firstName.Substring(0, 50) AS FirstName
但是,我们遇到以下错误:
E_RUNTIME_USER_EXPRESSION_EVALUATION > E_RUNTIME_USER_SUBSTRING_OUT_RANGE
当我们尝试使用自定义 .NET 代码执行子字符串时,我们没有遇到异常。作业正在成功完成。我们没有收到任何错误行。
public static string DoSubString(string firstName)
{
string subFirstName;
try
{
subFirstName = (firstName == null || firstName.Length <= 50) ? firstName : firstName.Substring(0, 50);
}
catch(ArgumentOutOfRangeException ae)
{
subFirstName = string.Format("Argument Out of range Error {0} {1}",firstName,ae.Message);
}
catch(Exception Ex)
{
subFirstName = string.Format("Generic Error {0} {1}",firstName, Ex.Message);
}
return subFirstName;
}
我们无法找出错误行。当我们查看 Profile.xml 时,我们没有得到行转储。
Inner exception from user expression: \nCurrent row dump: "
如何找出导致此异常的错误行?如何解决此类问题?
为了测试,我使用了 10 个字符,修改为 50 个。
@table =
SELECT * FROM
( VALUES
("appleJackss"),
("apple Jacks"),
("appleJacks"),
(" "),
(""),
((string)null)
) AS T(word);
@result =
SELECT //Method 1
CASE
WHEN word.Length <= 10 THEN word
ELSE word.Substring(0, 10)
END AS justTen,
// Method 2
(word.Length <= 10) ? word : word.Substring(0, 10) AS anotherTen
FROM @table;
OUTPUT @result
TO "/Temp/Example1.txt"
USING Outputters.Tsv();
我们提出了产品组的问题。 U-SQL中的子串操作好像有问题。他们要求我们将以下修复程序应用于子字符串计算。我们试过了,它工作正常。
SELECT (firstName == null || firstName.Length <= 50) ? firstName : firstName.Substring(0, Math.Min(firstName.Length, 50)) AS FirstName