Hive数据导⼊和分隔符把hdfs⽂件和hive表建⽴关联。以此可以保证,在对hive表做操作的时候,可以由hive转换成操作表对应的HDFS⽂件1.⾃定义分隔符
# 分隔符设计
下⾯的⾃定义分割符对应的数据⽰例
101,zhangsan,25,136********-1366666666,62.|农业银⾏-58.|建设银⾏,河南省-郑州市-⾦⽔区
int, string ,int,array                , map                  ,struct
分隔符含义
,⽤来表⽰每个列的值之间分隔符。fields
-⽤来分割array中每个元素,以及struct中的每个值,以及map中kv与kv之间。collection items 竖线⽤来分割map的k和v之间map keys
\n每条数据分割使⽤换⾏。lines
建表
create table t_person(
id string,
name string,
salary double,
birthday date,
sex char(1),
hobbies array<string>,
cards map<string,string>,
addr struct<city:string,zipCode:string>
) row format delimited
fields terminated by ','--列的分割
collection items terminated by '-'--数组 struct的属性 map的kv和kv之间
map keys terminated by '|'-- map的k与v的分割
lines terminated by '\n';--⾏数据之间的分割
测试数据
1,张三,8000.0,2019-9-9,1,抽烟-喝酒-烫头,123456|中国银⾏-22334455|建设银⾏,北京-10010
2,李四,9000.0,2019-8-9,0,抽烟-喝酒-烫头,123456|中国银⾏-22334455|建设银⾏,郑州-45000
3,王五,7000.0,2019-7-9,1,喝酒-烫头,123456|中国银⾏-22334455|建设银⾏,北京-10010
4,赵6,100.0,2019-10-9,0,抽烟-烫头,123456|中国银⾏-22334455|建设银⾏,郑州-45000
5,于谦,1000.0,2019-10-9,0,抽烟-喝酒,123456|中国银⾏-22334455|建设银⾏,北京-10010
6,郭德纲,1000.0,2019-10-9,1,抽烟-烫头,123456|中国银⾏-22334455|建设银⾏,天津-20010
导⼊数据
# 在hive命令⾏中执⾏
-- local 代表本地路径,如果不写,代表读取⽂件来⾃于HDFS
-- overwrite 是覆盖的意思,可以省略。
load data [local] inpath ‘/opt/’ [overwrite] into table t_person;
# 本质上就是将数据上传到hdfs中(数据是受hive的管理)
2.JSON分割符:要导⼊的数据是json格式
JSON格式
* 基本:{name:value,name:value,....}
* 数组相关的json格式:[元素1,元素2,....]
# 在hive的客户端执⾏(临时添加jar到hive的classpath,有效期本链接内)
add jar /opt/installs/hive1.2.1/hcatalog/share/hcatalog/hive-hcatalog-core-1.2.1.jar;
# 补充:永久添加,Hive服务器级别有效。hive 字符串转数组
1. 将需要添加到hive的classpath的jar,拷贝到hive下的auxlib⽬录下,
2. 重启hiveserver即可。
测试数据
{"id":1,"name":"zhangsan","sex":0,"birth":"1991-02-08"}
{"id":2,"name":"lisi","sex":1,"birth":"1991-02-08"}
建表
create table t_person2(
id string,
name string,
sex char(1),
birth date
)row format serde 'org.apache.hive.hcatalog.data.JsonSerDe';
加载⽂件数据(本地客户端命令)
# 注意:导⼊的json数据dbeaver看不了。(因为导⼊后的表本质上就是该json⽂件。)
load data local inpath '/opt/data/person.json'(⽂件路径) into table t_person2;(表名)
注意:保证json⽂件中的key的名字和数据库中表的字段名⼀样3. 正则分隔符
通过正则表达式把数据进⾏切分
借助于正则表达式在线⼯具完成正则表达式的定义
数据
INFO 192.168.1.1 2019-10-19 QQ com.baizhi.service.IUserService#login
INFO 192.168.1.1 2019-10-19 QQ com.baizhi.service.IUserService#login
ERROR 192.168.1.3 2019-10-19 QQ com.baizhi.service.IUserService#save
WARN 192.168.1.2 2019-10-19 QQ com.baizhi.service.IUserService#login
DEBUG 192.168.1.3 2019-10-19 QQ com.baizhi.service.IUserService#login
ERROR 192.168.1.1 2019-10-19 QQ com.baizhi.service.IUserService#register
建表语句
create table t_access(
level string,
ip string,
log_time date,
app string,
service string,
method string
)row format serde 'org.apache.hadoop.hive.serde2.RegexSerDe'--正则表达式的格式转化类
with serdeproperties(""="(.*)\\s(.*)\\s(.*)\\s(.*)\\s(.*)#(.*)");--(.*) 表⽰任意字符 \\s表⽰空格
导⼊数据
load data local inpath '/opt/data/access.log' into table t_access;

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。