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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏SpringBoot 核心技术

第二章:使用QueryDSL与SpringDataJPA实现单表普通条件查询

2542
来自专栏沃趣科技

复制状态与变量记录表 | performance_schema全方位介绍

不知不觉中,performance_schema系列快要接近尾声了,今天将带领大家一起踏上系列第六篇的征程(全系共7个篇章),在这一期里,我们将为大家全面讲解p...

1723
来自专栏Java进阶架构师

手把手带你秒杀架构实践(含完整代码)

之前在 Java-Interview 中提到过秒杀架构的设计,这次基于其中的理论简单实现了一下。

1971
来自专栏喵了个咪的博客空间

[喵咪大数据]Hive2搭建和基本操作

[喵咪大数据]Hive2搭建 ? 说到Hadoop生态有一个不得不提的组件那就是<Hive>,Hive是基于Hadoop结构化存储引擎,能够存储海量的数据,Hi...

39510
来自专栏乐沙弥的世界

Possible MySQL server UUID duplication for server

    在mysql enterprise monitor监控过程中出现这样的event事件,Topic: Possible MySQL server UUID...

712
来自专栏青青天空树

springboot整合mybatis(xml+注解)

​ 刚毕业的第一份工作是java开发,项目中需要用到mybatis,特此记录学习过程,这只是一个简单demo,mybatis用法很多不可能全部写出来,有更复杂的...

1002
来自专栏乐沙弥的世界

收缩临时表空间

        当排序操作、重建索引等大型操作无法在内存中完成时,临时表空间将为排序提供便利。一般情况下临时表空间为多个用户,多个会话所共 享。不能为会话分...

1153
来自专栏Jerry的SAP技术分享

ABAP Netweaver和Cloud Foundry上的环境变量Environment Variable

2072
来自专栏一英里广度一英寸深度的学习

Java读取Mysql中文乱码

当完成以上全部配置,load data infile 文件装载到数据库,用client端读取,能正确显示中文。

2983
来自专栏杨建荣的学习笔记

使用shell生成orabbix自动化配置脚本(r6笔记第53天)

在使用Orabbix监控Oracle的时候,本身和zaabix agent最大的不同便是使用Orabbix不需要对每个数据库实例都安装单独的agent,而是一个...

3128

扫码关注云+社区

领取腾讯云代金券