#amazon-web-services #amazon-athena #presto #trino
Вопрос:
Я хочу создать представление Афины из таблицы Афины.
В таблице значение столбца «фамилия, имя», поэтому я хочу извлечь эти значения как «фамилия» и «имя», а затем сохранить их в отдельных столбцах в представлении. пример — имя должно быть сохранено в новом столбце — » имя » и фамилия должны быть сохранены в новом столбце — «имя»
какова функция SQL, которую я могу здесь использовать? Я попробовал разделить функцию, но затем она выдает мне массив.
Ответ №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 |
---|
ааа |
bbb |
ааа1 |
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)
Выход:
фамилия | имя пользователя |
---|---|
ааа | bbb |
ааа1 | 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 | _кол1 | _col2 |
---|---|---|
ааа | bbb | |
ааа1 | bbb1 | ddd1 |
Комментарии:
1. Здравствуйте, спасибо за ваш ответ.. На самом деле мне нужно хранить его не в отдельной строке, а в отдельных столбцах.. Например, столбец 1 должен иметь Aaa, а столбец 2 должен иметь Bbb.
2. @Beginner имеет ли строка известное количество элементов, в основном ли максимальное количество запятых известно заранее?
3. Да, в каждом значении есть только одна запятая. это как фамилия, имя. поэтому мне нужно извлечь фамилию и сохранить ее в новом столбце last_name, а имя должно быть сохранено в новом столбце first_name