我的日志如下所示: client_id;event_1;event_2;event3
我想得到这样一个sql表:
client_id | event
---------------------
... | event_1
... | event_2
... | event_3
我是新来的配置单元,似乎在我看来,一个日志行总是提供一个项目在结果的sql表。我尝试了以下操作(未成功):
CREATE EXTERNAL TABLE IF NOT EXISTS tablename (
client_id String,
`event` String
)
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.RegexSerDe'
WITH SERDEPROPERTIES (
"input.regex" = "^([^\;]+);.*([^\;]+).*$" )
LOCATION 's3://myBucket/prefix/';
只需要第一个事件,忽略其他事件。。。
1条答案
按热度按时间x33g5p2x1#
不幸的是,无法在表ddl中使用serde生成行。在 hive 里也可以这样做。
(1) 将所有用户事件作为一列读取:
选中时,它应读取两列,user\u id和所有串联的事件:
'client_id'
以及'event_1;event_2;event3'
(2) 拆分事件并分解以生成行:另请阅读侧视图。
在雅典娜中,使用unnest和交叉连接: