U-SQL 子字符串超出范围异常



我们尝试在 ADLA 中使用 U-SQL 从表中发布数据。我们使用以下代码来获取 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;
        }

我们无法找出错误行。当我们查看配置文件.xml时,我们没有得到行转储。

用户表达式的内部异常:当前行 转储:">

如何找出导致此异常的错误行?如何解决这类问题?

为了测试,我使用了 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

相关内容

  • 没有找到相关文章

最新更新