К сожалению, невозможно создать строки с использованием SerDe в таблице DDL.В Hive можно сделать то же самое.
(1) Считать все пользовательские события в виде одного столбца:
CREATE EXTERNAL TABLE IF NOT EXISTS tablename (
client_id String,
events String
)
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.RegexSerDe'
WITH SERDEPROPERTIES (
"input.regex" = "^([^\\;]+)\\;(.*)$" )
LOCATION 's3://myBucket/prefix/';
Проверьте, должны ли считываться два столбца: user_id и все события объединяются:
'client_id'
и 'event_1;event_2;event3'
(2) Разделить события и разбить их для генерации строк:
select t.user_id, e.event
from tablename t
lateral view outer explode(split(t.events,'\\;')) e as event;
Подробнее о Боковое представление .
В Афине используйте UNNEST с CROSS JOIN :
select t.user_id, e.event
from tablename t
CROSS JOIN UNNEST(SPLIT(t.events,';')) AS e (event)