Hive知识之Hive基础
发布时间
阅读量:
阅读量
文章目录
-
-
-
- 1、Hive简介
-
-
2、Hive与传统关系型数据库的比较
-
3、Hive的优势
-
4、Hive的数据类型
-
- 4.1 基础数据类型
- 4.2 复杂数据类型
-
5、Hive的基本操作
-
-
5.1 数据库相关操作
-
- 5.1.1 创建数据库
- 5.1.2 查看数据库
- 5.1.3 修改数据库
- 5.1.4 删除数据库
-
5.2 数据表相关操作
-
- 5.2.1 创建数据表
- 5.2.2 查看数据表
- 5.2.3 修改数据表
- 5.2.4 删除表和清空表
-
-
6、数据的导入和导出
-
- 6.1 数据的导入
- 6.2 数据的导出
-
1、Hive简介
- Hive是基于Hadoop的开源的数据仓库工具,用于处理海量结构化数据
- Hive把HDFS中结构化的数据映射成表
- Hive通过把HiveSQL进行解析和转换,最终生成一系列在Hadoop上运行的MapReduce任务,通过执行这些任务完成数据分析和处理
2、Hive与传统关系型数据库的比较
| 项目 | Hive | RDBMS |
|---|---|---|
| 查询语言 | HQL | SQL |
| 数据存储 | HDFS | Raw Device or Local FS |
| 执行 | MapReduce | Excuter |
| 执行延迟 | 高 | 低 |
| 处理数据 | 大 | 小 |
| 索引 | 0.8版本后加入位图索引 | 有复杂的索引 |
- 数据仓库主要是用来进行数据分析的,它本身不产生数据,也不消耗数据,其数据是从外部来的,并且主要提供给外部使用。
- 数据仓库是面向主题性来构建的,一般一个数仓都有一个特定的目的。
- 数据仓库集成了众多数据的类型,分成了许多不同的层次。
- 数据仓库中的历史数据一般不会改变,因为其主要用来记录已经发生的事实的数据
- 数据仓库上层的分析是可能会发生变化的,体现了分析的灵活性。
3、Hive的优势
- 把海量数据存储于Hadoop文件系统,而不是数据库,提供了一套类数据库的数据存储和处理机制,并采用HQL(类SQL)语言对这些数据进行自动化处理。
- 提供一个熟悉SQL用户所能熟悉的编程模型,可以通过类SQL语句快速实现简单的MapReduce统计,不必开发专门的MapReduce应用,适合数据仓库的统计分析,应用开发灵活而高效。
4、Hive的数据类型
4.1 基础数据类型
| 数据类型 | 所占字节 | 开始支持版本 |
|---|---|---|
| TINYINT | 1byte,-128 ~ 127 | |
| SMALLINT | 2byte,-32,768 ~ 32,767 | |
| INT | 4byte,-2,147,483,648 ~ 2,147,483,647 | |
| BIGINT | 8byte,-9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807 | |
| BOOLEAN | ||
| FLOAT | 4byte单精度 | |
| DOUBLE | 8byte双精度 | |
| STRING | ||
| BINARY | 从Hive0.8.0开始支持 | |
| TIMESTAMP | 从Hive0.8.0开始支持 | |
| DECIMAL | 从Hive0.11.0开始支持 | |
| CHAR | 从Hive0.13.0开始支持 | |
| VARCHAR | 从Hive0.12.0开始支持 | |
| DATE | 从Hive0.12.0开始支持 |
4.2 复杂数据类型
| 数据类型 | 描述 | 举例 |
|---|---|---|
| ARRAY | ARRAY类型是由一系列相同数据类型的元素组成,这些元素可以通过下标来访问。 | 比如有一个ARRAY类型的变量fruits,它是由[‘apple’,‘orange’,‘mango’]组成,那么我们可以通过fruits[1]来访问元素orange,因为ARRAY类型的下标是从0开始的。 |
| MAP | MAP包含key->value键值对,可以通过key来访问元素。 | 比如”userlist”是一个map类型,其中username是key,password是value;那么我们可以通过userlist[‘username’]来得到这个用户对应的password。 |
| STRUCT | STRUCT可以包含不同数据类型的元素。这些元素可以通过”点语法”的方式来得到所需要的元素。 | 比如user是一个STRUCT类型,那么可以通过user.address得到这个用户的地址。 |
创建一个包含复制类型的表格可以如下:
CREATE TABLE employees (
name STRING,
salary FLOAT,
subordinates ARRAY<STRING>,
deductions MAP<STRING, FLOAT>,
address STRUCT<street:STRING, city:STRING, state:STRING, zip:INT>
) PARTITIONED BY (country STRING, state STRING);
5、Hive的基本操作
5.1 数据库相关操作
5.1.1 创建数据库
语法:
CREATE (DATABASE/SCHEMA) [IF NOT EXISTS] database_name
[COMMIT database_comment]
[LOCATION hdfs_path] # 指定数据库位置
[WITH DBPROPERTIES (property_name=property_value,...)];
例子:
CREATE DATABASE db_hive_01 ;
CREATE DATABASE IF NOT EXISTS db_hive_02; 标准方式
CREATE DATABASE IF NOT EXISTS db_hive_03
LOCATION '/homw/centos/hive/warehouse/db_hive_03.db';
5.1.2 查看数据库
SHOW DATABASES; # 查看所有数据库
SHOW DATABASES LIKE 'db_hive*'; # 模糊查找
USE db_hive; # 使用数据库
DESC DATABASE db_hive_01; # 查看数据库字段格式等信息
DESC DATABASE EXTENDED db_hive_01;
5.1.3 修改数据库
ALTER DATABASE db_hive_01 SET
LOCATION '/homw/centos/hive/warehouse/db_hive_01.db';
5.1.4 删除数据库
DROP (DATABASE|SCHEMA) [IF EXISTS] database_name [RESTRICT|CASCADE];
DROP DATABASE db_hive_01;
DROP DATABASE db_hive_01 cascade; # 强制删除数据库
DROP DATABASE if exists db_hive_03; # 删除非空的数据库
5.2 数据表相关操作
5.2.1 创建数据表
方式一:普通创建表
CREATE TABLE IF NOT EXISTS default.user_info(
ip string COMMENT 'remote ip address' ,
user string
COMMENT 'user_info'
ROW FORMAT DELIMITED FIELDS TERMINATED BY ' '
STORED AS TEXTFILE;
方式二:子查询方式创建表
- 将子查询的结构赋予一张新的表
CREATE TABLE IF NOT EXISTS default.user_info_a
AS SELECT ip,req_url FROM default.user_info;
方式三:LIKE方式
- 复制表的结构
CREATE TABLE stu_like LIKE student;
5.2.2 查看数据表
DESC FORMATTED table_name;
5.2.3 修改数据表
ALTER TABLE table_name RENAME TO new_name; # 修改表名
ALTER TABLE table_name CHANGE column_name new_column_name new_type; # 修改列名
ALTER TABLE table_name ADD COLUMNS (
new_column_name STRING COMMENT ''); # 增加新的列
5.2.4 删除表和清空表
DROP TABLE IF EXISTS student; # 删除表
TRUNCATE TABLE student; # 清空表的内容,保留表的结构
6、数据的导入和导出
6.1 数据的导入
load data local inpath '本地路径' overwrite into table 表名; # 从本地导入到表中
load data inpath 'HDFS上的路径' into table 表名; # 从HDFS导入到表中
- local:从本地文件加载数据到hive表;否则从HDFS加载数据到hive表。
- 本地加载数据和HDFS加载数据的区别,本地加载数据是本地文件的复制拷贝,HDFS加载数据是移动数据文件的位置到对应的表目录下。
- overwrite:覆盖表中已有数据,先删除数据,后加载数据。
6.2 数据的导出
insert overwrite local directory '本地路径' 查询语句; # 将查询结果的数据导出到本地
insert overwrite directory 'HDFS上的路径' 查询语句; # 将查询结果的数据导出到HDFS
全部评论 (0)
还没有任何评论哟~
