使用多字符分隔符创建 HIVE 表
Posted
技术标签:
【中文标题】使用多字符分隔符创建 HIVE 表【英文标题】:Create HIVE Table with multi character delimiter 【发布时间】:2013-09-21 10:15:55 【问题描述】:我想创建一个以多字符串字符作为分隔符的 HIVE 表,例如
CREATE EXTERNAL TABlE tableex(id INT, name STRING)
ROW FORMAT delimited fields terminated by ','
LINES TERMINATED BY '\n' STORED AS TEXTFILE LOCATION '/user/myusername';
我想将分隔符作为多字符串,如“~*”。
【问题讨论】:
再一次,一个带有多余全大写标题的 SQL 问题。天哪。 【参考方案1】:FILELDS TERMINATED BY
不支持多字符分隔符。最简单的方法是使用RegexSerDe
:
CREATE EXTERNAL TABlE tableex(id INT, name STRING)
ROW FORMAT 'org.apache.hadoop.hive.contrib.serde2.RegexSerDe'
WITH SERDEPROPERTIES (
"input.regex" = "^(\\d+)~\\*(.*)$"
)
STORED AS TEXTFILE
LOCATION '/user/myusername';
【讨论】:
谢谢 Hari,我知道 SerDe。但是 SerDe 的问题是我无法使用 Hive 表在 SSMS 上创建链接服务器连接。你如何解决这个问题? 我没有在 SSMS 上工作过,所以我不能确定。但是为什么你认为这是 SerDe 的问题?我认为这是一个单独的问题,不是吗? 我遇到了类似的问题,并且能够使用此答案成功构建表,但在查询时遇到了聚合问题。一些挖掘,我最终通过将“org.apache.hadoop.hive.contrib.serde2.RegexSerDe”更改为“org.apache.hadoop.hive.serde2.RegexSerDe”来解决【参考方案2】:请使用MultiDelimitSerde
CREATE EXTERNAL TABlE tableex(id INT, name STRING)
ROW FORMAT SERDE 'org.apache.hadoop.hive.contrib.serde2.MultiDelimitSerDe'
WITH SERDEPROPERTIES ("field.delim"="~*")
STORED AS TEXTFILE
LOCATION '/user/myusername';
【讨论】:
是 csv serde 吗,能处理多行 cmets 的字段吗?如果字段用反斜杠转义,并且字段用双引号括起来。以上是关于使用多字符分隔符创建 HIVE 表的主要内容,如果未能解决你的问题,请参考以下文章
使用正则表达式将字段拆分为数组的 Bash 脚本用于多字符分隔符