Hive數(shù)據(jù)類型和DDL操作

hive命令

在安裝Hive的Linux服務(wù)器終端中直接輸入如下命令,可以查看幫助信息:

# hive -help
Hive使用01.png

常用的如-e求厕、-f參數(shù)趣苏。
使用-e參數(shù),可以直接在命令行傳遞SQL語句進行hive表數(shù)據(jù)的查詢:

# hive -e "select * from testhive.testtable"
Hive使用02.png

使用-f參數(shù)凿歼,可以在命令行中傳遞文件進行進行hive表數(shù)據(jù)的查詢褪迟,首先使用如下命令創(chuàng)建一個名為test.hql的文件:

# vim test.hql

在該文件中寫入SQL語句:

select * from testhive.testtable

然后在Linux命令行執(zhí)行如下命令:

# hive -f test.hql
Hive使用03.png

并且該執(zhí)行查詢的結(jié)果可以追加到文件中:

# hive -f test.hql > result.txt
# cat result.txt
Hive使用04.png

執(zhí)行如下命令,可以查看hive中執(zhí)行過的所有歷史命令:

# cat .hivehistory
Hive使用05.png

Hive的其他配置

現(xiàn)在hive查詢出來的數(shù)據(jù)顯示很不友好答憔,為了顯示數(shù)據(jù)頭信息味赃,通過如下配置文件項開啟配置:

<property>
  <name>hive.cli.print.header</name>
  <value>true</value>
</property>
Hive使用06.png

在Hive客戶端中時,為了顯示當前操作哪個數(shù)據(jù)庫虐拓,通過如下配置文件項開啟配置:

<property>
  <name>hive.cli.print.current.db</name>
  <value>true</value>
</property>
Hive使用07.png

Hive使用08.png

Hive的set

在Hive的客戶端中心俗,可以使用set命令進行配置,該配置當前操作有效:

hive (default)> set hive.cli.print.current.db=false;
Hive使用09.png

關(guān)閉了當前操作的數(shù)據(jù)庫位置顯示蓉驹。

Hive的數(shù)據(jù)類型

基本數(shù)據(jù)類型

Hive的數(shù)據(jù)類型與Java的數(shù)據(jù)類型對應(yīng)關(guān)系:

Hive數(shù)據(jù)類型 Java數(shù)據(jù)類型 描述
TINYINT byte 1byte整數(shù)
SMALLINT short 2byte整數(shù)
INT int 4byte整數(shù)
BIGINT long 8byte整數(shù)
BOOLEAN boolean true/false
FLOAT float 單精度浮點數(shù)
DOUBLE double 雙精度浮點數(shù)
STRING string 字符城榛,可以用單引號或雙引號
TIMESTAMP 時間類型
BINARY 字節(jié)數(shù)組

集合數(shù)據(jù)類型

數(shù)據(jù)類型 描述
STRUCT 結(jié)構(gòu)體,通過“點”符號訪問元素內(nèi)容
MAP 一組鍵-值對元祖集合戒幔,使用數(shù)組表示法可以訪問數(shù)據(jù)
ARRAY 是一組具有想同類型和名稱的變量的集合

DDL操作

DDL(Data Definition Language:數(shù)據(jù)定義語言)主要是用在定義表結(jié)構(gòu)吠谢、改變表的結(jié)構(gòu)、改變表數(shù)據(jù)類型诗茎、改變表之間的鏈接和約束等工坊。

創(chuàng)建數(shù)據(jù)庫

創(chuàng)建一個數(shù)據(jù)庫:

 > create database db_testdb;

若創(chuàng)建的數(shù)據(jù)庫已經(jīng)存在,則會報錯敢订,這時可以使用if not exists判斷:

> create database if not exists db_testdb;

Hive使用10.png


標準寫法是使用if not exists判斷的創(chuàng)建數(shù)據(jù)庫語句王污。

查詢數(shù)據(jù)庫

查詢Hive中的數(shù)據(jù)庫:

> show databases;

查詢數(shù)據(jù)庫信息:

> desc database db_testdb;

查詢數(shù)據(jù)庫詳細信息(數(shù)據(jù)庫有額外的屬性時):

> desc database extended db_testdb;

切換數(shù)據(jù)庫:

> use testhive;
Hive使用11.png

刪除數(shù)據(jù)庫

刪除空的數(shù)據(jù)庫:

> drop database db_testdb;

若刪除的數(shù)據(jù)庫不存在,則會報錯楚午,這時可以使用if exists判斷:

drop database if exists db_testdb;

使用cascade昭齐,強制刪除有數(shù)據(jù)的數(shù)據(jù)庫:

drop database if exists db_testdb cascade;
Hive使用12.png

創(chuàng)建數(shù)據(jù)庫表

建表語法:

CREATE [EXTERNAL] TABLE [IF NOT EXISTS] 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 row_format] 
[STORED AS file_format] 
[LOCATION hdfs_path]

字段解釋說明:

  • CREATE TABLE 創(chuàng)建一個指定名字的表,如果相同名字的表已經(jīng)存在矾柜,則拋出異常阱驾;用戶可以用 IF NOT EXISTS 選項來忽略這個異常就谜。
  • EXTERNAL關(guān)鍵字可以讓用戶創(chuàng)建一個外部表,在建表的同時指定一個指向?qū)嶋H數(shù)據(jù)的路徑(LOCATION)里覆,Hive創(chuàng)建內(nèi)部表時丧荐,會將數(shù)據(jù)移動到數(shù)據(jù)倉庫指向的路徑;若創(chuàng)建外部表喧枷,僅記錄數(shù)據(jù)所在的路徑虹统,不對數(shù)據(jù)的位置做任何改變。在刪除表的時候隧甚,內(nèi)部表的元數(shù)據(jù)和數(shù)據(jù)會被一起刪除车荔,而外部表只刪除元數(shù)據(jù),不刪除數(shù)據(jù)戚扳。
  • COMMENT:為表和列添加注釋忧便。
  • PARTITIONED BY創(chuàng)建分區(qū)表。
  • CLUSTERED BY創(chuàng)建分桶表咖城。
  • SORTED BY外部表數(shù)據(jù)源茬腿,例如后續(xù)使用的Hbase數(shù)據(jù)。
  • ROW FORMAT
    DELIMITED [FIELDS TERMINATED BY char] [COLLECTION ITEMS TERMINATED BY char] [MAP KEYS TERMINATED BY char] [LINES TERMINATED BY char]
    | SERDE serde_name [WITH SERDEPROPERTIES (property_name=property_value, property_name=property_value, ...)]
    用戶在建表的時候可以自定義SerDe或者使用自帶的SerDe宜雀。如果沒有指定ROW FORMAT 或者ROW FORMAT DELIMITED切平,將會使用自帶的SerDe。在建表的時候辐董,用戶還需要為表指定列悴品,用戶在指定表的列的同時也會指定自定義的SerDe,Hive通過SerDe確定表的具體的列的數(shù)據(jù)简烘。
    SerDe是Serialize/Deserilize的簡稱苔严,目的是用于序列化和反序列化。
  • STORED AS指定存儲文件類型
    常用的存儲文件類型:SEQUENCEFILE(二進制序列文件)孤澎、TEXTFILE(文本)届氢、RCFILE(列式存儲格式文件)
    如果文件數(shù)據(jù)是純文本,可以使用STORED AS TEXTFILE覆旭。如果數(shù)據(jù)需要壓縮退子,使用 STORED AS SEQUENCEFILE。
  • LOCATION :指定表在HDFS上的存儲位置型将。
  • LIKE允許用戶復(fù)制現(xiàn)有的表結(jié)構(gòu)寂祥,但是不復(fù)制數(shù)據(jù)。

內(nèi)部表

默認創(chuàng)建的表都是內(nèi)部表七兜,這類表有Hive控制生命周期丸凭,默認會將表數(shù)據(jù)存儲在配置文件中配置項指定的目錄下:

  <property>
    <name>hive.metastore.warehouse.dir</name>
    <value>/root/hive/warehouse</value>
    <description>location of default database for the warehouse</description>
  </property>

當刪除內(nèi)部表時,該表的數(shù)據(jù)也會被刪除。
\color{red}{說明:內(nèi)部表不適合與其他工具共享數(shù)據(jù)惜犀。}

  1. 創(chuàng)建表
> create table if not exists tableone (id int,name string) row format delimited fields terminated by '\t';
  1. 根據(jù)已經(jīng)存在的表結(jié)構(gòu)創(chuàng)建表
> create table if not exists tabletwo like tableone;
  1. 查詢表類型
> desc tableone;
Hive使用13.png

外部表

外部表铛碑,Hive并不完全擁有數(shù)據(jù)。
例如:數(shù)據(jù)存儲在Hbase的表中向拆,此時創(chuàng)建的外部表若刪除亚茬,則數(shù)據(jù)仍然存儲在Hbase中,不會被刪除浓恳。
此處使用前文中的Hbase中的表testtableone(前文連接:http://www.reibang.com/p/cf8730708782),進行操作:

Hive使用14.png

  1. 創(chuàng)建外部表
create external table if not exists htesttableone (row2 string,info map<string,string>) stored by 'org.apache.hadoop.hive.hbase.HBaseStorageHandler' with serdeproperties("hbase.columns.mapping" = ":key,info:") tblproperties("hbase.table.name" = "testtableone");
Hive使用15.png
  1. 查詢表類型:
> desc formatted htesttableone;

可以看到表類型為外部表:


Hive使用16.png

表類型轉(zhuǎn)換

  1. 查詢tabletwo表類型:
> desc formatted tabletwo;
Hive使用17.png
  1. 內(nèi)部表轉(zhuǎn)換為外部表
> alter table tabletwo set tblproperties('EXTERNAL'='TRUE');
Hive使用18.png
  1. 外部表轉(zhuǎn)換為內(nèi)部表
> alter table tabletwo set tblproperties('EXTERNAL'='FALSE');
Hive使用19.png

修改表名

> alter table tabletwo rename to tablethree;

Hive使用20.png


與Hbase數(shù)據(jù)表關(guān)聯(lián)的Hive外部表碗暗,不能進行表類型轉(zhuǎn)換颈将,也不能修改表名,若需要修改表名則需在Hbase中進行修改言疗。

刪除表

> drop table htesttableone;

刪除外部表晴圾,可以看到Hbase中,該數(shù)據(jù)表仍然存在噪奄,不會被刪除死姚。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市勤篮,隨后出現(xiàn)的幾起案子都毒,更是在濱河造成了極大的恐慌,老刑警劉巖碰缔,帶你破解...
    沈念sama閱讀 206,482評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件账劲,死亡現(xiàn)場離奇詭異,居然都是意外死亡金抡,警方通過查閱死者的電腦和手機瀑焦,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,377評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來梗肝,“玉大人榛瓮,你說我怎么就攤上這事∥谆鳎” “怎么了禀晓?”我有些...
    開封第一講書人閱讀 152,762評論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長喘鸟。 經(jīng)常有香客問我匆绣,道長,這世上最難降的妖魔是什么什黑? 我笑而不...
    開封第一講書人閱讀 55,273評論 1 279
  • 正文 為了忘掉前任崎淳,我火速辦了婚禮,結(jié)果婚禮上愕把,老公的妹妹穿的比我還像新娘拣凹。我一直安慰自己森爽,他們只是感情好,可當我...
    茶點故事閱讀 64,289評論 5 373
  • 文/花漫 我一把揭開白布嚣镜。 她就那樣靜靜地躺著爬迟,像睡著了一般。 火紅的嫁衣襯著肌膚如雪菊匿。 梳的紋絲不亂的頭發(fā)上付呕,一...
    開封第一講書人閱讀 49,046評論 1 285
  • 那天,我揣著相機與錄音跌捆,去河邊找鬼徽职。 笑死,一個胖子當著我的面吹牛佩厚,可吹牛的內(nèi)容都是我干的姆钉。 我是一名探鬼主播,決...
    沈念sama閱讀 38,351評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼抄瓦,長吁一口氣:“原來是場噩夢啊……” “哼潮瓶!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起钙姊,我...
    開封第一講書人閱讀 36,988評論 0 259
  • 序言:老撾萬榮一對情侶失蹤毯辅,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后摸恍,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體悉罕,經(jīng)...
    沈念sama閱讀 43,476評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,948評論 2 324
  • 正文 我和宋清朗相戀三年立镶,在試婚紗的時候發(fā)現(xiàn)自己被綠了壁袄。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,064評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡媚媒,死狀恐怖嗜逻,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情缭召,我是刑警寧澤栈顷,帶...
    沈念sama閱讀 33,712評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站嵌巷,受9級特大地震影響萄凤,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜搪哪,卻給世界環(huán)境...
    茶點故事閱讀 39,261評論 3 307
  • 文/蒙蒙 一靡努、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦惑朦、人聲如沸兽泄。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,264評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽病梢。三九已至,卻和暖如春梁肿,著一層夾襖步出監(jiān)牢的瞬間蜓陌,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,486評論 1 262
  • 我被黑心中介騙來泰國打工吩蔑, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留护奈,地道東北人。 一個月前我還...
    沈念sama閱讀 45,511評論 2 354
  • 正文 我出身青樓哥纫,卻偏偏與公主長得像,于是被迫代替她去往敵國和親痴奏。 傳聞我的和親對象是個殘疾皇子蛀骇,可洞房花燭夜當晚...
    茶點故事閱讀 42,802評論 2 345

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

  • 本文是對Hive組件的學習的一個初步總結(jié),包括如下章節(jié)的內(nèi)容: Hive是什么 Hive安裝 快速上手 Hive元...
    我是老薛閱讀 1,907評論 1 23
  • ORA-00001: 違反唯一約束條件 (.) 錯誤說明:當在唯一索引所對應(yīng)的列上鍵入重復(fù)值時读拆,會觸發(fā)此異常擅憔。 O...
    我想起個好名字閱讀 5,176評論 0 9
  • Zookeeper用于集群主備切換。 YARN讓集群具備更好的擴展性檐晕。 Spark沒有存儲能力暑诸。 Spark的Ma...
    Yobhel閱讀 7,246評論 0 34
  • hive.ddl.output.format:hive的ddl語句的輸出格式,默認是text辟灰,純文本个榕,還有json...
    博弈史密斯閱讀 1,939評論 0 6
  • Hive 是基于Hadoop 構(gòu)建的一套數(shù)據(jù)倉庫分析系統(tǒng),它提供了豐富的SQL查詢方式來分析存儲在Hadoop 分...
    三萬_chenbing閱讀 12,123評論 0 10