Hadoop数据分析平台实战——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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,117评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,328评论 1 293
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,839评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,007评论 0 206
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,384评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,629评论 1 219
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,880评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,593评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,313评论 1 243
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,575评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,066评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,392评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,052评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,082评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,844评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,662评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,575评论 2 270

推荐阅读更多精彩内容