哈喽,大家好,我是汉斯老师。近几年来,互联网行业由于较高的薪资收入,受到许多人的追捧。很多年轻的学子,或是其他行业的有志青年,都想要投身到这个行业中来。然而一方面受到“互联网寒冬”的影响,最近频频传出各家知名互联网公司裁员缩编的消息;另一方面,大量的人才涌入,又使得互联网产业在职场上呈现出供过于求的特征,并最终导致了职场上的激烈竞争。那么互联网行业未来的潜力在哪里?我们又应该在哪个方向上发力,才能保证自己可以获得一份高薪而稳定的工作?基于多年的互联网行业从业经验,汉斯老师在这里向大家推荐大数据方向,希望通过本人的《三分钟入门大数据》和《十分钟精通大数据》等系列文章,帮助所有有志了解学习大数据的朋友掌握大数据的相关知识,也欢迎所有对互联网行业以及大数据领域感兴趣的朋友前来交流。
目录
简介
hive的数据类型
hive的数据存储
hive的数据模型
hive的DDL(数据库定义语言)
hive的DML操作
hive加载数据
hive导出数据
hive udf使用介绍
简介
hive在hadoop生态圈属于数据仓库角色,他能够管理hadoop中的数据,同时可以查询hadoop中的数据。本质上来讲,hive就是sql解释器,可以将sql转换为mapreduce的job来运行。可以将sql中的表,字段转化为hdfs中的文件,以及文件中的列。hive在hdfs中的默认位置是/user/hive/warehouse。
Hive的数据类型
整型:TINYINT,SMALLINT,INT,BIGINT。
文本类型:VARCHAR:1 to 65355,CHAR:255,STRING
时间类型:timestamp:时间戳, date:日期
布尔及二进制:BOOLEAN表示二元的true或false,BINARY用于存储变长的二进制数据
浮点类型:float,double
复杂数据类型:Array/Map/Struct/UNIONhive的数据存储
Hive的数据存储
1.基于Hadoop HDFS
2.Hive没有专门的数据存储格式,存储结构主要包括:数据库、文件、表、视图
3.Hive默认可以直接加载文本文件(TextFile),还支持sequence file 创建表时,指定
4.Hive数据的列分隔符与行分隔符,Hive即可解析数据
hive的数据模型
1.内部表:与数据库中的 Table 在概念上是类似每一个Table在Hive中都有一个相应的目录存储数据。例如,一个表test,它在HDFS中的路径为:/user/hive/warehouse,删除表时,元数据与数据都会被删除.
2.分区表:在 Hive 中,表中的一个 Partition 对应于表下的一个目录,所有的 Partition的数据都存储在对应的目录中。test表中包含 date 和 city 两个 Partition,则对应于date=20130201, city = bj 的HDFS子目录为:/user/hive/warehouse/test/date=20130201/city=bj
3.外部表:指向已经在 HDFS 中存在的数据,可以创建 Partition 它和 内部表在元数据的组织上是相同的,而实际数据的存储则有较大的差异 内部表 的创建过程和数据加载过程(这两个过程可以在同一个语句中完成),在加载数据的过程中,实际数据会被移动到数据仓库目录中。外部表只有一个过程,加载数据和创建表同时完成,并不会移动到数据仓库目录中,只是与外部数据建立一个链接。当删除一个外部表时,仅删除链接。
hive的DDL(数据库定义语言)
1.创建数据库
hive> show databases;
OK default Time taken: 0.049 seconds, Fetched: 1 row(s)
hive> create database test;
OKTime taken: 0.201 seconds
hive> show databases;
OK default test Time taken: 0.021 seconds, Fetched: 2 row(s)
hive> use test;
OK Time taken: 0.02 seconds
hive> show tables;
OK Time taken: 0.014 seconds
或者:
hive> create database hive_test location '/hive/hive_test';
OK Time taken: 0.017 seconds
2.创建表
hive> CREATE TABLE IF NOT EXISTS employee ( eid int, name String,
> salary String, destination String)
> COMMENT 'Employee details'> ROW FORMAT DELIMITED
> FIELDS TERMINATED BY '\t'> LINES TERMINATED BY '\n'
> STORED AS TEXTFILE;
OK Time taken: 0.052 seconds
3.修改表:alter语句
ALTER TABLE name RENAME TO new_name
ALTER TABLE name ADD COLUMNS (col_spec[, col_spec ...])
ALTER TABLE name DROP [COLUMN] column_name
ALTER TABLE name CHANGE column_name new_name new_type
ALTER TABLE name REPLACE COLUMNS (col_spec[, col_spec ...])
3.1.更改表名rename to,把 employee 修改为 emp。
hive> ALTER TABLE employee RENAME TO emp;
OK Time taken: 0.107 seconds
hive> show tables;
OK emp Time taken: 0.012 seconds, Fetched: 1 row(s)
3.2.更改列名和列数据类型
- 先查看一下这表数据结构:
hive> desc emp;
OK eid int name string salary string destination string Time taken: 0.07 seconds, Fetched: 4 row(s)
- 把name变成ename,把salary数据类型变为double。
hive> ALTER TABLE emp CHANGE name ename String;
OK Time taken: 0.118 seconds
hive> ALTER TABLE emp CHANGE salary salary Double;
OK Time taken: 0.077 seconds
hive> desc emp;
OK eid int ename string salary double destination string Time taken: 0.055 seconds, Fetched: 4 row(s)
- 增加一列:
dept hive> ALTER TABLE emp ADD COLUMNS (dept STRING COMMENT 'Department name');
OK Time taken: 0.071 seconds
hive> desc emp;
OK eid int ename string salary double destination string dept string Department name Time taken: 0.073 seconds, Fetched: 5 row(s) 此时再查看表结构,已加入新字段dept。
4.删除表
hive> show tables;
OK empemployee Time taken: 0.011 seconds, Fetched: 2 row(s)
hive> DROP TABLE IF EXISTS employee;
OK Time taken: 0.295 seconds
hive> show tables;
OK emp Time taken: 0.011 seconds, Fetched: 1 row(s)
5.清空表:先查看在清空。
hive> select * from employee;
OK
1201 Gopal 45000.0 Technical manager
1202 Manisha 45000.0 Proof reader
1203 Masthanvali 40000.0 Technicali writer
1204 Kiran 40000.0 Hr Admin
1205 Kranthi 30000.0 Op Admin
Time taken: 0.031 seconds, Fetched: 5 row(s)
hive> truncate table employee;
OK Time taken: 0.064 seconds
hive> select * from employee;
OK Time taken: 0.054 seconds
受限于篇幅原因,剩下的部分请看这里https://www.jianshu.com/p/8854c552c0cf