【问题标题】:U-SQL splitting a column into two, delimited by "-"U-SQL 将一列一分为二,用“-”分隔
【发布时间】:2018-01-08 15:13:15
【问题描述】:

我正在尝试通过在数据湖分析中使用 U-SQL 将一列拆分为两列。在 SQL 中可以这样做:

    ,CASE WHEN [Total] like '%-%' 
        THEN TRIM(LEFT([Total],CHARINDEX('-',[Total]) - 1)) END AS [TotalLeft]
    ,TRIM(REPLACE(SUBSTRING([Total],CHARINDEX('-',[Total]),LEN([Total])),'-','')) AS TotalRight

我在U-SQL中尝试过类似的东西,但是U-SQL中似乎不存在LEFT。

([Total] LIKE "%-%") ? Left([Total].IndexOf("-"), 1).Trim                   : 0 AS TotalLeft,

我阅读了有关使用数组和 EXPLODE 的信息,但这似乎只是将其拆分为更多行而不是列。

此外,我正在考虑使用 EXTRACT 并将分隔符设置为“-”,但这似乎也不是一个选项。

有人对如何有效解决这个问题有任何想法吗?谢谢!

【问题讨论】:

    标签: c# sql split azure-data-lake u-sql


    【解决方案1】:

    这是使用Split 的替代方法。对我来说感觉稍微简单一些,但做事的方法总是不止一种。您不需要使用EXPLODE,除非您希望元素显示为行。如果您要拆分的项目超过两个,则扩展起来会更容易,感谢 David 提供的示例查询,我已重用。

    @data =
        SELECT *
        FROM(
            VALUES
            ( "12-34" )
        ) AS T(col1);
    
    
    @result =
        SELECT array[0] AS totalLeft,
               array[1] AS totalRight
        FROM
            (
                SELECT new SQL.ARRAY<string>(col1.Split('-')) AS array
                FROM @data
            ) AS x;
    
    
    OUTPUT @result
    TO "/output/result.txt"
    USING Outputters.Tsv();
    

    【讨论】:

    • 两个竖起大拇指!!
    • 太好了,我没想到会这么快回复。非常感谢你们!
    【解决方案2】:

    这应该可以帮助您入门。另请参阅C# Functions and Operators (U-SQL)

    @data = 
    SELECT * FROM 
        ( VALUES
        ("12-34")
        ) AS T(col1);
    
    @result =
        SELECT 
        col1.Substring(0, col1.IndexOf("-")) AS totalLeft,
        col1.Substring(col1.IndexOf("-")+1) AS totalRight
    FROM @data;
    
    OUTPUT @result
    TO "/Test/result.txt"
    USING Outputters.Tsv();
    

    【讨论】:

    • 太好了,我没想到会这么快回复。非常感谢你们!
    【解决方案3】:

    只需在这里加上我的两分钱。 还有一个更短的版本。

    @data = 
    SELECT * FROM 
        ( VALUES
        ("12-34")
        ) AS T(col1);
    
    @result =
        SELECT 
        col1.Split('-')[0] AS totalLeft,
        col1.Split('-')[1] AS totalRight
    FROM @data;
    
    OUTPUT @result
    TO "/Test/result.txt"
    USING Outputters.Tsv();
    

    【讨论】:

      猜你喜欢
      • 2015-04-27
      • 2022-01-01
      • 2021-10-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多