文章目录
- 前言
- 一、Hive基本数据类型
- 二、Hive集合数据类型
- 三、Hive数据定义与操作
- 1.创建数据库
- 2.查看数据库
- 3.删除数据库
- 4.创建表
- 5.修改表
- 6.删除表
- 7.分区表
- 四、数据的导入导出
- 1.数据导入
- 2.数据导出
前言
Hive作为数据仓库,用来存放企业的海量数据,Hive提供了丰富的数据类型,如关系型数据库,且提供了关系型数据库不支持的数据类型。
一、Hive基本数据类型
数据类型 长度 例子 TINYINT 1byte有符号整数 30 SMALLINT 2byte 有符号整数 30 INT 4byte 有符号整数 30 BIGIN 8byte有符号整数 30 BOOLEAN 布尔类型true 或者 false true FLOAT 单精度浮点数 3.14159 DOUBLE 双精度浮点数 3.14159 STRING 字符序列,可以指定字符集可以使用单引号或双引号 “have a good day” TIMESTAMP 整数、浮点数或者字符串 1550738998125(Unix 新纪元秒) BINARY 字节数组 属于集合类型 二、Hive集合数据类型
数据类型 描述 字面语法事例 STRUCT 与C语言中的结构体struct类型相似,都可以通过"点"符号访问元素内容。例如,某表中某个列的数据类型为STRUCT(firNameSTRING, lastName STRING),那么第一个元素可通过字段名.firName 来引用 STRUCT(“zhao”, “si”) MAP MAP是一个键值对映射集合。例如,表中某个列的数据类型是MAP,存放数据的格式是键→值,通过键就可以获取值,“Salary” → “8000” MAP(“Salary”, “10000”, “food”, “100”) ARRAY ARRAY数组是一组具有相同类型变量的集合,这些变量被称为数组的元素,每个元素都有一个下标编号,编号从0开始,例如数组[“Salary”,“Late”] ARRAY(“Salary”, “food”)
三、Hive数据定义与操作
1.创建数据库
create database stutest;
为避免报错,可以使用以下语句:
create database if not exists stutest;
创建同时增加描述:
create database stutest comment 'for test';
2.查看数据库
show databases;
匹配数据库名
show databases like 's.*';
查看数据库描述(输出描述信息包括Hive为数据库stutest在HDFS分布式文件系统上创建的目录):
describe database stutest;
3.删除数据库
drop database;
为避免报错,可以使用以下语句:
drop database if exists stutest;
如果数据库里包含一张或多张表,需要把表全删除,才能删除数据库。也可以直接在命令后加上关键字cascade,将自行先删除表,再删除数据库。
drop database if exists sogou cascade;
4.创建表
create table school.student(id bigint,name string,score double,age int) row format delimited fields terminated by ',';
row delimited fields定义行格式化分隔, terminated by ','表示每一列之间的分隔符为都好(也可以定义其他如‘\t’)。
同时也可以加入更多后缀如下;
create table school.student(id bigint,name string,score double,age int) row format delimited fields terminated by ',' location '/user/hive/warehouse/stutest.db/school';
其中/user/hive/warehouse/是默认数据仓库路径地址,stutest.db是数据库目录,school是表目录,/user/hive/warehouse/stutest.db就是在HDFS文件系统上的数据库目录。
(1)管理表
导入数据代码如下:
load data local inpath '/home/oliver/data/student.txt' into table student;
查看数据库中的数据表内容:
show tables in stustudent;
也可以直接使用Hadoop命令查看数据表信息:
hadoop fs -ls hdfs://localhost:9000/user/hive/warehouse/stutest.db
路径的最后就是表名,删除表后,路径也会被删除。
2.外部表
在创建表时,如果加上关键字external,则创建为外部表。外部表中的数据生命周期不受Hive的控制,且可以和其他外部表进行数据的共享。Hive 创建外部表的语法如下所示,我们创建一张产品表。
create external table uuser (user_name string, user_id bigint) row format delimited fields terminated by '\t' location '/data/test'; //ex-ternal关键字定义创建的表为外部表,location '/data/test'定义外部表test存放数据的HDFS 路径地址。
Hive数据库中uuser表被删除之后,表uuser在HDFS上存放数据的目录上的/data/test/uuser.txt文件不会被删除,在实际开发过程中,外部表external是主要的应用类型。
5.修改表
重命名表:
alter table stutest rename to stu;
增加表字段:
alter table stu add columns (sex string,height float);
6.删除表
drop table stu;
删除表的过程中,只是删除表的元信息,对于外部表只会删除表元信息,表目录信息不会被删除。对于管理表则表元信息与表目录数据信息一同删除。
7.分区表
解决数据量过大产生的数据库性能问题,主要有创建分表和创建分区表两种方式。
创建分表是将一张大表数据分配到多张小表中,提高数据并法量,但一张表结构发生变化,则其他表都会发生变化,需要较高的sql代码维护成本。
创建分区表,是所有数据还在同一张数据表中,但底层物理存储数据根据一定的规则,划分到不同文件中(文件还可存储到不同的磁盘上)。使用表分区技术水平分散压力,将数据从物理上移动到距离使用最频繁的用户更近的地方,缺点是表的并法量没有提高。
Hive的分区就是创建层级目录的一种方式。
(1)静态分区
创建静态分区表stu并且该表只有一个分区,分区列grade:
create table stu(id int,name string) partitioned by (grade string) row format delimited fields terminated by ',';
导入数据:
1,赵 2,钱 3,孙
load data local inpath '/home/oliver/data/stu_1.txt' into table stu partition(grade='first');
导入效果
查看表stu在HDFS上的目录结构:
查看所在数据库的目录:
根据所在数据库目录查看表在HDFS上的目录结构:
hadoop fs -lsr /user/hive/warehouse/stutest.db;
根据目录可知,在Hive数据仓库默认路径上会创建表明目录的同时,还创建一个分区名子目录,最后在分区名下存放那个世纪数据XX.txt。
继续导入:
可以看到,又新增了~/grade=second目录
(2)动态分区
动态分区区别与静态分区的表现为不用指定分区目录,由系统自己选择。
开启动态分区:
set hive.exec.dynamic.partition=true;
将所有分区列设置为动态:
set hive.exec.dynamic.partition.mode=nonstrict; //默认是strict
设置最大分区个数:
set hive.exec.max.dynamic.partitions.pernode=1000; //最大分区个数
检验:
创建分区表
create table student(id int) partitioned by (name string,grade string) row format delimited fields terminated by ',';
将数据导入空表(insert overwrite)
insert overwrite table student partition(name,grade) select id,name,grade from stu;
四、数据的导入导出
1.数据导入
除了使用HiveQL语句向表中传入数据外,可以通过HDFS命令行接口直接将xxx.txt数据导入Hive表,原理是将数据文件放到LOCATION属性所指向路径:
hadoop fs -put xxx.txt /stutest/stu
2.数据导出
将数据从Hive仓库导出至本地,就是从HDFS导出数据(通过HDFS命令行接口),操作如下
hadoop fs get /user/hive/warehouse/stutest.db/stu/xxx //将表stu数据导出
猜你喜欢
- 12天前(a级景区评定机构)全国A级旅游景区创建与提升培训班在敦煌市举办
- 12天前(香港航空三亚航线复航了吗)香港航空三亚航线复航
- 12天前(夏日旅行海报)夏日旅行|精简行囊 向快乐进发
- 12天前(七尚酒店百度百科)Lohkah七尚酒店首度开创充满新知的闽地研学旅程
- 12天前(瑞虎7plus2021款)重塑10万级SUV价值标杆,全新一代瑞虎7PLUS冠军版给你惊喜
- 12天前(曼谷丽思卡尔顿公寓价格)在曼谷丽思卡尔顿酒店CALEŌ 邂逅鸡尾酒的浪漫艺术
- 12天前(澳涞坞是什么)从最美山庄到世界舞台:澳涞山庄见证世界十佳旅居城市评选
- 12天前(希尔顿集团2021年筹建的酒店)希尔顿集团两大重点项目亮相第四届上海旅游投资促进大会
- 12天前(新西兰登陆《我的世界》!全球首个目的地游戏模组震撼上线)新西兰登陆《我的世界》!全球首个目的地游戏模组震撼上线
- 12天前(泸沽湖大酒店地址)泸沽湖岚岳酒店盛大开业|以摩梭文化为魂,打造高端度假新地标
网友评论
- 搜索
- 最新文章
- (2020广州车展哈弗)你的猛龙 独一无二 哈弗猛龙广州车展闪耀登场
- (哈弗新能源suv2019款)智能科技颠覆出行体验 哈弗重塑新能源越野SUV价值认知
- (2021款全新哈弗h5自动四驱报价)新哈弗H5再赴保障之旅,无惧冰雪护航哈弗全民电四驱挑战赛
- (海南航空现况怎样)用一场直播找到市场扩张新渠道,海南航空做对了什么?
- (visa jcb 日本)优惠面面俱到 JCB信用卡邀您畅玩日本冰雪季
- (第三届“堡里有年味·回村过大年”民俗花灯会活动)第三届“堡里有年味·回村过大年”民俗花灯会活动
- (展示非遗魅力 长安启源助力铜梁龙舞出征)展示非遗魅力 长安启源助力铜梁龙舞出征
- (阿斯塔纳航空公司)阿斯塔纳航空机队飞机数量增至50架
- (北京香港航班动态查询)香港快运航空北京大兴新航线今日首航
- (我在港航“呵护”飞机 每一次安全着陆就是最好的荣誉)我在港航“呵护”飞机 每一次安全着陆就是最好的荣誉
- 热门文章