Hadoop数据分析平台实战——120Hive Shell命令介绍 01(熟悉Hive略过)离线数据分析平台实战——120Hive Shell命令介绍 01(熟悉Hive略过)
离线数据分析平台实战——120Hive Shell命令介绍 01(熟悉Hive略过)
Hive服务介绍
Hive默认提供的cli(shell)服务,如果需要启动其他服务,那么需要service参数来启动其他服务, 比如thrift服务、metastore服务等。 可以通过命令hive --service help查看hive支持的命令。
image.png
Hive Shell命令介绍
Hive的shell命令是通过${HIVE_HOME}/bin/hive文件进行控制的,通过该文件我们可以进行hive当前会话的环境管理、也进行进行hive的表管理等操作。 hive命令需要使用';'进行结束标示。 通过hive -H查看帮助信息:另外从hive0.11版本开始支持--database <databasename>.
image.png
Hive Shell常用基本命令
Hive的Shell基本常用命令主要包含退出客户端、添加文件、修改/查看环境变量、执行linux命令、执行dfs命令等。
命令包括:quit、exit、set、add JAR[S] <filepath> <filepath>*、list JAR[S]、delete JAR[S] <filepath>*、! <linux-command>、dfs <dfs command>
等。
除了Hive的基本命令外,其他的命令主要是DDL和DML等操作数据表的命令。
HiveQL介绍
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、describe、explain命令介绍
show命令
主要作用是查看database、table、function等组件的名称信息,也就是通过show命令我们可以知道我们的hive中有那些database;当前database中有那些table。等等。和mysql的show命令类型。
describe命令
主要作用是获取database、table、partition的具体描述信息,包括存储位置、字段类型等信息。
explain命令
主要作用是获取hql语句的执行计划,我们可以通过分析这些执行计划来优化hql语句。
Database介绍
hive提供database的定义,database的主要作用是提供数据分割的作用,方便数据管理。命令如下:
创建: create (DATABASE|SCHEMA) [IF NOT EXISTS] database_name [COMMENT database_comment] [LOCATION hdfs_path] [WITH DBPROPERTIES (property_name=value,name=value....)]
。
显示描述信息:describe DATABASE|SCHEMA [extended] database_name
。
删除:DROP DATABASE|SCHEMA [IF EXISTS] database_name [RESTRICT|CASCADE]
使用: use database_name
。
Hive表介绍
Hive中的表可以分为 内部表(托管表) 和外部表, 区别在于: 外部表的数据不是有hive进行管理的,也就是说当删除外部表的时候,外部表的数据不会从hdfs中删除。 而内部表是又hive进行管理的,在删除表的时候,数据也会删除。 一般情况下,我们在创建外部表的时候会将表数据的存储路径定义在hive的数据仓库路径之外。
Hive创建表主要有三种方式, 第一种直接使用create table命令, 第二种使用create table .... AS select ....(会产生数据)。 第三种使用create table tablename like exist_tablename.命令。
create table命令介绍
CREATE [EXTERNAL] TABLE [IF NOT EXISTS]
[db_name.]table_name (col1_name col1_type [COMMENT col1_comment],....) -- 指定表的名称和表的具体列信息
[COMMENT table_comment] --表的描述信息
[PARTITIONED BY (col_name col_type [COMMENT col_comment],...)] -- 表的分区信息
[CLUSTERED BY (col_name, col_name,....) [SORTED BY (col_name [ASC|DESC],...])] INTO num_buckets BUCKETS] -- 表的分桶信息
[ROW FORMAT row_format] -- 表的数据分割信息,格式化信息
[STORED AS file_format] -- 表数据的存储序列化信息
[LOCATION hdfs_path]; -- 数据存储的文件夹地址信息
CREATE [EXTERNAL] TABLE [IF NOT EXISTS]
[db_name.]table_name LIKE existing_table_or_view_name -- 指定要创建的表和已存在表/视图的名称
[LOCATION hdfs_path]; -- 数据文件存储的hdfs文件地址信息
CREATE [EXTERNAL] TABLE [IF NOT EXISTS]
[db_name.]table_name -- 指定要创建的表名
.... 指定partition&bucket等信息,指定数据分割符号。
[AS select_statement]; -- 导入的数据
案例1
分别使用默认命令创建内部表test_manager、外部表test_external以及指定location的内部表test_location,然后分别删除这两个表,查看变化情况:命令如下:
create external table test_external(id int);
create table test_location(id int) location '/test_location';
drop table test_manager;
drop table test_external;
drop table test_location;
删除表的时候,内部表不管是否指定location,均会删除文件夹,外部表一定不会删除。
案例2
分别使用三种命令格式创建客户表customers,customers2,customers3,然后分别查看三张表(全部为内部表)的区别,命令如下:
```CREATE TABLE customers
(id
int,name
string,phone
string) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' LOCATION 'hdfs://hh:8020/customers';
CREATE TABLE customers2
like customers
;
CREATE TABLE customers3
AS SELECT * FROM customers
;
###案例3
创建一个有复杂数据类型的hive表,并明确指定表数据的分隔符号,命令如下:
```create table complex_table_test(id int, name string, flag boolean, score array<int>, tech map<string,string>, other struct<phone:string,email:string>) row format delimited fields terminated by ';' collection items terminated by ',' map keys terminated by ':' LOCATION 'hdfs://hh:8020/complex_table_test';
案例4
创建一个使用hbase的外部表,也就是说hive表数据为hbase的数据,创建命令格式如下:
```CREATE EXTERNAL TABLE hive_table_name
(key string, col1 type comment, col2 type comment,.....) -- 指定hive表的列名和表名
ROW FORMAT SERDE 'org.apache.hadoop.hive.hbase.HBaseSerDe'
STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler' WITH SERDEPROPERTIES ('hbase.columns.mapping'=':key,family1:col1,f1:col2,...fn:coln') -- 指定格式化信息
TBLPROPERTIES ('hbase.table.name'='hbase_tablename'); -- 指定hbase表名
**注意:必须指定hbase的rowkey。**
### Hive表结构操作命令
除了创建hive表的命令外,常用的hive表相关DDL命令有:`describe`(查看表结构信息)、`drop`(删除表)、`truncate`(重构表,也就是先删除再重新建立)、`alter`(修改表结构)等。
常用命令的格式如下所示:
`
```describe (extended|formatted) table_name;
drop table [if exists] table_name;
truncate table table_name;
alter table table_name rename to new_table_name;
alter table table_name add colums (new-cls type,....);
alter table table_name replace colums (new-cls type,....);
参考链接: https://cwiki.apache.org/confluence/display/Hive/LanguageManual+Cli
- MySQL InnoDB Cluster环境搭建和简单测试
- 多平台下的数据存储新秀-PROTOBUF
- TCP的长连接与短连接的含义与区别(附Java代码实现)
- Mycat读写分离配置实践
- 快速搭建主从的脚本和问题排查
- MySQL在RR隔离级别下的unique失效和死锁模拟
- Golang语言--glog日志库使用
- 一个MySQL死锁问题的复现
- Spring Boot 2.0 新特性(一):配置绑定 2.0 全解析
- MySQL断电恢复的一点简单分析
- Spring Boot 2.0 新特性(二):新增事件ApplicationStartedEvent
- 奇怪的go语言iota
- Golang web服务器处理前端HTTP请求跨域的方法
- MySQL死锁的两个小案例
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法