当使用Hive创建表的时候一般需要根据实际的数据内容进行编写映射,当数据项内容与目标分隔符存在冲突时往往会难以进行处理,所以可以通过SERDEPROPERTIES配置属性来定义表中的数据格式,以便Hive能够进行数据的操作,一般会使用正则表达式来进行编写,并且正则表达式为Java形式的。
例如处理如下数据(原文件为csv文件,如下为提取的部分内容)
首选肯定要使用英文逗号当做列分隔符,不难发现content中的逗号为中文逗号,所以不会对操作产生错误影响,但tagList中的逗号为英文逗号,所以会出现错误结果的情况,但是tagList中的数据是以英文双引号包含起来的,所以可以通过SERDEPROPERTIES配置属性特判此双引号,并且由于原文件为csv文件,还需要进行类型转换,具体实现代码如下(为方便,数据类型均设为string类型)
CREATE TABLE movie (
cityName STRING,
content STRING,
score STRING,
sureViewed STRING,
tagList STRING,
userLevel STRING,
vipType STRING,
gender STRING
)
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.RegexSerDe'
WITH SERDEPROPERTIES (
"input.regex" = "(.*?),(.*?),(.*?),(.*?),\"(.*?)\",(.*?),(.*?),(.*?