Hadoop數(shù)據(jù)分析平臺(tái)實(shí)戰(zhàn)——120Hive Shell命令介紹 01(熟悉Hive略過(guò))

離線數(shù)據(jù)分析平臺(tái)實(shí)戰(zhàn)——120Hive Shell命令介紹 01(熟悉Hive略過(guò))

Hive服務(wù)介紹

Hive默認(rèn)提供的cli(shell)服務(wù),如果需要啟動(dòng)其他服務(wù),那么需要service參數(shù)來(lái)啟動(dòng)其他服務(wù),
比如thrift服務(wù)、metastore服務(wù)等。
可以通過(guò)命令hive --service help查看hive支持的命令。

image.png

Hive Shell命令介紹

Hive的shell命令是通過(guò)${HIVE_HOME}/bin/hive文件進(jìn)行控制的,通過(guò)該文件我們可以進(jìn)行hive當(dāng)前會(huì)話的環(huán)境管理、也進(jìn)行進(jìn)行hive的表管理等操作。
hive命令需要使用';'進(jìn)行結(jié)束標(biāo)示。
通過(guò)hive -H查看幫助信息:另外從hive0.11版本開(kāi)始支持--database <databasename>.

image.png

Hive Shell常用基本命令

Hive的Shell基本常用命令主要包含退出客戶端、添加文件、修改/查看環(huán)境變量、執(zhí)行l(wèi)inux命令、執(zhí)行dfs命令等。
命令包括:quit、exit、set、add JAR[S] <filepath> <filepath>*、list JAR[S]、delete JAR[S] <filepath>*、! <linux-command>、dfs <dfs command>等。
除了Hive的基本命令外,其他的命令主要是DDL和DML等操作數(shù)據(jù)表的命令。

HiveQL介紹

HiveQL簡(jiǎn)稱HQL,是一種類似sql的查詢語(yǔ)言,絕大多數(shù)語(yǔ)法和sql類似。
HQL支持基本類型和復(fù)雜類型兩大類數(shù)據(jù)類型。
基本類型包括TINYINT(1byte), SMALLINT(2byte), INT(4byte), BIGINT(8byte), FLOAT(4byte), DOUBLE(8byte), BOOLEAN(-), STRING(2G)。
復(fù)雜類型包括ARRAY(一組有序數(shù)組,類型必須一致), MAP(無(wú)序鍵值對(duì),鍵值內(nèi)部字段類型必須相同,而且要求key的類型為基本數(shù)據(jù)類型), STRUCT(一組字段,類型任意)。

show、describe、explain命令介紹

show命令

主要作用是查看database、table、function等組件的名稱信息,也就是通過(guò)show命令我們可以知道我們的hive中有那些database;當(dāng)前database中有那些table。等等。和mysql的show命令類型。

describe命令

主要作用是獲取database、table、partition的具體描述信息,包括存儲(chǔ)位置、字段類型等信息。

explain命令

主要作用是獲取hql語(yǔ)句的執(zhí)行計(jì)劃,我們可以通過(guò)分析這些執(zhí)行計(jì)劃來(lái)優(yōu)化hql語(yǔ)句。

Database介紹

hive提供database的定義,database的主要作用是提供數(shù)據(jù)分割的作用,方便數(shù)據(jù)管理。命令如下:
創(chuàng)建: 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中的表可以分為
內(nèi)部表(托管表)
和外部表,
區(qū)別在于:
外部表的數(shù)據(jù)不是有hive進(jìn)行管理的,也就是說(shuō)當(dāng)刪除外部表的時(shí)候,外部表的數(shù)據(jù)不會(huì)從hdfs中刪除。
而內(nèi)部表是又hive進(jìn)行管理的,在刪除表的時(shí)候,數(shù)據(jù)也會(huì)刪除。
一般情況下,我們?cè)趧?chuàng)建外部表的時(shí)候會(huì)將表數(shù)據(jù)的存儲(chǔ)路徑定義在hive的數(shù)據(jù)倉(cāng)庫(kù)路徑之外。

Hive創(chuàng)建表主要有三種方式,
第一種直接使用create table命令,
第二種使用create table .... AS select ....(會(huì)產(chǎn)生數(shù)據(jù))。
第三種使用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],...)]   -- 表的分區(qū)信息
[CLUSTERED BY (col_name, col_name,....) [SORTED BY (col_name [ASC|DESC],...])] INTO num_buckets BUCKETS] -- 表的分桶信息
[ROW FORMAT row_format] -- 表的數(shù)據(jù)分割信息,格式化信息
[STORED AS file_format] -- 表數(shù)據(jù)的存儲(chǔ)序列化信息
[LOCATION hdfs_path];  -- 數(shù)據(jù)存儲(chǔ)的文件夾地址信息
CREATE [EXTERNAL] TABLE [IF NOT EXISTS]
[db_name.]table_name LIKE existing_table_or_view_name -- 指定要?jiǎng)?chuàng)建的表和已存在表/視圖的名稱
[LOCATION hdfs_path]; -- 數(shù)據(jù)文件存儲(chǔ)的hdfs文件地址信息
CREATE [EXTERNAL] TABLE [IF NOT EXISTS]
[db_name.]table_name   -- 指定要?jiǎng)?chuàng)建的表名
.... 指定partition&bucket等信息,指定數(shù)據(jù)分割符號(hào)。
[AS select_statement]; -- 導(dǎo)入的數(shù)據(jù)

案例1

分別使用默認(rèn)命令創(chuàng)建內(nèi)部表test_manager、外部表test_external以及指定location的內(nèi)部表test_location,然后分別刪除這兩個(gè)表,查看變化情況:命令如下:

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;

刪除表的時(shí)候,內(nèi)部表不管是否指定location,均會(huì)刪除文件夾,外部表一定不會(huì)刪除。

案例2

分別使用三種命令格式創(chuàng)建客戶表customers,customers2,customers3,然后分別查看三張表(全部為內(nèi)部表)的區(qū)別,命令如下:

```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

創(chuàng)建一個(gè)有復(fù)雜數(shù)據(jù)類型的hive表,并明確指定表數(shù)據(jù)的分隔符號(hào),命令如下:

```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

創(chuàng)建一個(gè)使用hbase的外部表,也就是說(shuō)hive表數(shù)據(jù)為hbase的數(shù)據(jù),創(chuàng)建命令格式如下:

```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表結(jié)構(gòu)操作命令

除了創(chuàng)建hive表的命令外,常用的hive表相關(guān)DDL命令有:`describe`(查看表結(jié)構(gòu)信息)、`drop`(刪除表)、`truncate`(重構(gòu)表,也就是先刪除再重新建立)、`alter`(修改表結(jié)構(gòu))等。
常用命令的格式如下所示:
`
```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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容