Hadoop數(shù)據(jù)分析平臺實戰(zhàn)——130Hive Shell命令介紹 02(熟悉Hive略過)

離線數(shù)據(jù)分析平臺實戰(zhàn)——130Hive Shell命令介紹 02(熟悉Hive略過)

導(dǎo)入數(shù)據(jù)

Hive的導(dǎo)入數(shù)據(jù)基本上可以分為三類,
第一種是從linux系統(tǒng)上導(dǎo)入數(shù)據(jù)到hive表中速警,
第二種是從hdfs上導(dǎo)入數(shù)據(jù)到hive表中叹誉,
第三種是從已有的hive表中導(dǎo)入數(shù)據(jù)到新的hive表中闷旧。

其中第一種和第二種語法基本類似长豁;
在前面介紹的使用create table ... as... 命令創(chuàng)建表并導(dǎo)入數(shù)據(jù),也屬于第三種導(dǎo)入數(shù)據(jù)方法忙灼。
使用前兩種方式導(dǎo)入數(shù)據(jù)匠襟,只是復(fù)制或者移動數(shù)據(jù)文件,并不會對數(shù)據(jù)的模式(數(shù)據(jù)類型)進(jìn)行檢查该园,對數(shù)據(jù)模式的檢查要等到查詢數(shù)據(jù)的時候才會進(jìn)行酸舍。采用這種"schema on read"的模式可以提高數(shù)據(jù)加載效率。

導(dǎo)入數(shù)據(jù)命令

第一種命令和第二種命令的區(qū)別在于里初,
導(dǎo)入linux系統(tǒng)上的數(shù)據(jù)是進(jìn)行文件復(fù)制啃勉,導(dǎo)入hdfs上的數(shù)據(jù)是進(jìn)行文件移動。
也就是說在hdfs上進(jìn)行數(shù)據(jù)的導(dǎo)入后双妨,原位置的文件將不存在淮阐。命名如下:
load data [local] inpath 'filepath' [overwrite] into table tablename叮阅。
使用local關(guān)鍵字來區(qū)分是從linux系統(tǒng)還是從hdfs上獲取數(shù)據(jù)。
注意:
其實當(dāng)不指定local的時候枝嘶,數(shù)據(jù)來源是根據(jù)hadoop的fs.defaultFS和hive的hive.metastore.warehouse.dir來定義的帘饶,當(dāng)然也可以指定路徑的全部schema信息。

最后一種導(dǎo)入數(shù)據(jù)的命令其實我們是比較常用的一種群扶,底層是使用mapreduce程序進(jìn)行數(shù)據(jù)的導(dǎo)入操作的及刻。命令如下:
INSERT (OVERWRITE|INTO) TABLE tablename1 select_statement1 FROM from_statement where_statement;
使用overwrite和into的區(qū)別在于,overwrite是進(jìn)行重寫操作竞阐,也就是說會將原始數(shù)據(jù)進(jìn)行刪除缴饭。
into是進(jìn)行添加操作,原始數(shù)據(jù)不會進(jìn)行刪除骆莹。
注意:當(dāng)我們將from語句提到最前面的時候颗搂,我們可以進(jìn)行多表插入。

select命令詳解

select命令和表中sql中的定義是一樣的幕垦,都是查詢數(shù)據(jù)表的數(shù)據(jù)丢氢,命令格式如下所示:

SELECT [ALL | DISTINCT] select_expr, select_expr, ...  -- 返回的查詢列表
FROM table_reference -- from語句,一般可以放到with之后先改,select之前
[WHERE where_condition] -- where過濾條件
[GROUP BY col_list [HAVING having_condition]] -- 分組條件
[ORDER|SORT  BY colName (ASC|DESC)]  -- 排序條件
[LIMIT number] -- limit條件

From語句

From語句主要是指定從那個數(shù)據(jù)表中查詢數(shù)據(jù)疚察,有兩種使用方式:

分別可以在select后和with后&select前使用,

語法格式:

  1. [with ...] select ... from ...
  2. [with ...] from ... select ...
    示例:
    select * from students;
    from students select *;

CTE語句

Common Table Expression(CTE)主要作用是保存臨時結(jié)果仇奶,作為查詢語句的公用部分貌嫡,方便后面的select查詢中重復(fù)使用。
語法規(guī)則為:
with cte_name [AS (select statment)] (,cte_name [AS (select statment)])* select ....

order/sort by語句

Order/Sort by語句主要用于hive中的數(shù)據(jù)排序该溯,這兩個命令的使用方式都類似sql語法中的order by岛抄。
兩者的主要區(qū)別是:
sort by保證單reducer有序,order by保證全局有序狈茉,也就是說當(dāng)reducer個數(shù)為多個的時候夫椭,使用sort by可能出現(xiàn)局部有序的情況。
另外對于order by操作氯庆,有一個小的限制益楼,就是當(dāng)hive.mapred.mode模式為strict的時候,在order by語句后面必須跟著limit語句点晴。
語法格式如下:
(order|sort) by colname [asc|desc] (,colname [asc|desc])*

Join語法

在多表查詢的時候,由于表與表之間有關(guān)聯(lián)性悯周,所有hive提供了join的語法粒督,基本類似sql的join語法。

主要分為以下五類:
  1. 內(nèi)連接(JOIN)
  2. 外鏈接({LEFT|RIGHT|FULL} [OUTER] JOIN)
  3. 半連接(LEFT SEMI JOIN)
  4. 笛卡爾連接(CROSS JOIN)
  5. 其他連接方式(eg. mapjoin等)
    語法格式:
    left_table_reference [join type] right_table_ref [join_condition]* ([join type] right_table_ref [join_condition]*)*

使用join建議&問題

  1. 等值連接:hive中的所有連接條件必須為等值連接條件禽翼,不支持<>等非等值連接方式屠橄。
  2. 多表連接:多表連接的時候族跛,一般先進(jìn)行l(wèi)eft semi join,然后再進(jìn)行join, 再進(jìn)行外連接锐墙。(減少數(shù)據(jù)量)礁哄。
  3. join過濾條件,可以將where的過濾條件移動到j(luò)oin的過濾條件中去溪北,這樣可以減少網(wǎng)絡(luò)數(shù)據(jù)量桐绒。
  4. join執(zhí)行順序都是從左到右,不管是那種join方式之拨,那么一般將大的表放到右邊茉继,這樣可以節(jié)省內(nèi)存&減少網(wǎng)絡(luò)傳輸。
  5. mapjoin只適合連接表是小表的情況蚀乔,是一種空間換時間的解決方案烁竭。

內(nèi)連接語法

內(nèi)連接(JOIN)主要作用是獲取連接的兩張表全部匹配的數(shù)據(jù),如果不給定join_condition的話吉挣,會進(jìn)行笛卡爾乘積派撕。
笛卡爾連接(CROSS JOIN)和內(nèi)連接語法一樣,區(qū)別在于:笛卡爾連接是對內(nèi)連接的一種優(yōu)化睬魂。
語法格式為:
table_reference [cross] join table_factor [join_condition]

外連接語法

外連接的主要作用是保留一部分沒有匹配的數(shù)據(jù)终吼。
左外連接(LEFT OUTER JOIN)的結(jié)果是包括左表中的所有行,如果左表中的某一個行在右表中不存在汉买,那么則在相關(guān)聯(lián)的結(jié)果集中右表的所有選擇列值均設(shè)置為空值衔峰。
右外連接(RIGHT OUTER JOIN)就是左外連接的反先連接,將返回右表的所有行蛙粘,左表進(jìn)行空值填充垫卤。
全外連接(FULL OUTER JOIN)返回左表和右表的所有行,關(guān)聯(lián)表中沒有匹配值的直接設(shè)置為空值出牧。
語法格式為:
table_reference {left|right|full} [outer] join table_factor join_condition

半連接語法

半連接(LEFT SEMI JOIN)是hive特有的穴肘,hive中不支持in/exists操作,所以hive提供了一個替代方案舔痕。
需要注意的是评抚,被連接的表(右表),不能出現(xiàn)在查詢列/其他部分(where等)中伯复,只能出現(xiàn)在on字句中慨代。(出現(xiàn)也是無效的)。
提出半連接的主要作用其實是提高查詢效率啸如,真正來講的話侍匙,hive中可以使用其他連接方式來代替半連接,但是就效率而已的話叮雳,還是半連接比較高效想暗。
語法格式:
table_reference LEFT SEMI JOIN table_factor join_condition

mapjoin

如果所有被連接的表都是小表妇汗,那么可以使用mapjoin,將需要連接的表數(shù)據(jù)全部讀入mapper端內(nèi)存中。
也就是說你使用mapjoin的前提就是你的連接數(shù)據(jù)比較小说莫,mapjoin需要和其他join方式一起使用杨箭,一般情況下使用mapjoin的時候,推薦使用內(nèi)連接储狭。
語法格式為:
select /*+ MAPJOIN(table_ref1) */ ... from table_ref join table_ref1 on ....;

子查詢語法

Hive對子查詢的支持有限互婿,只支持嵌套select子句,而且只能在from和with語句塊中使用子查詢晶密。
語法規(guī)則如下:
.... from (select statement) [[as] tmp_name]....

導(dǎo)出數(shù)據(jù)

Hive中導(dǎo)出數(shù)據(jù)主要分為兩大類擒悬,
分別是導(dǎo)出數(shù)據(jù)到linux系統(tǒng)和導(dǎo)出數(shù)據(jù)到hdfs文件系統(tǒng)上。
另外也可以認(rèn)為導(dǎo)出數(shù)據(jù)到其他hive表也算導(dǎo)出數(shù)據(jù)(不過該方式也是導(dǎo)入數(shù)據(jù))稻艰。
命令如下:
INSERT OVERWRITE [LOCAL] DIRECTORY directory1 [row format row_format] [stored as file_format] SELECT ... FROM ...
注意:hive導(dǎo)出數(shù)據(jù)支持一次導(dǎo)出到多個文件夾中懂牧,同多表同時導(dǎo)入數(shù)據(jù)一樣。

其他常用命令&組件

union: 進(jìn)行數(shù)據(jù)合并尊勿,格式為:
select1 union all select2... union all selectn
explain: hql執(zhí)行計劃查詢僧凤。格式為: explain hql
hive -e "hql":在linux系統(tǒng)中執(zhí)行hive語句。
hive -f "filepath": 執(zhí)行l(wèi)inux系統(tǒng)中的包含hive語句的文件元扔。
view:hive支持視圖的使用躯保,單只支持邏輯視圖,不支持物理視圖澎语。
使用語法和table類型途事,創(chuàng)建語法格式為: create view viewname as select_statement

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市擅羞,隨后出現(xiàn)的幾起案子尸变,更是在濱河造成了極大的恐慌,老刑警劉巖减俏,帶你破解...
    沈念sama閱讀 212,542評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件召烂,死亡現(xiàn)場離奇詭異,居然都是意外死亡娃承,警方通過查閱死者的電腦和手機奏夫,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,596評論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來历筝,“玉大人酗昼,你說我怎么就攤上這事∈嶂恚” “怎么了麻削?”我有些...
    開封第一講書人閱讀 158,021評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我碟婆,道長,這世上最難降的妖魔是什么惕稻? 我笑而不...
    開封第一講書人閱讀 56,682評論 1 284
  • 正文 為了忘掉前任竖共,我火速辦了婚禮,結(jié)果婚禮上俺祠,老公的妹妹穿的比我還像新娘公给。我一直安慰自己,他們只是感情好蜘渣,可當(dāng)我...
    茶點故事閱讀 65,792評論 6 386
  • 文/花漫 我一把揭開白布淌铐。 她就那樣靜靜地躺著,像睡著了一般蔫缸。 火紅的嫁衣襯著肌膚如雪腿准。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,985評論 1 291
  • 那天拾碌,我揣著相機與錄音吐葱,去河邊找鬼。 笑死校翔,一個胖子當(dāng)著我的面吹牛弟跑,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播防症,決...
    沈念sama閱讀 39,107評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼孟辑,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了蔫敲?” 一聲冷哼從身側(cè)響起饲嗽,我...
    開封第一講書人閱讀 37,845評論 0 268
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎燕偶,沒想到半個月后喝噪,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,299評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡指么,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,612評論 2 327
  • 正文 我和宋清朗相戀三年酝惧,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片伯诬。...
    茶點故事閱讀 38,747評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡晚唇,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出盗似,到底是詐尸還是另有隱情哩陕,我是刑警寧澤,帶...
    沈念sama閱讀 34,441評論 4 333
  • 正文 年R本政府宣布,位于F島的核電站悍及,受9級特大地震影響闽瓢,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜心赶,卻給世界環(huán)境...
    茶點故事閱讀 40,072評論 3 317
  • 文/蒙蒙 一扣讼、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧缨叫,春花似錦椭符、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,828評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至琐簇,卻和暖如春蒸健,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背鸽嫂。 一陣腳步聲響...
    開封第一講書人閱讀 32,069評論 1 267
  • 我被黑心中介騙來泰國打工纵装, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人据某。 一個月前我還...
    沈念sama閱讀 46,545評論 2 362
  • 正文 我出身青樓橡娄,卻偏偏與公主長得像,于是被迫代替她去往敵國和親癣籽。 傳聞我的和親對象是個殘疾皇子挽唉,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,658評論 2 350

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