:是基于 Hadoop 的一个数据仓库工具。
hive概述
: Hive 是基于 Hadoop 的一个数据仓库工具。可以将结构化的数据文件映射为一张表,并提供完整的 类sql 查询语句转化为 MapReduce 任务进行运行。
优点
: 学习成本低,可以通过 类SQL语句 快速实现 MapReduce 统计,不必开发专门的 MapReduce 应用,十分适合数据仓库的统计分析。
功能
:Hive 是建立在 Hadoop 上的数据仓库基础构架,他提供了一系列的工具,可以用来进行数据提取,转化,加载。也可以叫做数据清洗。这是一种可以存储,查询和分析存储在 Hadoop 中的大规模数据的机制,Hive定义了简单的 类SQL 查询语言,称为 HiveQL。它允许熟悉 SQL 的用户查询数据。
运行机制
: HQL - Hive 通过类 SQL 的语法。来进行分布式的计算。HQL 用起来和 SQL 非常的类似,Hive 在执行的过程中会将 HQL 转换为 MapReduce 去执行,所以 Hive 其实是基于 Hadoop 的一种分布式计算框架,底层仍然是 MapReduce,所以它本质还是一种 离线大数据 分析工具。
Hive 命令
: show databases; - - > 查看所有的数据库 : create database 自定义数据库名; - - > 创建数据库; : use 自定义的数据库; - - > 进入 自定义的数据库 : show tables; - - > 查看数据库下所有表 : create table 自定义表名 (id int,name string); - - > 创建表 : insert into 自定义数据表 values(1,'zhang'); - - > 插入数据表 : select * from stu; - - > 查看表数据 : drop table 自定义的表名 - - > 删除表 : load data local inpath '上传文件所在路径' into table 表名; - - > 将本地文件传到表中 : create table 自定义表名1(id int,name string) row format delimited fields terminated by ' '; ( row 行 format 格式 delimited 以 ...... 为规定 fields 区域 terminated 停止 结束 ) - - > 创建表名 并且以 空格 为分隔符; : desc 自定义表名 - - > 查看表结构 : create table 自定义表名2 like 自定义表名1 - - > 创建一张 表2 和 表1 的结构类似 : insert overwrite table 自定义表名2 select * from 自定义表名1 - - > 将从自定义表名1 中的查询到的数据存储到 自定义表名2 中。 : alter table 自定义表名1 rename to 自定义表名2; - - > 将自定义表名1 的名字 更改成自定义表名 2 : alter table 自定义表名1 add columns (age int); - - > 为表 自定义表名1 添加一个字段 : exit - - > 退出hive
MANAGED_TABLE 内部表
: 先有hive表,再有数据
: 当内部表被删除时,对应的HDFS的数据也会备删除掉
EXTERNAL_TABLE 外部表
: 现有数据,在建立hive表
: 删除外部表,但对应的数据还在
: 外部表管理的是 HDFS 里的某一个目录的文件数据
创建外部表的命令
:create external table 自定义表名(id int,name string)row format delimited fields terminated by ' ' location '/目录路径'
: Hive的表的有两种,内部表和外部表都可以是分区表;
作用
: 可以避免查询整表,在生产环境下,基本都是建立带有分区字段的表;
创建命令
create table 自定义表名(id int,name string)partitioned by (category string)row format delimited fields terminated by '\t'; 注意: 在创建分区表时,partitioned字段可以不在字段列表中, 生成的表中自动就会具有该字段,category是自定义的字段;
分区表加载数据命令
: load data local inpath ‘/文件所在路径’ overwrite into table 表名 partition (category=‘分区文件名’);
查询数据命令
select * from 表名 where category=‘分区表名’;只查询分区的数据
创建目录来增加分区
: 在自己的 HDFS 的目录下,自己创建一个分区目录,然后再此目录下上传文件;
ALTER TABLE 表名 add PARTITION (category = '自己创建的名字') location ‘/文件所在路径’;
显示分区
show partitions iteblog;
添加分区
alter table 自定义表名 add partition (category='分区表名') location '分区路径' ; 或者 msck repair table 自定义表名;
修改分区
alter table 自定义表名 partition(category='分区原名字') rename to partition (category='分区新名字');
常用的基本数据类型
: int boolean float double string
复杂数据类型
: array 是由一系列相同数据类型的元素组成
: map 包含 key-value 键值对,可以通过 key 来访问元素
: struct 可以包含不同数据类型元素,相当于对象结构,可以通过 对象.属性 来访问
Hive 常用字符串操作函数
: length(String A) - - > select length(返回A的长度); : reverse(string A) - - > select reverse(返回A的反转结果); : concat('string A','string B') - - > select concat(返回 AB); : concat_ws('分隔符','string A','string B') - - > select concat_ws(返回 A分隔符B); : substr('需要分割的字段','开始分割的位置','结束分割位置'); - - > select substr(中间的部分); : upeer(string a)或者 ucase(string a) - -> 转大写 : lower(string a)或者 lcase (string a)--> 转小写 : split(string str,string pat) - - > select split('需要分割的数字',); : explode - - > 将行数据,按指定规则切分出多行
Hive 的 UDF
: 如果 hive 的内置函数不够用,我们也可以自己定义函数来使用,这样的函数称为 hive 的用户自定义函数,简称 UDF;