目录
- 简介
- 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/UNION
hive的数据存储
- Hive的数据存储基于Hadoop HDFS
- Hive没有专门的数据存储格式,存储结构主要包括:数据库、文件、表、视图
- Hive默认可以直接加载文本文件(TextFile),还支持sequence file 创建表时,指定Hive数据的列分隔符与行分隔符,Hive即可解析数据
hive的数据模型
- 内部表:与数据库中的 Table 在概念上是类似每一个Table在Hive中都有一个相应的目录存储数据。例如,一个表test,它在HDFS中的路径为:/user/hive/warehouse,删除表时,元数据与数据都会被删除.
- 分区表:在 Hive 中,表中的一个 Partition 对应于表下的一个目录,所有的 Partition的数据都存储在对应的目录中。test表中包含 date 和 city 两个 Partition,则对应于date=20130201, city = bj 的HDFS子目录为:/user/hive/warehouse/test/date=20130201/city=bj
- 外部表:指向已经在 HDFS 中存在的数据,可以创建 Partition 它和 内部表在元数据的组织上是相同的,而实际数据的存储则有较大的差异 内部表 的创建过程和数据加载过程(这两个过程可以在同一个语句中完成),在加载数据的过程中,实际数据会被移动到数据仓库目录中。外部表只有一个过程,加载数据和创建表同时完成,并不会移动到数据仓库目录中,只是与外部数据建立一个链接。当删除一个外部表时,仅删除链接。想系统学习大数据的话,可以加入大数据技术学习扣扣君羊:522189307
hive的DDL(数据库定义语言)
- 创建数据库
hive> show databases;
OK
default
Time taken: 0.049 seconds, Fetched: 1 row(s)
hive> create database test;
OK
Time 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
- 创建表
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
- 修改表: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 ...])
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)
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。
h