Athena- 从字符串中提取子字符串 - 逗号分隔
Athena- extract substring from string - comma delimited
我想从 Athena 创建 Athena 视图 table。
在 table 中,列值为“lastname, firstname”,因此我想将这些值提取为 'lastname' 和 'firstname',然后需要将其存储到单独的列中一个看法。示例-名字需要存储到新列中-'first_name',姓氏需要存储到新列中-'last_name'
我可以在这里使用的 SQL 功能是什么?我尝试了 split 函数,但它给了我一个数组。
您可以在拆分结果上使用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
假设输入字符串具有固定且已知数量的元素,您可以这样做:
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)
我想从 Athena 创建 Athena 视图 table。
在 table 中,列值为“lastname, firstname”,因此我想将这些值提取为 'lastname' 和 'firstname',然后需要将其存储到单独的列中一个看法。示例-名字需要存储到新列中-'first_name',姓氏需要存储到新列中-'last_name'
我可以在这里使用的 SQL 功能是什么?我尝试了 split 函数,但它给了我一个数组。
您可以在拆分结果上使用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 |
假设输入字符串具有固定且已知数量的元素,您可以这样做:
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)