簡體   English   中英

Athena- 從字符串中提取 substring - 逗號分隔

[英]Athena- extract substring from string - comma delimited

我想從 Athena 表創建 Athena 視圖。

在表中,列值為“lastname, firstname”,因此我想將這些值提取為“lastname”和“firstname”,然后需要將其存儲到視圖中的單獨列中。 示例 - 名字需要存儲到新列中 - 'first_name' 和姓氏需要存儲到新列中 - 'last_name'

我可以在這里使用的 SQL function 是什么? 我試過 split function 但它給了我一個數組。

假設輸入字符串具有固定且已知數量的元素,您可以執行以下操作:

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)

創建或替換視圖“名稱”為

select 
SPLIT_PART("column_name",',', 1) as first_name
, SPLIT_PART("column_name", ',', 2) as last_name
from myTable

您可以對拆分結果使用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
啊啊啊啊
bbb
aaa1
bb1

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)

輸出:

啊啊啊啊 bbb
aaa1 bb1

如果您可以使用不同數量的逗號但僅限於某個數量,您可以使用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
啊啊啊啊 bbb
aaa1 bb1 ddd1

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM