【问题标题】:Athena- extract substring from string - comma delimited雅典娜 - 从字符串中提取子字符串 - 逗号分隔
【发布时间】:2021-09-28 19:37:28
【问题描述】:

我想从 Athena 表创建 Athena 视图。

在表中,列值是“姓氏,名字”,所以我想将这些值提取为“姓氏”和“名字”,然后需要将其存储到视图中的单独列中。示例 - 名字需要存储到新列 - 'first_name' 和姓氏需要存储到新列 - 'last_name'

我可以在这里使用什么 SQL 函数?我尝试了 split 函数,但它给了我一个数组。

【问题讨论】:

    标签: amazon-web-services amazon-athena presto trino


    【解决方案1】:

    假设输入字符串具有固定且已知数量的元素,您可以执行以下操作:

    WITH data(value) AS (
        VALUES ('Aaa,Bbb')
    )
    SELECT elements[1], elements[2]
    FROM (
        SELECT split(value, ',') AS elements
        FROM data
    )
    

    =>

     _col0 | _col1
    -------+-------
     Aaa   | Bbb
    (1 row)
    

    【讨论】:

      【解决方案2】:

      您可以在拆分结果上使用UNNEST

      WITH dataset AS (
          SELECT * FROM (VALUES   
             ('aaa,bbb'),
             ('aaa1,bbb1')
       ) AS t (str))
      
      
      SELECT str_col
      FROM dataset
      CROSS JOIN UNNEST(split(str, ',')) as tmp(str_col)
      

      输出:

      str_col
      aaa
      bbb
      aaa1
      bbb1

      UPD

      如果您保证至少有一个逗号,那么它很简单:

      
      WITH dataset AS (
          SELECT * FROM (VALUES   
             ('aaa,bbb'),
             ('aaa1,bbb1')
       ) AS t (str))
      
      SELECT splt[1] last_name, splt[2] first_name
      FROM
      (SELECT split(str, ',') as splt
      FROM dataset)
      

      输出:

      last_name first_name
      aaa bbb
      aaa1 bbb1

      如果您可以使用不同数量的逗号,但仅限于某些数量,您可以使用TRY

      WITH dataset AS (
          SELECT * FROM (VALUES   
             ('aaa,bbb'),
             ('aaa1,bbb1,ddd1')
       ) AS t (str))
      
      SELECT splt[1], splt[2], TRY(splt[3])
      FROM
      (SELECT split(str, ',') as splt
      FROM dataset)
      

      输出:

      _col0 _col1 _col2
      aaa bbb
      aaa1 bbb1 ddd1

      【讨论】:

      • 您好,感谢您的回复。实际上我不需要将它存储在单独的行中,而是在单独的列中。就像 column1 应该有 Aaa 而 column2 应该有 Bbb。
      • @Beginner 字符串是否有已知数量的元素,基本上是预先知道的最大逗号数?
      • 是的,每个值中只有一个逗号。它就像姓氏,名字。所以我需要提取姓氏并将其存储到 last_name 新列中,而 firstname 需要存储到新的 first_name 列中
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-19
      • 1970-01-01
      • 2020-03-20
      • 1970-01-01
      相关资源
      最近更新 更多