hive的文件的记录格式serde

hive的文件的记录格式serde

一、概念

  • 就是表中数据生成的文件的记录的格式,中途涉及到表到文件时是序列化的过程(Serializer)、文件到表的时候是反序列化过程(Deserializer)。

二、常见的serde

  • CSV serde:逗号分割值,有时也称为字符分隔值,因为分隔字符也可以不是逗号。CSV文件由任意数目的记录组成,记录间以某种换行符分隔;每条记录由字段组成,字段间的分隔符是其它字符或字符串,最常见的是逗号或制表符。通常,所有记录都有完全相同的字段序列。
  • tsv serde:设置它的separatorChar=’\t’
  • json serde:json格式的分割
  • RegEx(正则)serde:正则表达式的分割
  • parqut serde:

三、具体讲解

1、CSV serde
  • 创建记录为csv格式的表:
create table if not exists csv(
	id int,
	name string
)
row format serde 'org.apache.hadoop.hive.serde2.OpenCSVSerde'
;
  • 创建.csv的文件

    1. 新建一个txt文件:注意因为我们默认的是用","号做的分割符号中间只能用他来分割。在这里插入图片描述
    2. 将文件另存为.csv格式的文件。在这里插入图片描述在这里插入图片描述
    3. 确定格式在这里插入图片描述
  • 将数据上传到hive中去

load data local inpath "localpath/mycsv.csv" into table csv;
  • 创建复杂的csv表格
create table if not exists csv(
	id int,
	name string
)
row format serde 'org.apache.hadoop.hive.serde2.OpenCSVSerde'
with serdeproperties(
'separatorChar'=',',//指定分割符
'qutoChar'='"',//指定字段的引号
'escapeChar'="\"//指定转移符
)
store as textfile;
2、json serde:解析复杂的json
  • 首先要将json的jar包上传到服务器上面去。
  • 将上传的jar包引入到hive中去
hive>add jar /localpath/json-serde-1.3-jar-with-dependencies.jar;
  • 确定文件格式
{"provice":"山西","city":["大同","临汾","太原"],"person":{"man":[100,200,50],"woman":[80,120,30]}}
{"provice":"河北","city":["石家庄","保定","唐山"],"person":{"man":[200,300,80],"woman":[100,160,89]}}

格式是:

string,Array<String>,map<String,Array<Int>>
  • 由格式创建表
create table if not exists json(
	provice string,
	city Array<String>,
	person map<String,Array<Int>>
)
row format serde 'org.openx.data.jsonserde.JsonSerDe'
;
  • 上传数据
load data local inpath "localpath/file" into table json;
  • 测试
##查询城市多与三个的并且青年妇女人数大于80万的数据
select * from json3 where size(city) >=3 and person["woman"][0] > 80;
regex serde:正则匹配
  • 确定数据
220.196.111.12 [10/Jan/2018:00:02:00 + 0800]
220.197.111.12 [10/Jan/2018:00:02:00 + 0800]
220.19C.111.12 [10/Jan/2018:00:02:00 + 0800]
220.ax1.111.12 [10/Jan/2018:00:02:00 + 0800]
220.198.111.12 [10/Jan/2018:00:02:00 + 0800]
  • 创建表
create table if not exists regex(
	host string,
	data string
)
row format serde'org.apache.hadoop.hive.serde2.RegexSerDe'
with serderproperties(
	"input.regex" = "^([0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}(.*)$)"
)
stroed as textfile
;
  • 说明:这里面的with serderproperties参数就是将每个数据进行一下正则匹配能够匹配的就进入,不能匹配的就不让进入
  • 加载数据
load data local inpath"localpath/file"into table regex;
  • 检测
select * from regex;
  • 说明:只有ip全为数字的才能匹配进去。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值