Hive 我们可以从一行创建多个条目吗?

Hive 我们可以从一行创建多个条目吗?,hive,amazon-athena,hive-serde,regexserde,presto,Hive,Amazon Athena,Hive Serde,Regexserde,Presto,我的日志如下所示: client\u id;事件1;事件2;事件3 我希望得到如下SQL表: client_id | event --------------------- ... | event_1 ... | event_2 ... | event_3 我对配置单元是新手,在我看来,一个日志行总是在生成的SQL表中提供一个条目。 我尝试了以下操作(未成功): tablename不存在时创建外部表( 客户端id字符串, `事件`字符串

我的日志如下所示:
client\u id;事件1;事件2;事件3

我希望得到如下SQL表:

 client_id |   event
 ---------------------
    ...    |  event_1
    ...    |  event_2
    ...    |  event_3
我对配置单元是新手,在我看来,一个日志行总是在生成的SQL表中提供一个条目。 我尝试了以下操作(未成功):

tablename不存在时创建外部表(
客户端id字符串,
`事件`字符串
)
行格式SERDE'org.apache.hadoop.hive.serde2.RegexSerDe'
具有serdeproperty(
“input.regex”=“^([^\;]+);.*([^\;]+).$”)
位置“s3://myBucket/prefix/”;

它只接受第一个事件,而忽略其他事件…

不幸的是,无法在表DDL中使用SerDe生成行。在蜂箱中也可以这样做

(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/';
选中,它应读取两列,用户id和所有连接的事件:

'client\u id'
'event\u 1;事件2;事件3'

(2) 拆分事件并分解以生成行:

 select t.user_id, e.event
   from tablename t
        lateral view outer explode(split(t.events,'\\;')) e as event;
还可以阅读关于

在雅典娜语中:


这么受限制,真令人失望!这似乎是一个很好的解决方案,不幸的是,我使用的AWS Athena不支持这种类型的查询(不支持获取这种类型的
查询[…]
)。你回答了这个问题,我只是在等待任何其他贡献之后才接受它:)@Cinn在雅典娜中使用UNNEST而不是侧向视图:非常感谢,它与
UNNEST
一起工作。你帮了大忙,我只是有点失望,拆分是按请求完成的,而不是直接在表中。。。
select t.user_id, e.event
       from tablename t
       CROSS JOIN UNNEST(SPLIT(t.events,';')) AS e (event)