1. 數(shù)據(jù)定義語(yǔ)言概述
1.1 常見(jiàn)的開(kāi)發(fā)方式
(1) Hive CLI、Beeline CLI
Hive自帶的命令行客戶端
優(yōu)點(diǎn):不需要額外安裝
缺點(diǎn):編寫(xiě)SQL環(huán)境惡劣,無(wú)有效提示,無(wú)語(yǔ)法高亮,誤操作率高
(2) 文本編輯器
Sublime、Emacs、EditPlus等
有些不支持作為客戶端連接Hive服務(wù),但支持SQL語(yǔ)法環(huán)境,那就在編輯器中開(kāi)發(fā)SQL,復(fù)制到Hive CLI執(zhí)行;有些支持安裝插件作為客戶端直連Hive服務(wù);
(3) Hive可視化工具
IntelliJ IDEA、DataGrip、Dbeaver、SQuirrel SQL Client等
可以在Windows、MAC平臺(tái)中通過(guò)JDBC連接HiveServer2的圖像界面工具
Hive可視化工具IntelliJ IDEA
-
配置Hive數(shù)據(jù)源
在IDEA的任意工程中,選擇Database標(biāo)配前配置Hive Driver驅(qū)動(dòng)
配置Driver -
配置數(shù)據(jù)源
配置Hive數(shù)據(jù)源,連接HS2
配置數(shù)據(jù)源 -
Hive可視化使用
編寫(xiě)代碼,選擇需要執(zhí)行的代碼,右鍵執(zhí)行
1.2 DDL概述
SQL中DDL語(yǔ)法的作用
數(shù)據(jù)定義語(yǔ)言是SQL語(yǔ)言集中對(duì)數(shù)據(jù)庫(kù)內(nèi)部的對(duì)象結(jié)構(gòu)進(jìn)行創(chuàng)建,刪除,修改等的草是做語(yǔ)言。DDL核心語(yǔ)法由CREATE、ALTER與DROP三個(gè)組成,DDL并不涉及表內(nèi)部數(shù)據(jù)的操作。
Hive中DDL語(yǔ)法的使用
Hive SQL與標(biāo)準(zhǔn)SQL的語(yǔ)法大同小異,基本相通
基于Hive的設(shè)計(jì)、使用特點(diǎn),HQL中create語(yǔ)法(尤其create table)將是學(xué)習(xí)掌握Hive DDL語(yǔ)法的重中之重
重點(diǎn):完整語(yǔ)法樹(shù)
HIVE DDL CREATE TABLE
CREATE [TEMPORARY] [EXTERNAL] TABLE [IF NOT EXISTS] [db_name.]table_name
[(col_name data_type [COMMENT col_comment], ...)]
[COMMENT table_comment]
[PARTITIONED BY (col_name data_type [COMMENT col_comment], ...)]
[CLUSTERED BY (col_name, col_name, ...)[SORTED BY (col_name[ASC|DESC], ...)] INTO num_buckets BUCKETS]
[ROW FORMAT DELIMITED|SERDE serde_name WITH SERDEPROPERTIES (property_name=property_value, ...)]
[STORED AS file_format]
[LOCATION hdfs_path]
[TBLPROPERTIES (property_name=property_value, ...)]
1.3 Hive數(shù)據(jù)類(lèi)型詳解
Hive數(shù)據(jù)類(lèi)型指的是表中列的字段類(lèi)型
整體分為兩類(lèi):原生數(shù)據(jù)類(lèi)型和復(fù)雜數(shù)據(jù)類(lèi)型
原生數(shù)據(jù)類(lèi)型:數(shù)值類(lèi)型、時(shí)間日期類(lèi)型、字符串類(lèi)型、雜項(xiàng)數(shù)據(jù)類(lèi)型
復(fù)雜數(shù)據(jù)類(lèi)型:array數(shù)組、map映射、struct結(jié)構(gòu)、union聯(lián)合體
注意事項(xiàng)
- Hive SQL中,數(shù)據(jù)類(lèi)型英文字母與大小寫(xiě)不明干
- 除SQL數(shù)據(jù)類(lèi)型外,還支持Java數(shù)據(jù)類(lèi)型,比如字符串string
- 復(fù)雜數(shù)據(jù)類(lèi)型的使用通常需要和分隔符指定語(yǔ)法配合使用
- 如果定義的數(shù)據(jù)類(lèi)型和文件不一致,Hive會(huì)嘗試隱式轉(zhuǎn)化、但是不保證成功
顯示類(lèi)型轉(zhuǎn)換使用CAST函數(shù),比如 CAST(‘100’ as INT),但是轉(zhuǎn)換失敗會(huì)返回null
1.4 Hive讀寫(xiě)文件機(jī)制
SerDe
- SerDe是Serializer、Deserializer的簡(jiǎn)稱,目的是用于序列化和反序列化
- 序列化時(shí)對(duì)象轉(zhuǎn)化為字節(jié)碼的過(guò)程;而反序列化時(shí)字節(jié)碼轉(zhuǎn)換為對(duì)象的過(guò)程
- Hive使用SerDe(包括FileFormat)讀取和寫(xiě)入表行都西昂。需要注意的時(shí),“key”部分在讀取時(shí)會(huì)被忽略,而在寫(xiě)入時(shí)key始終是常數(shù)。基本上行對(duì)象存儲(chǔ)在“value”中。
Read:
HDFS files -> InputFileFormat -> <key,value> -> Deserializer -> Deserializer(反序列化) -> Row object
Write:
Row object -> Serializer(序列化) -> <key,value> -> OutputFileFormat -> HDFS files
SerDe相關(guān)語(yǔ)法
ROW FORMAT這一行所代表的是讀寫(xiě)文件、序列化SerDe相關(guān)的語(yǔ)法,功能有兩個(gè):
1.使用哪個(gè)SerDe類(lèi)進(jìn)行序列化; 2.如何指定分隔符
[ROW FORMAT DELIMITED|SERDE serde_name WITH SERDEPROPERTIES (property_name=property_value, ...)]
DELIMITED和SERDE選其一,如果使用delimited表示使用默認(rèn)的LazySimpleSerDe類(lèi)來(lái)處理數(shù)據(jù);如果數(shù)據(jù)文件格式比較特殊可以使用ROW FORMAT SERDE serde_name指定其他的Serde類(lèi)來(lái)處理數(shù)據(jù),甚至支持用戶自定義SerDe類(lèi)
LazySimpleSerDe分隔符指定
LazySimpleSerDe是Hive默認(rèn)的序列化類(lèi),包含4中子語(yǔ)法,分別用于指定字段之間、集合元素之間、map映射kv之間、換行的分隔符號(hào)。在建表時(shí)可以根據(jù)數(shù)據(jù)的特點(diǎn)靈活搭配使用
ROW FORMAT DELIMITED
[FIELDS TERMINATED BY char] ——> 字段之間分隔符
[COLLECTION ITEMS TERMINATED BY char] ——> 集合元素之間分隔符
[MAP KEYS TERMINATED BY char] ——> Map映射kv之間分隔符
[LINES TERMINATED BY char] ——> 行數(shù)據(jù)之間分隔符
Hive默認(rèn)分隔符:默認(rèn)分隔符是’\001’,使用的是ASCII編碼的值,鍵盤(pán)打不出。
在vim編輯器中連續(xù)輸入ctrl+v/ctrl+a即可輸入’\001’,顯示^A
在一些文本編輯器中將億SOH的形式顯示
指定存儲(chǔ)路徑
- Hive建表的時(shí)候,可以通過(guò)localtion語(yǔ)法來(lái)更改數(shù)據(jù)在HDFS上的存儲(chǔ)路徑,使得建表加載數(shù)據(jù)更加靈活
- 語(yǔ)法:LOCATION ‘<hdfs_location>’
- 對(duì)于已經(jīng)生成好的數(shù)據(jù)文件,使用location指定路徑將會(huì)很方便
[LOCATION hdfs_path]
2.Hive SQL建表基礎(chǔ)語(yǔ)法
2.1 Hive建表語(yǔ)法練習(xí)
2.1.1 原生數(shù)據(jù)類(lèi)型使用
文件名archer.txt,記錄了王者榮耀射手的相關(guān)信息,包括生命、物防等,其中字段之間分隔符為制表符\t,要求在Hive中建表映射成功該文件
數(shù)據(jù)示例:
1 馬可波羅 5584 200 362 remotely archer
show database;
-- 切換數(shù)據(jù)庫(kù)
use testdb;
-- 建表
create table t_archer(
id int comment "ID",
name string comment "英雄名稱",
hp_max int comment "最大生命",
mp_max int comment "最大法力",
attack_max int comment "最高物攻",
defense_max int comment "最高物防",
attack_range string comment "攻擊范圍",
role_main string comment "主要定位",
role_assist string comment "次要定位"
) comment "王者榮耀射手信息"
row format delimited
fields terminated by "\t";
-- 刪除表
drop table t_archer;
2.1.2 復(fù)雜數(shù)據(jù)類(lèi)型使用
文件名hot_hero_skin_price.txt中記錄了手游王者榮耀熱門(mén)的相關(guān)皮膚價(jià)格信息,要求在Hive中建表映射成功該文件。
數(shù)據(jù)示例:字段:id、name(英雄名稱)、win_rate(勝率)、skin_price(皮膚及價(jià)格)
2,魯班七號(hào),54,木偶奇遇記:288-福祿兄弟:288-兄控夢(mèng)想:0
3,鎧,52,龍域領(lǐng)主:288-曙光守護(hù)者:1776
分析:前三個(gè)字段原生數(shù)據(jù)類(lèi)型,最后一個(gè)字段復(fù)雜類(lèi)型map
-- 復(fù)雜數(shù)據(jù)類(lèi)型建表
create table t_hot_hero_skin_price(
id int,
name string,
win_rate int,
skin_price map<string,int> -- 注意這個(gè)map復(fù)雜類(lèi)型
) row format delimited
fields terminated by ',' -- 指定字段之間的分隔符
collection items terminated by '-' -- 指定元素集合之間的分隔符
map keys terminated by ':'; -- 指定map元素kv之間的分隔符
2.1.3 默認(rèn)分隔符使用
文件名team_ace_player.txt,記錄了主要戰(zhàn)隊(duì)內(nèi)最受歡迎的王牌選手信息,字段之間使用的是\001作為分隔符,要求在Hive中建表映射成功該文件
數(shù)據(jù)示例:
1^A成都AG超會(huì)玩^A一諾
分析:數(shù)據(jù)都是原生數(shù)據(jù)類(lèi)型,且字段之間分隔符是\001,因此建表的是偶可以省去row format語(yǔ)句
create table t_team_ace_player(
id int,
team_name string,
ace_player_name string
); -- 沒(méi)有指定row format語(yǔ)句,此時(shí)采用的是默認(rèn)的\001作為字段的分隔符
2.1.4 指定數(shù)據(jù)存儲(chǔ)路徑
文件名team_ace_player.txt,記錄了主要戰(zhàn)隊(duì)內(nèi)最受歡迎的王牌選手信息,字段之間使用的是\001作為分隔符,要求把文件上傳到HDFS任意路徑下,不能移動(dòng)復(fù)制,并在Hive中建表映射成功該文件
create table t_team_ace_player(
id int,
team_name string,
ace_player_name string
) location '/date'; -- 使用location關(guān)鍵字指定本張表在hdfs上的存儲(chǔ)路徑
2.Hive 內(nèi)、外部表
內(nèi)部表
內(nèi)部表也稱為Hive擁有和管理的托管表
默認(rèn)情況下創(chuàng)建的表都是內(nèi)部表,Hive擁有該表的結(jié)構(gòu)和文件(Hive 完全管理表的生命周期),刪除時(shí)會(huì)刪除數(shù)據(jù)及表的元數(shù)據(jù)
可以使用DESCRIBE FORMATTED tablename,來(lái)獲取表的元數(shù)據(jù)描述信息,從中可以看出表的類(lèi)型
外部表
外部表中的數(shù)據(jù)不是Hive擁有或管理的,只管理表元數(shù)據(jù)的生命周期
使用EXTERNAL關(guān)鍵字創(chuàng)建外部表
刪除外部表只會(huì)刪除元數(shù)據(jù),而不會(huì)刪除實(shí)際數(shù)據(jù)
外部表搭配location語(yǔ)法指定數(shù)據(jù)的路徑更安全
-- 創(chuàng)建外部表 需要關(guān)鍵字external
-- 外部表數(shù)據(jù)存儲(chǔ)路徑不指定 默認(rèn)規(guī)則和內(nèi)部表一致
-- 也可以使用location關(guān)鍵字指定HDFS任意路徑
create external table student_ext(
num int,
name string,
sex string,
age int,
dept string
)row format delimited
fields terminated by ','
location '/stu';
如何選擇內(nèi)、外部表
當(dāng)需要通過(guò)Hive完全管理控制表的整個(gè)生命周期時(shí),請(qǐng)使用內(nèi)部表
當(dāng)數(shù)據(jù)來(lái)之不易,防止誤刪,請(qǐng)使用外部表,因?yàn)榧词箘h除表,文件也會(huì)被保留
location關(guān)鍵字的作用
- 在創(chuàng)建外部表的時(shí)候,可以使用location指定存儲(chǔ)位置路徑,如果不指定會(huì)如何?
- 如果不指定location,外部表的默認(rèn)路徑也是位于/usr/hive/warehouse,由默認(rèn)參數(shù)控制
- 創(chuàng)建內(nèi)部表的時(shí)候,是否可以使用location指定?
- 內(nèi)部表可以使用location指定位置
- 是否意味著Hive表的數(shù)據(jù)在HDFS上的位置不是一定要在/usr/hive/warehouse下?
- 不一定,Hive中表數(shù)據(jù)存儲(chǔ)位置,不管內(nèi)部表還是外部表,默認(rèn)都是在/usr/hive/warehouse,當(dāng)然可以在建表的時(shí)候通過(guò)location關(guān)鍵字指定存儲(chǔ)位置在HDFS的任意位置
3.分區(qū)表
3.1 分區(qū)表產(chǎn)生背景
現(xiàn)有6章結(jié)構(gòu)化數(shù)據(jù)文件,分別記錄王者榮耀中6中位置的英雄信息,現(xiàn)要求通過(guò)建立一張表t_all_hero,把6份文件同時(shí)映射加載
只需創(chuàng)建t_all_hero表,然后將6張表拷貝到指定路徑即可。
現(xiàn)要求查詢r(jià)ole_main主要定位時(shí)射手并且hp_max最大生命大于6000的幾個(gè),sql語(yǔ)句如下
select count(*) from t_all_hero where role_main="archer" and hp_max>6000;
存在的問(wèn)題:
- where語(yǔ)句的背后需要進(jìn)行全表掃描才能過(guò)濾出結(jié)果,對(duì)于hive來(lái)說(shuō)需要掃描每一個(gè)文件。如果數(shù)據(jù)文件特表多的話,掃描效率很慢也沒(méi)有必要
- 本需求中,只需掃描archer.txt文件即可
- 指定文件掃描和全表掃描,效率存在差異
分區(qū)表概念
當(dāng)Hive表對(duì)應(yīng)的數(shù)據(jù)量大、文件個(gè)數(shù)多時(shí),為了避免查詢時(shí)全表掃描數(shù)據(jù),Hive支持根據(jù)指定的字段對(duì)表進(jìn)行分區(qū),分區(qū)的字段可以時(shí)日期、地域、種類(lèi)等具有標(biāo)識(shí)意義的字段
-- 注意分區(qū)表創(chuàng)建語(yǔ)法規(guī)則
create table t_all_hero_part(
id int,
name string,
hp_max int,
mp_max int,
attack_max int,
defense_max int,
role_main string,
role_assist string
) partitioned by (role string) -- 分區(qū)字段
row format delimited
fields terminated by "\t";
注意:分區(qū)字段不能是表中已經(jīng)存在的字段,因?yàn)榉謪^(qū)字段最終也會(huì)以虛擬字段的形式顯示在表結(jié)構(gòu)上。
3.2 分區(qū)表數(shù)據(jù)加載——靜態(tài)分區(qū)
靜態(tài)分區(qū)
所謂靜態(tài)分區(qū)是指分區(qū)的屬性值由用戶在加載數(shù)據(jù)的時(shí)候手動(dòng)指定的
語(yǔ)法如下
load data [local] inpath 'filepath' into table tablename partition(分區(qū)字段='分區(qū)值'...);
Local參數(shù)用于指定待加載的數(shù)據(jù)是位于本地文件系統(tǒng)還是HDFS文件系統(tǒng)。
-- 靜態(tài)加載分區(qū)表數(shù)據(jù)
load data local inpath '/root/hivedata/archer.txt' into table t_all_hero_part partition(role='sheshou');
load data local inpath '/root/hivedata/assassin.txt' into table t_all_hero_part partition(role='cike');
...
本質(zhì)
- 分區(qū)的概念提供了一種將Hive表數(shù)據(jù)分離為多個(gè)文件/目錄的方法
- 不同分區(qū)對(duì)應(yīng)著不同的文件夾,同一分區(qū)的數(shù)據(jù)存儲(chǔ)在同一個(gè)文件夾下
- 查詢過(guò)濾的時(shí)候只需要根據(jù)分區(qū)值找到對(duì)應(yīng)的文件夾,掃描文件夾下本分區(qū)下的文件即可,避免全表數(shù)據(jù)掃描
- 這種指定分區(qū)查詢的方式叫做分區(qū)裁剪
3.3 多重分區(qū)表
通過(guò)建表語(yǔ)句中關(guān)于分區(qū)的相關(guān)語(yǔ)法可以發(fā)現(xiàn),Hive支持多個(gè)分區(qū)字段:
PARTITIONED BY (partition1 data_type, partition2 data_type,…)
多重分區(qū)下,分區(qū)之間時(shí)一種遞進(jìn)關(guān)系,可以理解為在前一個(gè)分區(qū)的基礎(chǔ)上繼續(xù)分區(qū)
從HDFS的角度來(lái)看就是文件夾下繼續(xù)瓜分子文件夾。
-- 單分區(qū)表,按身份分區(qū)
create table t_user_province (id int, name string, age int) partitiond by (province string);
-- 雙分區(qū)表,按省份和市分區(qū)
-- 分區(qū)字段之間時(shí)一種遞進(jìn)的關(guān)系,因此要注意分區(qū)字段的順序
create table t_user_province_city (id int, name string, age int) partitiond by (province string, city string);
-- 雙分區(qū)表的數(shù)據(jù)加載 靜態(tài)分區(qū)加載數(shù)據(jù)
load data local inpath '/root/hivedata/user.txt' into table t_user_province_city partition(province='zhejiang', city='hangzhou');
...
-- 雙分區(qū)表的使用,使用分區(qū)進(jìn)行過(guò)濾 減少全表掃描 提高效率
select * from t_user_province_city where province='zhejiang' and city='hangzhou';
3.4 分區(qū)表數(shù)據(jù)加載——?jiǎng)討B(tài)分區(qū)
動(dòng)態(tài)分區(qū)
動(dòng)態(tài)分區(qū)就是分區(qū)的字段值是基于查詢結(jié)果(參數(shù)位置)自動(dòng)推斷出來(lái)的。
核心語(yǔ)法:insert+select
啟用hive動(dòng)態(tài)分區(qū),需要在hive繪畫(huà)中設(shè)置兩個(gè)參數(shù):
# 是否啟用動(dòng)態(tài)分區(qū)功能
set hive.exec.dynamic.partition=true;
# 指定動(dòng)態(tài)分區(qū)模式,分別為nonstrict非嚴(yán)格模式和strict嚴(yán)格模式
# strict嚴(yán)格模式要求至少由一個(gè)分區(qū)為靜態(tài)分區(qū)
set hive.exec.dynamic.partition.mode=nonstrict;
-- 從一張已有的表中執(zhí)行動(dòng)態(tài)分區(qū)插入
insert into table t_all_hero_part_dynamic partition(role) -- 注意:分區(qū)值并沒(méi)有手動(dòng)寫(xiě)死指定
select tmp.*, tmp.role_main from t_all_hero tmp;
4.分桶表
概念
分桶表也叫桶表,是一種用于優(yōu)化查詢而設(shè)計(jì)的表類(lèi)型
分桶表對(duì)應(yīng)的數(shù)據(jù)文件在底層會(huì)被分解為若干個(gè)部分,通俗來(lái)說(shuō)就是被拆分分成若干個(gè)獨(dú)立的小文件。
在分桶時(shí),要指定根據(jù)哪個(gè)字段將數(shù)據(jù)分為幾桶。
規(guī)則
分桶規(guī)則如下:桶編號(hào)相同的數(shù)據(jù)會(huì)被分到同一個(gè)桶當(dāng)中
Bucket number=hash_function(bucketing_column) mod num_buckets
分桶編號(hào) =哈希方法 (分桶字段) 取模 分桶個(gè)數(shù)
hash_function取決于分桶字段bucketing_column的類(lèi)型:
- 如果是int類(lèi)型,hash_function(int) == int;
- 如果是其他比如bigint,string或者復(fù)雜數(shù)據(jù)類(lèi)型,hash_function比較棘手,將是從該類(lèi)型派生的某個(gè)數(shù)字,比如hashcode值
語(yǔ)法
-- 分桶表建表語(yǔ)句
CREATE [EXTERNAL] TABLE [db_name.]table_name
[(col_name data_type,...)]
CLUSTERED BY (col_name)
INTO N BUCKETS;
CLUSTERED BY (col_name) 表示根據(jù)哪個(gè)字段分;
INTO N BUCKETS表示分為幾個(gè)桶
注意:分桶的字段必須是表中已有字段
分桶表的創(chuàng)建
現(xiàn)有美國(guó)2021-1-28號(hào),各縣county的新館疫情累計(jì)案例信息,包括確證病例和死亡病例
數(shù)據(jù)示例:包含字段count_date(統(tǒng)計(jì)日期),county(縣),fips(縣編碼code),cases(累計(jì)確診病例),deaths(累計(jì)死亡病例)
2021-01-28,Jefferson,Alabama,01073,65992,1101
...
根據(jù)state州把數(shù)據(jù)分為5桶,建表語(yǔ)句如下:
CREATE TABLE itheima.t_usa_covid19(
count_date string,
county string,
state string,
fips int,
cases int,
deaths int
) CLUSTERED BY(state) INTO 5 BUCKETS;
在創(chuàng)建分桶表時(shí),還可以指定分桶內(nèi)的數(shù)據(jù)排序規(guī)則:
-- 根據(jù)state州分為5桶,每個(gè)桶內(nèi)根據(jù)cases確診病例數(shù)倒序排序
CREATE TABLE itheima.t_usa_covid19(
count_date string,
county string,
state string,
fips int,
cases int,
deaths int
) CLUSTERED BY(state)
sorted by (cases desc) INTO 5 BUCKETS;
分桶表數(shù)據(jù)加載
-- step1:開(kāi)啟分桶的功能 從Hive2.0開(kāi)始不再需要設(shè)置
set hive.enforce.bucketing=true;
-- step2:把數(shù)據(jù)加載到普通hive表
drop table if exists t_usa_covid19(
count_date string,
county string,
state string,
fips int,
cases int,
deaths int
) row format delimited fields terminated by ",";
-- 將源數(shù)據(jù)上傳到HDFS,t_usa_covid19表對(duì)應(yīng)的路徑下
hadoop fs -put 源數(shù)據(jù) 目標(biāo)路徑
-- step3:使用insert+select語(yǔ)法將數(shù)據(jù)加載到分桶表中
insert into t_usa_covid19_bucket select * from t_usa_covid19;
好處
- 基于分桶字段查詢時(shí),減少全表掃描
-- 基于分桶字段state查詢來(lái)自于New York州的數(shù)據(jù)
-- 不再需要進(jìn)行全表掃描過(guò)濾
-- 根據(jù)分桶的規(guī)則hash_function(New York) mod 5 計(jì)算出分桶編號(hào)
-- 查詢指定分桶里面的數(shù)據(jù)
select * from t_usa_covid19_bucket where state="New York";
-
JOIN時(shí)可以提高M(jìn)R程序效率,減少笛卡爾積數(shù)量
根據(jù)join的字段對(duì)表進(jìn)行分桶操作 -
分桶表數(shù)據(jù)進(jìn)行高效抽樣
當(dāng)數(shù)據(jù)量特別大時(shí),對(duì)全體數(shù)據(jù)進(jìn)行處理存在困難時(shí),抽樣就顯得尤其重要了。抽樣可以從被抽取的數(shù)據(jù)中估計(jì)和推斷出整體的特性。
5.事務(wù)表
局限性
- 尚不支持BEGIN,COMMIT和ROLLBACK。所有語(yǔ)言操作都是自動(dòng)提交的
- 僅支持ORC文件格式(STORED AS ORC)
- 默認(rèn)情況下事務(wù)配置為關(guān)閉。需要配置參數(shù)開(kāi)啟使用
- 表必須是分桶表才可以使用事務(wù)功能
- 表參數(shù)transactional必須為true
- 外部表不能成為ACID表,不允許從非ACID會(huì)話讀取/寫(xiě)入ACID表
創(chuàng)建使用Hive事務(wù)表
在Hive中創(chuàng)建一張具備事務(wù)功能的表,并嘗試進(jìn)行增刪改操作
-- Hive 事務(wù)表
-- step1,創(chuàng)建普通的表
drop table if exists student;
create table student(
num int,
name string,
sex string,
age int,
dept string
) row format delimited
fields terminated by ',';
-- step2:加載數(shù)據(jù)到普通表中
load data local inpath '/root/hivedata/student.txt' into table student;
select * from student;
-- Hive中事務(wù)表的創(chuàng)建使用
-- 1.開(kāi)啟事務(wù)配置(可以使用set設(shè)置當(dāng)前session生效 也可以配置在hive-site.xml中)
set hive.support.concurrency = true; -- Hive是否支持并發(fā)
set hive.enforce.bucketing = true; -- 從Hive2.0開(kāi)始就不再需要 是否開(kāi)啟分桶功能
set hive.exec.dynamic.partition.mode = nonstrict; -- 動(dòng)態(tài)分區(qū)模式 非嚴(yán)格
set hive.txn.manager = org.apache.hadoop.hive.ql.lockmgr.DbTxnManager;
set hive.compactor.initiator.on = true; -- 是否在Metastore實(shí)例上運(yùn)行啟動(dòng)線程和清理線程
set hive.compactor.worker.threads = 1; -- 在此metastore實(shí)例上運(yùn)行多個(gè)壓縮程序工作線程
-- 2.創(chuàng)建Hive事務(wù)表
create table trans_student(
id int,
name string,
age int
) clustered by (id) into 2 buckets stored as orc TBLPROPERTIES('transactional'='true');
--注意:事務(wù)表創(chuàng)建幾個(gè)要素:開(kāi)啟參數(shù)、分桶、存儲(chǔ)格式orc、表屬性
-- 3.針對(duì)事務(wù)表進(jìn)行insert update delete操作
insert into trans_student values(1,"allen",18);
6.視圖
概念
- Hive中的試圖是一種虛擬表,只保存定義,不實(shí)際存儲(chǔ)數(shù)據(jù)
- 通常從真實(shí)的物理表查詢中創(chuàng)建生成視圖,也可以從已經(jīng)存在的視圖上創(chuàng)建新視圖
- 創(chuàng)建視圖時(shí),將凍結(jié)視圖的架構(gòu),如果刪除或更改基礎(chǔ)表,則視圖將失效
- 視圖是用來(lái)簡(jiǎn)化操作的,不緩沖記錄,也沒(méi)有提高查詢性能
-- Hive View 視圖相關(guān)語(yǔ)法
-- hive中有一張真實(shí)的基礎(chǔ)表t_usa_covid19
select * from t_usa_covid19;
-- 1.創(chuàng)建視圖
create view v_usa_covid19 as select count_date, county, state, deaths from t_usa_covid19 limit 5;
-- 能否從已有的視圖中創(chuàng)建視圖 可以的
create view v_usa_covid19_from_view as select * from v_usa_covid19 limit 2;
-- 2.顯示當(dāng)前已有的視圖
show tables;
show views; -- hive v2.2.0之后支持
-- 3.視圖的查詢使用
select * from v_usa_covid19;
-- 注意:視圖不支持插入數(shù)據(jù)
-- 4.查看視圖定義
show create table v_usa_covid19;
-- 5.刪除視圖
drop view v_usa_covid19_from_view;
-- 6.更改視圖屬性
alter view v_usa_covid19 set TBLPROPERTIES ('comment' = 'This is a view');
-- 7.更改視圖定義
alter view v_usa_covid19 as select county, deaths from t_usa_covid19 limit 2;
視圖的好處
- 將真實(shí)表中特定的列數(shù)據(jù)提供給用戶,保護(hù)數(shù)據(jù)隱私
-- 通過(guò)視圖來(lái)限制數(shù)據(jù)訪問(wèn)可以用來(lái)保護(hù)信息不被隨意查詢
create table userinfo(firstname string, lastname string, ssn string, password string);
create view safer_user_info as select firstname,lastname from userinfo;
-- 可以通過(guò)where子句限制數(shù)據(jù)訪問(wèn),比如,提供一個(gè)員工表視圖,只暴露來(lái)自特定部門(mén)的員工信息
create table employee(firstname string, lastname string, ssn string, password string, department string);
create view techops_employee as select firstname, lastname, ssn from userinfo where department='java';
- 降低查詢的復(fù)雜度,優(yōu)化查詢語(yǔ)句
-- 使用視圖優(yōu)化嵌套查詢
from(
select * from people join cart
on(cart.people_id = people.id) where firstname = 'join'
) a select a.lastname where a.id = 3;
-- 把嵌套子查詢變成一個(gè)視圖
create view shorter_join as
select * from people join cart
on(cart.people_id = people.id) where firstname = 'join';
-- 基于視圖查詢
select lastname from shorter_join where id = 3;
7.Hive3.0新特性:物化視圖
概念
- 物化視圖是一個(gè)包括查詢結(jié)果的數(shù)據(jù)庫(kù)對(duì)象,可以用于預(yù)先計(jì)算并保存表連接或聚集等耗時(shí)較多的操作結(jié)果。在執(zhí)行查詢時(shí),就可以避免進(jìn)行這些耗時(shí)的操作,從而快速得到的結(jié)果
- 使用物化視圖的目的就是通過(guò)預(yù)計(jì)算,提高查詢性能,當(dāng)然需要占用一定的存儲(chǔ)空間
- Hive3.0開(kāi)始嘗試引入物化視圖,并提供對(duì)于物化視圖的查詢自動(dòng)重寫(xiě)機(jī)制(基于Apache Calcite實(shí)現(xiàn))
- Hive的物化視圖還提供了物化視圖存儲(chǔ)選擇機(jī)制,可以本地存儲(chǔ)在Hive,也可以通過(guò)用戶自定義storage handlers存儲(chǔ)在其他系統(tǒng)
- Hive引入物化視圖的目的就是為了優(yōu)化數(shù)據(jù)查詢?cè)L問(wèn)的效率,相當(dāng)于從數(shù)據(jù)預(yù)處理的角度優(yōu)化數(shù)據(jù)訪問(wèn)
- Hive從3.0丟棄了index索引的語(yǔ)法支持,推薦使用物化視圖和列式存儲(chǔ)文件格式來(lái)加快查詢的速度
物化視圖、視圖的區(qū)別
- 視圖是虛擬的,邏輯存在的,只有定義沒(méi)有存儲(chǔ)數(shù)據(jù)
- 物化視圖是真實(shí)存在的,物理存儲(chǔ)的,里面存儲(chǔ)著與計(jì)算的數(shù)據(jù)
- 視圖的目的是簡(jiǎn)化降低查詢的復(fù)雜度,而物化視圖的目的是提高查詢性能
語(yǔ)法
-- 物化視圖的創(chuàng)建語(yǔ)法
CREATE MATERIALIZED VIEW [IF NOT EXISTS] [db_name.]materialized_view_name
[DISABLE REWRITE]
[COMMENT materialized_view_comment]
[PARTITIONED ON (col_name, ...)]
[CLUSTERED ON (col_name, ...) | DISTRIBUTED ON (col_name, ...) SORTED ON (col_name, ...)]
[
[ROW FORMATE row_format]
[STORED AS file_format]
| STORED BY 'storage.handler.class.name' [WITH SERDEPROPERTIES (...)]
]
[LOCATION hdfs_path]
[TBLPROPERTIES(property_name=property_value, ...)]
AS SELECT ...;
(1) 物化視圖創(chuàng)建后,select拆線呢執(zhí)行數(shù)據(jù)自動(dòng)落地,“自動(dòng)”也即在query的執(zhí)行期間,任何用戶對(duì)該物化視圖是不可見(jiàn)的,執(zhí)行完畢之后物化視圖可用;
(2) 默認(rèn)情況下,創(chuàng)建好的物化視圖可被用于查詢優(yōu)化器optimizer查詢重寫(xiě),在物化視圖創(chuàng)建期間可以通過(guò)DISABLE PEWRITE參數(shù)設(shè)置禁止使用
(3) 默認(rèn)SerDe和storage format為hive。materializedview.serde、hive.materializedview.fileformat;
(4) 物化視圖支持將數(shù)據(jù)存儲(chǔ)在外部系統(tǒng)(如druid),語(yǔ)法如下所示:
CREATE MATERIALIZED VIEW druid_wiki_mv
STORED AS 'org.apache.hadoop.hive.druid.DruidStorageHandler'
AS
SELECT __time,page.user,c_added,c_removed
FROM src;
(5) 目前支持物化視圖的drop和show操作,后續(xù)會(huì)增加其他操作
-- Drops a materialized view
DROP MATERIALIZED VIEW [db_name.]materialized_view_name;
-- Shows materialized views (with optional filters)
SHOW MATERIALIZED VIEW [IN database_name];
-- Shows information about a specific materialized view
DESCRIBE [EXTENDED | FORMATTED] [db_name.]materialized_view_name;
(6) 當(dāng)數(shù)據(jù)源變更(新數(shù)據(jù)插入inserted、數(shù)據(jù)修改modified),物化視圖也需要更新以保持?jǐn)?shù)據(jù)一致性,目前需要用戶主動(dòng)觸發(fā)rebuild重構(gòu)
ALTER MATERIALIZED VIEW [db_name.]materialized_view_name REBUILD;
基于物化視圖的查詢重寫(xiě)
- 物化視圖創(chuàng)建后即可用于相關(guān)查詢的加速,即:用戶提交查詢query,若該query經(jīng)過(guò)重寫(xiě)后可以命中已經(jīng)存在的物化視圖,則直接通過(guò)物化視圖查詢數(shù)據(jù)返回結(jié)果,以實(shí)現(xiàn)查詢加速
- 是否重寫(xiě)查詢使用物化視圖可以通過(guò)全局參數(shù)控制,默認(rèn)為true:hive.materializedview.rewriting=true;
- 用戶可選擇性的控制指定的物化視圖查詢重寫(xiě)機(jī)制,語(yǔ)法如下
ALTER MATERIALIZED VIEW [db_name.]materialized_view_name ENABLE|DISABLE REWRITE;
案例:基于物化視圖的查詢重寫(xiě)
-- 1.新建一張事務(wù)表 student_trans
set hive.support.concurrency = true; -- Hive是否支持并發(fā)
set hive.enforce.bucketing = true; -- 從Hive2.0開(kāi)始就不再需要 是否開(kāi)啟分桶功能
set hive.exec.dynamic.partition.mode = nonstrict; -- 動(dòng)態(tài)分區(qū)模式 非嚴(yán)格
set hive.txn.manager = org.apache.hadoop.hive.ql.lockmgr.DbTxnManager;
set hive.compactor.initiator.on = true; --是否在Metastore實(shí)例上運(yùn)行啟動(dòng)線程和清理線程
set hive.compactor.worker.threads= 1 -- 在此metastore實(shí)例上運(yùn)行多少個(gè)壓縮程序工作線程
drop table if exists student_trans;
CREATE TABLE student_trans(
sno int,
sname string,
sdept string
) clustered by (sno) into 2 buckets stored as orc TBLPROPERTIES('transactional'='true');
-- 2.導(dǎo)入數(shù)據(jù)到student_trans中
insert overwrite table student_trans
select num,name,dept
from student;
select *
from student_trans;
-- 3.對(duì)student_trans建立聚合物化視圖
CREATE MATERIALIZED VIEW student_trans_agg
AS SELECT sdept, count(*) as sdept_cnt from student_trans group by sdept;
-- 注意:這里當(dāng)執(zhí)行CREATE MATERIALIZED VIEW,會(huì)啟動(dòng)一個(gè)MR對(duì)物化視圖進(jìn)行構(gòu)建
-- 可以發(fā)現(xiàn)當(dāng)下數(shù)據(jù)庫(kù)中有一個(gè)物化視圖
show tables;
show materialized views;
-- 4.對(duì)于原始表student_trans拆線呢
-- 由于會(huì)命中物化視圖,重寫(xiě)query查詢物化視圖,查詢速度會(huì)加快(沒(méi)有啟動(dòng)MR,只是普通的table scan)
SELECT sdept,count(*) as sdept_cnt from student_trans group by sdept;
-- 5.查詢執(zhí)行計(jì)劃可以發(fā)現(xiàn) 查詢被自動(dòng)重寫(xiě)為 TableScan alias
-- 轉(zhuǎn)化成了物化視圖的查詢 提高了查詢效率
explain SELECT sdept,count(*) as sdept_cnt from student_trans group by sdept;
-- 驗(yàn)證禁用物化視圖自動(dòng)重寫(xiě)
ALTER MATERIALIZED VIEW student_trans_agg DISABLE REWRITE;
-- 刪除物化視圖
drop materialized view student_trans_agg;
8.Hive Database|Schema(數(shù)據(jù)庫(kù))DDL操作
整體概述
- 在Hive中,DATABASE的概念和RDBMS中類(lèi)似,稱為數(shù)據(jù)庫(kù),DATABASE和SCHEMA是可互換的,都可以使用
- 默認(rèn)的數(shù)據(jù)庫(kù)叫做default,存儲(chǔ)數(shù)據(jù)位于/user/hive/warehouse下
- 用戶自己創(chuàng)建的數(shù)據(jù)庫(kù)存儲(chǔ)位置是/user/hive/warehouse/database_name.db下
create database
用于創(chuàng)建新的數(shù)據(jù)庫(kù)
COMMENT:數(shù)據(jù)庫(kù)的注釋說(shuō)明語(yǔ)句
LOCATION:指定數(shù)據(jù)庫(kù)在HDFS存儲(chǔ)位置,默認(rèn)/user/hive/warehouse/dbname.db
WITH DBPROPERTIES:用于指定一些數(shù)據(jù)庫(kù)的屬性配置
CREATE (DATABASE|SCHEMA) [IF NOT EXISTS] database_name
[COMMENT database_comment]
[LOCATION hdfs_path]
[WITH DBPROPERTIES (property_name = property_value, ...)];
describe database
顯示Hive中數(shù)據(jù)庫(kù)的名稱,注釋(如果已設(shè)置)及其在文件系統(tǒng)上的位置等信息
EXTENDED關(guān)鍵字用于顯示更多信息。可以將關(guān)鍵字describe簡(jiǎn)寫(xiě)成desc使用
語(yǔ)法:
DESCRIBE DATABASE|SCHEMA [EXTENDED] db_name;
use database
選擇特定的數(shù)據(jù)庫(kù)
切換當(dāng)前會(huì)話使用哪個(gè)數(shù)據(jù)庫(kù)進(jìn)行操作
drop database
刪除數(shù)據(jù)庫(kù)
默認(rèn)行為是RESTRICT,這意味著僅在數(shù)據(jù)庫(kù)為空時(shí)才刪除它。
要?jiǎng)h除帶有表的數(shù)據(jù)庫(kù)(不為空的數(shù)據(jù)庫(kù)),我們可以使用CASCADE
DROP (DATABASE|SCHEMA) [IF EXISTS] database_name [RESTRICT|CASCADE];
alter database
更改與Hive中的數(shù)據(jù)庫(kù)關(guān)聯(lián)的元數(shù)據(jù)
-- 更改數(shù)據(jù)庫(kù)屬性
ALTER (DATABASE|SCHEMA) database_name SET DBPROPERTIES (property_name = property_value, ...);
-- 更改數(shù)據(jù)庫(kù)所有者
ALTER (DATABASE|SCHEMA) database_name SET OWNER USER user;
-- 更改數(shù)據(jù)庫(kù)位置
ALTER (DATABASE|SCHEMA) database_name SET LOCATION hdfs_path;
-- 創(chuàng)建數(shù)據(jù)庫(kù)
create database if not exists test
comment "this is test db"
with dbproperties('createdBy'='Allen');
-- 描述數(shù)據(jù)庫(kù)信息
describe database test;
describe database extended test;
desc database extended test;
-- 切換數(shù)據(jù)庫(kù)
use default;
use test;
-- 刪除數(shù)據(jù)庫(kù)
-- 注意:CASCADE關(guān)鍵字謹(jǐn)慎使用
drop database test;
9.Hive Table(表) DDL操作
整體概述
- Hive中針對(duì)表的DDL操作可以說(shuō)時(shí)DDL中的核心操作,包括建表、修改表、刪除表、描述表元數(shù)據(jù)信息
- 其中以建表語(yǔ)句為核心中的核心,詳見(jiàn)Hive DDL建表語(yǔ)句
- 可以說(shuō)表的定義是否成功直接影響數(shù)據(jù)能夠成功映射,進(jìn)而影響是否可以孫儷的使用Hive開(kāi)展數(shù)據(jù)分析
- 由于Hive建表之后加載映射數(shù)據(jù)很快,實(shí)際中如果建表有問(wèn)題,可以不用修改,直接刪除重建
describe table
顯示Hive中表的元數(shù)據(jù)信息
如果指定了EXTENDED關(guān)鍵字,則它將以Thrift序列化形式顯示表的所有元數(shù)據(jù)
如果指定了FORMATTED關(guān)鍵字,則它將以表格格式顯示元數(shù)據(jù)
drop table
刪除該表的元數(shù)據(jù)和數(shù)據(jù)
如果已配置垃圾桶且未指定PURGE,則該表對(duì)應(yīng)的數(shù)據(jù)實(shí)際上將移動(dòng)到HDFS垃圾桶,而元數(shù)據(jù)完全丟
刪除EXTERNAL表時(shí),該表中的數(shù)據(jù)不會(huì)從文件系統(tǒng)中刪除,只刪除元數(shù)據(jù)
如果指定了PURGE,則表數(shù)據(jù)跳過(guò)HDFS垃圾桶直接被刪除。因此如果DROP失敗,則無(wú)法挽回該表數(shù)據(jù)
DROP TABLE [IF EXISTS] table_name [PURGE];
truncate table
從表中刪除所有行
可以簡(jiǎn)單理解為清空表的所有數(shù)據(jù)但是保留表的元數(shù)據(jù)結(jié)構(gòu)
如果HDFS啟用了垃圾桶,數(shù)據(jù)將被丟進(jìn)垃圾桶,否則將被刪除
TRUNCATE [TABLE] table_name;
alter table
-- 1.更改表名
ALTER TABLE table_name RENAME TO new_table_name;
-- 2.更改表屬性
ALTER TABLE table_name SET TBLPROPERTIES (property_name = property_value, ...);
-- 更改表注釋
ALTER TABLE student SET TBLPROPERTIES ('comment' = "new comment for student table");
-- 3.更改SerDE屬性
ALTER TABLE table_name SET SERDE serde_class_name [WITH SERDEPROPERTIES (property_name = property_value, ...)];
ALTER TABLE table_name [PARTITION partition_spec] SET SERDEPROPERTIES serde_properties;
ALTER TABLE table_name SET SERDEPROPERTIES ('field.delim'=',');
-- 移出SerDe屬性
ALTER TABLE table_name [PARTITION partition_spec] UNSET SERDEPROPERTIES (property_name, ...);
-- 4.更改表的文件存儲(chǔ)格式 該操作僅更改表元數(shù)據(jù),校友數(shù)據(jù)的人格轉(zhuǎn)換都必須在Hive之外進(jìn)行
-- 5.更改表的存儲(chǔ)位置路徑
ALTER TABLE table_name SET LOCATION "new location";
-- 6.更改列名稱/類(lèi)型/位置/注釋
CREATE TABLE test_change (a int, b int, c int);
ALTER TABLE test_change CHANGE a a1 INT;
ALTER TABLE test_change CHANGE a1 a2 STRING AFTER b;
ALTER TABLE test_change CHANGE c c1 INT FIRST;
ALTER TABLE test_change CHANGE a1 a1 INT COMMENT 'this is column a1';
-- 7.添加/替換列
-- 使用 ADD COLUMNS,可以將新列添加到現(xiàn)有列的末尾但在分區(qū)列之前
-- REPLACE COLUMNS,將刪除所有現(xiàn)有列,并添加新的列集
ALTER table_name ADD|REPLACE COLUMNS (col_name data_type,...);
10.add partition(分區(qū)) DDL操作
- ADD PARTITION會(huì)更改表元數(shù)據(jù),但不會(huì)加載數(shù)據(jù)。如果分區(qū)位置中不存在數(shù)據(jù),查詢時(shí)將不會(huì)返回結(jié)果
- 因此需要保證增加的分區(qū)位置路徑下,數(shù)據(jù)已經(jīng)存在,或者增加完糞污之后導(dǎo)入分區(qū)數(shù)據(jù)。
-- 1.增加分區(qū)
ALTER TABLE table_name ADD PARTITION (df='20170101') location '/user/hadoop/warehouse/table_name/dt=20170101'
-- 一次添加一個(gè)分區(qū)
ALTER TABLE table_name ADD PARTITION (dt='2008-08-08',county='us') location '/path/to/us/part080808' PARTITION (df='2008-08-09', country='us') location '/path/to/us/part080809';
-- 一次添加多個(gè)分區(qū)
rename partition
-- 2.重命名分區(qū)
ALTER TABLE table_name PARTITION partition_spec RENAME TO PARTITION partition_spec;
ALTER TABLE table_name PARTITION (dt='2008-08-09') RENAME TO PARTITION (dt='20080809')
delete partition
刪除表的分區(qū),將刪除該分區(qū)的數(shù)據(jù)和元數(shù)據(jù)
-- 3.刪除分區(qū)
ALTER TABLE table_name DROP [IF EXISTS] PARTITION (dt='2008-08-08', country='us');
ALTER TABLE table_name DROP [IF EXISTS] PARTITION (dt='2008-08-08', country='us') PURGE; -- 直接刪除數(shù)據(jù) 不進(jìn)垃圾桶
alter partition文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-526658.html
-- 5.修改分區(qū)
-- 更改分區(qū)文件存儲(chǔ)格式
ALTER TABLE table_name PARTITION (dt='2008-08-09') SET FILEFORMAT file_format;
-- 更改分區(qū)位置
ALTER TABLE table_name PARTITION (df='2008-08-09') SET LOCATION "new location";
MSCK partition
MSCK是metastore check的縮寫(xiě),表示元數(shù)據(jù)檢查操作,可用于元數(shù)據(jù)修復(fù)文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-526658.html
- MSCK 默認(rèn)行為ADD PARTITIONS,它把HDFS上存在但元存儲(chǔ)中不存在的所有分區(qū)添加到metastore
- DROP PARTITIONS選項(xiàng)將從已經(jīng)從HDFS中刪除的metastore中刪除分區(qū)信息
- SYNC PARTITIONS選項(xiàng)等效于調(diào)用ADD和DROP PARTITIONS
- 如果存在大量未跟蹤的分區(qū),則可以批量運(yùn)行MSCK PEPAIR TABLE,以避免OOME(內(nèi)存不足錯(cuò)誤)
-- 分區(qū)修復(fù)
MSCK [PEPAIR] TABLE table_name [ADD/DROP/SYNC PARTITIONS];
11.Hive show 語(yǔ)法
-- 1.顯示所有數(shù)據(jù)庫(kù) SCHEMAS和DATABASES的用法 功能一樣
show database;
show schemas;
-- 2.顯示當(dāng)前數(shù)據(jù)庫(kù)所有表/視圖/物化視圖/分區(qū)/索引
show tables;
SHOW TABLES [IN database_name]; -- 指定某個(gè)數(shù)據(jù)庫(kù)
-- 3.顯示當(dāng)前數(shù)據(jù)庫(kù)下所有視圖
show views;
show views 'test_*';
show views from test1;
SHOW VIEWS [IN/FROM database_name];
-- 4.顯示當(dāng)前數(shù)據(jù)庫(kù)下所有物化視圖
SHOW MATERIALIZED VIEW [IN/FROM database_name];
-- 5.顯示分區(qū)信息,分區(qū)按字母順序列出,不是分區(qū)表執(zhí)行該語(yǔ)句會(huì)報(bào)錯(cuò)
show partitions table_name;
-- 6.顯示表/分區(qū)的擴(kuò)展信息
SHOW TABLE EXTENDED [IN|FROM database_name] LIKE table_name;
show table extended like student;
-- 7.顯示表的屬性信息
SHOW TBLPROPERTIES table_name;
show tblproperties student;
-- 8.顯示表、視圖的創(chuàng)建語(yǔ)句
SHOW CREATE TABLE ([db_name.]table_name|view_name)
show create table student;
-- 9.顯示表的所有列,包括分區(qū)列
SHOW COLUMNS (FORM|IN) table_name [(FROM|IN) db_name];
show columns in student;
-- 10.顯示當(dāng)前支持的所有自定義和內(nèi)置的函數(shù)
show functions;
-- 11.Describe desc
-- 查詢表信息
desc extended table_name;
-- 查看表信息(格式化美觀)
desc formatted table_name;
-- 查看數(shù)據(jù)庫(kù)相關(guān)信息
describe database database_name;
到了這里,關(guān)于3.Hive SQL數(shù)據(jù)定義語(yǔ)言(DDL)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!