微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Athena- 从字符串中提取子字符串 - 逗号分隔

如何解决Athena- 从字符串中提取子字符串 - 逗号分隔

我想从 Athena 表创建 Athena 视图。

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

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

解决方法

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

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)
,

您可以对拆分结果使用 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,bbb1')
 ) AS t (str))

SELECT splt[1] last_name,splt[2] first_name
FROM
(SELECT split(str,') as splt
FROM dataset)

输出:

姓氏 名字
aaa bbb
aaa1 bbb1

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

WITH dataset AS (
    SELECT * FROM (VALUES   
       ('aaa,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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。