0
点赞
收藏
分享

微信扫一扫

hive数据仓库(3)

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,解决方案

hive数据仓库(3)_数据

字段的数据类型

基本数据类型:

hive数据仓库(3)_分隔符_02

复合数据类型:

hive数据仓库(3)_分隔符_03

案例:

  1. 使用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; 查询第一个爱好

  1. 使用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;

  1. 使用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;

举报

相关推荐

0 条评论