Hive Shell
Hive帮助文档:https://cwiki.apache.org/confluence/display/Hive/LanguageManual
Hive的Shell基本常用命令主要包含退出客户端、添加文件、修改/查看环境变量、执行linux命令、执行dfs命令等。除了基本命令,其他的命令主要是DDL和DML等操作数据表的命令。
注意:hdfs、yarn、metastore 服务启动。
[hadoop@master conf]$ start-all.sh
[hadoop@master ~]$ hive --service metastore &
如果出现如下问题:参考 https://blog.csdn.net/fyrcarry/article/details/84982289
Hive 起源
Hive是为了在Hadoop集群之上提供了一个HQL(类SQL)操作的客户端,方便开发人员直接使用HQL进行数据分析任务,不需要使用java来编写MapReduce任务。
Hive是构建在Hadoop之上的数据仓库,也是一种操作Hadoop数据的“客户端”。
Hive可以在HDFS上构建数据仓库来存储结构化数据,Hive提供了类似于SQL的查询语言HiveQL,可以执行查询、交换数据等操作。
通过Hive执行引擎的转换,可以将HQL语句转换为MapReduce任务来执行。还提供了一系列的工具进行数据的加载转化,用来存储、查询和分析存储在HDFS中的大规模数据集。
HiveQL
简称HQL,是一种类似sql的查询语言,绝大多数语法和sql类似。
HQL支持基本类型和复杂类型两大数据类型。
数据类型 描述 基本类型 TINYINT(1byte)、SMALLINT(2byte)、INT(4byte)、BIGINT(8byte)、
FLOAT(4byte)、DOUBLE(8byte)、BOOLEAN(-)、STRING(2G)
复杂类型 ARRAY(一组有序数组,类型必须一致)、
MAP(无序键值对,键值内部字段类型必须相同,而且要求key的类型为基本数据类型)、
STRUCT(一组字段,类型随意)
show 主要作用:查看database、table、function等组件的名称信息,和Mysql的show命令类型。 describe 主要作用:获取database、table、partition的具体描述信息,包括存储位置、字段类型等信息。 explain 主要作用:获取hql语句的执行计划,通过分析执行计划来优化hql语句。
基本命令
清屏:
hive> !clear ;
DFS命令:
hive> dfs -ls /;
hive> dfs -cat /hive/myhive.db/student/student.txt;
Database
主要作用:提供数据分割的作用,方便数据管理。
# 显示的展示当前使用的数据库 hive> set hive.cli.print.current.db=true; # 显示列头 hive> set hive.cli.print.header=true; # 创建 hive> create database IF NOT EXISTS test1 COMMENT "It's new database" WITH DBPROPERTIES ('name0'='value0'); hive> create schema IF NOT EXISTS test2 COMMENT "It's new schema" WITH DBPROPERTIES ('n0'='v0','n1'='v1'); # 描述 hive> describe database test1; hive> describe database extended test1; hive> describe schema test2; hive> describe schema extended test2; # 删除 hive> drop database test1; # 如果database中非空,存在table,要么先删除table,要么使用级联命令cascade。 hive> drop database if exists test1 cascade;
Table
类型
内部表(托管表) 内部表是由Hive进行管理的,再删除内部表的时候,数据也会删除。
外部表 外部表的数据不是由Hive进行管理的,即当删除外部表的时候,外部表的数据不会从hdfs中删除。
一般情况下,在创建外部表的时候会将表的数据的存储路径定义在hive的数据仓库路径之外。
结构
普通表 分桶表 对于每一个表或者是分区,Hive可以进一步组织成桶,也就是说桶是更为细粒度的数据范围划分。Hive是针对某一列进行分桶。Hive采用对列值哈希,然后除以桶的个数求余的方式决定该条记录存放在哪个桶中。分桶的好处是可以获得更高的查询处理效率。使取样更高效。 分区表 Hive使用select语句进行查询的时候一般会扫描整个表内容,会消耗很多时间做没必要的工作。
Hive可以在创建表的时候指定分区空间,这样在做查询的时候就可以很好的提高查询的效率。