Hive操作
数据库操作
-- 创建数据库 可以再dbs表中查看具体信息
create database mydb1;
-- 创建数据库 指定具体位置
create database mydb1 location '/user/hive/db';
-- 删除数据库
drop database mydb1;
表操作
load导入数据本质相当于使用hdfs的put命令,将数据上传到hdfs中
-- 创建表
create table t1(age int,name string);
-- 展示所有的表
show tables;
-- 展示建表语句
show create table t1;
-- 修改表名
alter table t1 rename to t1_table;
-- 导入数据 local表示本地数据 t1_table表名
load data local inpath '/home/data/t2.data' into table t1_table;
-- 设置reduce任务数量
set mapreduce.job.reduces=2
指定行分隔符和列分隔符,否则导入的数据中有多列时,表中就会出现null,hive默认的行分隔符是换行符,默认的列分隔符是\001(文件中需要用^A来表示)
create table t3(id int comment 'ID',
stu_name string comment 'name',
stu_birthday date comment 'birthday',
online boolean comment 'is online');
导入的文件
1^A张三^A2020-01-01^Atrue
2^A李四^A2020-02-01^Afalse
3^A王五^A2020-03-01^A0
执行导入:load data local inpath '/home/data/t3.data' into table t3;
自定义行分隔符和列分隔符:row format delimited
create table t3(id int comment 'ID',
stu_name string comment 'name',
stu_birthday date comment 'birthday',
online boolean comment 'is online')
row format delimited fields terminated by ' ' lines terminated by '\n';
1 张三 2020-01-01 true
2 李四 2020-02-01 false
3 王五 2020-03-01 0
执行导入:load data local inpath '/home/data/t3.data' into table t3;
表数据:Null是导入数据中为0 数据格式不匹配导致
1 张三 2020-01-01 true
2 李四 2020-02-01 false
3 王五 2020-03-01 NULL
当给字段加中文注释会出现乱码,原因是存储字段信息的表中的编码不是utf-8,解决方案
字段的数据类型
基本数据类型:
复合数据类型:
案例:
- 使用array来存储学生的兴趣爱好
建表:
collection items terminated by ',' 这表示数组中元素的分隔符
create table t4(id int comment 'ID',
stu_name string comment 'name',
hobby array<string>)
row format delimited fields terminated by ' '
collection items terminated by ','
lines terminated by '\n';
select id,name,hobby[0] from t5; 查询第一个爱好
- 使用map存储学生的每科成绩
建表语句:
map keys terminated by ':' 这表示key和value的分隔符
create table t5(id int comment 'ID',
stu_name string comment 'name',
source map<string,int>)
row format delimited fields terminated by ' '
collection items terminated by ','
map keys terminated by ':'
lines terminated by '\n';
导入的数据格式
1 张飞 语文:80,数学:90,英语:89
2 刘备 语文:88,数学:98,英语:99
查询语文的成绩:select id,stu_name,source['语文'] from t5;
- 使用struct存储员工地址信息
员工有两个地址,一个是户籍地址,一个是公司地址。
建表语句:
create table t6(id int comment 'ID',
stu_name string comment 'name',
address struct<home_addr:string,offic_addr:string>)
row format delimited fields terminated by ' '
collection items terminated by ','
lines terminated by '\n';
导入的数据:
1 关天 江西,北京
2 刘伟 湖南,广州
查询户籍地信息:select id,stu_name,address.home_addr from t6;
标签:comment,terminated,01,name,--,数据仓库,hive,table From: https://blog.51cto.com/u_13589027/7436172