[譯]Hive學(xué)習(xí)指南(四)

查詢和插入數(shù)據(jù)

Hive查詢操作參見文檔Select碾盟,插入操作參見文檔Inserting data into Hive Tables from queriesWriting data into the filesystem from queries棚辽。

簡單查詢

下面示例為查詢所有活躍用戶:

INSERT OVERWRITE TABLE user_active
SELECT user.*
FROM user
WHERE user.active = 1;

注意和SQL不一樣冰肴,這里總是將數(shù)據(jù)插入到user_active表中。稍后會說明用戶如何檢查這些結(jié)果联逻,并且將結(jié)果轉(zhuǎn)存到本地文件中检痰。可以在Beeline和[Hive CLI]中運行下面的查詢:

SELECT user.*
FROM user
WHERE user.active = 1;

結(jié)果會重寫為一些臨時文件并在Hive客戶端進行展示公壤。

基于分區(qū)的查詢

查詢中使用哪些分區(qū)是由系統(tǒng)根據(jù)where語句中分區(qū)列的條件決定的椎椰。例如,為了獲取所有03/2008從xyz.com引用過來的page_views慨飘,可以使用如下查詢:

INSERT OVERWRITE TABLE xyz_com_page_views
SELECT page_views.*
FROM page_views
WHERE page_views.date >= '2008-03-01' AND page_views.date <= '2008-03-31' AND
      page_views.referrer_url like '%xyz.com';

注意這里用到了page_views.date瓤的,因為上面的表定義了PARTITIONED BY(date DATETIME, country STRING)

連接

為了獲取2008-03-03的page_view人員統(tǒng)計分析(按照性別)堤瘤,可以使用userid列連接page_view表和user表。使用下面查詢實現(xiàn):

INSERT OVERWRITE TABLE pv_users
SELECT pv.*, u.gender, u.age
FROM user u JOIN page_view pv ON (pv.userid = u.id)
WHERE pv.date = '2008-03-03';

要進行外連接桥帆,可使用LEFT OUTERRIGHT OUTERFULL OUTER(左保留叶骨,右保留或雙向保留)關(guān)鍵字祈匙。例如,對上面的查詢進行全外連接夺欲,如下:

INSERT OVERWRITE TABLE pv_users
SELECT pv.*, u.gender, u.age
FROM user u FULL OUTER JOIN page_view pv ON (pv.userid = u.id)
WHERE pv.date = '2008-03-03';

檢查key是否在另一個表存在,可使用LEFT SEMI JOIN伞剑,如下:

INSERT OVERWRITE TABLE pv_users
SELECT u.*
FROM user u LEFT SEMI JOIN page_view pv ON (pv.userid = u.id)
WHERE pv.date = '2008-03-03';

想連接多個表市埋,如下:

INSERT OVERWRITE TABLE pv_friends
SELECT pv.*, u.gender, u.age, f.friends
FROM page_view pv JOIN user u ON (pv.userid = u.id) JOIN friend_list f ON (u.id = f.uid)
WHERE pv.date = '2008-03-03';

注意Hive只支持equi-joins。建議將最大的表放在連接的最右邊抒倚,這樣性能最好坷澡。

聚合

按照性別計算不同用戶數(shù)量,如下:

INSERT OVERWRITE TABLE pv_gender_sum
SELECT pv_users.gender, count (DISTINCT pv_users.userid)
FROM pv_users
GROUP BY pv_users.gender;

可以同時進行多個聚合镣陕,但是不能對不同列進行聚合姻政,下面代碼是允許的:

INSERT OVERWRITE TABLE pv_gender_agg
SELECT pv_users.gender, count(DISTINCT pv_users.userid), count(*), sum(DISTINCT pv_users.userid)
FROM pv_users
GROUP BY pv_users.gender;

下面查詢是不允許的:

INSERT OVERWRITE TABLE pv_gender_agg
SELECT pv_users.gender, count(DISTINCT pv_users.userid), count(DISTINCT pv_users.ip)
FROM pv_users
GROUP BY pv_users.gender;

多表/文件插入

聚合或者簡單查詢的輸出可以進一步發(fā)送到多個表或者hadoop dfs文件岂嗓。如下:

FROM pv_users
INSERT OVERWRITE TABLE pv_gender_sum
    SELECT pv_users.gender, count_distinct(pv_users.userid)
    GROUP BY pv_users.gender
 
INSERT OVERWRITE DIRECTORY '/user/data/tmp/pv_age_sum'
    SELECT pv_users.age, count_distinct(pv_users.userid)
    GROUP BY pv_users.age;

第一個insert語句將結(jié)果插入到Hive表中,第二個將結(jié)果存儲到hadoop dfs文件中食绿。

插入到本地文件

將結(jié)果輸出到本地文件公罕,這樣可以使用excel等工具查看文件。如下:

INSERT OVERWRITE LOCAL DIRECTORY '/tmp/pv_gender_sum'
SELECT pv_gender_sum.*
FROM pv_gender_sum;

抽樣

抽樣語句讓用戶可以寫查詢抽樣部分數(shù)據(jù)楼眷。目前抽樣是在列上進行的,在CREATE TABLE中的CLUSTERED BY語句中指定掌腰。下面的示例選擇了pv_gender_sum表的第3個桶:

INSERT OVERWRITE TABLE pv_gender_sum_sample
SELECT pv_gender_sum.*
FROM pv_gender_sum TABLESAMPLE(BUCKET 3 OUT OF 32);

通常TABLESAMPLE語法是這樣的:

TABLESAMPLE(BUCKET x OUT OF y)

y是表創(chuàng)建時指定的桶數(shù)量。針對上面的示例催植,下面的語句會選擇第3個和第19個桶勺择。

TABLESAMPLE(BUCKET 3 OUT OF 16)

下面的語句會選擇第3個桶的一半。

TABLESAMPLE(BUCKET 3 OUT OF 64 ON userid)

Union All

Hive SQL支持union all省核,例如芳撒,我們有兩個表,一個跟蹤用戶發(fā)布視頻笔刹,一個跟蹤用戶發(fā)布評論,下面的查詢將union all的結(jié)果和user表進行連接:

INSERT OVERWRITE TABLE actions_users
SELECT u.id, actions.date
FROM (
    SELECT av.uid AS uid
    FROM action_video av
    WHERE av.date = '2008-06-03'
 
    UNION ALL
 
    SELECT ac.uid AS uid
    FROM action_comment ac
    WHERE ac.date = '2008-06-03'
    ) actions JOIN users u ON(u.id = actions.uid);

數(shù)組操作

表中可以添加數(shù)組列萌壳,如下:

CREATE TABLE array_table (int_array_column ARRAY<INT>);

假設(shè)pv.friendsARRAY<INT>類型的日月,用戶可以使用索引來獲取指定的元素,如下:

SELECT pv.friends[2]
FROM page_views pv;

select語句獲取了pv.friends的第三個元素尺借。

用戶也可以獲取數(shù)組的長度精拟,使用size函數(shù),如下:

SELECT pv.userid, size(pv.friends)
FROM page_view pv;

Map操作

Map操作和數(shù)組操作類似蜂绎。這種結(jié)構(gòu)目前只能編程創(chuàng)建。之后會進行擴展怪瓶。假設(shè)pv.propertiesmap<String, String>類型践美,它是字符串到字符串的關(guān)聯(lián)數(shù)組找岖。

INSERT OVERWRITE page_views_map
SELECT pv.userid, pv.properties['page type']
FROM page_views pv;

上面示例從page_views表中查詢page_type屬性哆姻。

與數(shù)組類型,size函數(shù)可用于獲取Map中元素的數(shù)量:

SELECT size(pv.properties)
FROM page_view pv;

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末爹脾,一起剝皮案震驚了整個濱河市箕昭,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌泌霍,老刑警劉巖述召,帶你破解...
    沈念sama閱讀 221,576評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異藤为,居然都是意外死亡夺刑,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,515評論 3 399
  • 文/潘曉璐 我一進店門存淫,熙熙樓的掌柜王于貴愁眉苦臉地迎上來沼填,“玉大人,你說我怎么就攤上這事坞笙。” “怎么了?”我有些...
    開封第一講書人閱讀 168,017評論 0 360
  • 文/不壞的土叔 我叫張陵却邓,是天一觀的道長院水。 經(jīng)常有香客問我简十,道長撬腾,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,626評論 1 296
  • 正文 為了忘掉前任胰默,我火速辦了婚禮漓踢,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘喧半。我一直安慰自己,他們只是感情好取具,可當(dāng)我...
    茶點故事閱讀 68,625評論 6 397
  • 文/花漫 我一把揭開白布扁耐。 她就那樣靜靜地躺著,像睡著了一般占哟。 火紅的嫁衣襯著肌膚如雪酿矢。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,255評論 1 308
  • 那天蜜暑,我揣著相機與錄音策肝,去河邊找鬼。 笑死之众,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的缀蹄。 我是一名探鬼主播,決...
    沈念sama閱讀 40,825評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼蛀醉,長吁一口氣:“原來是場噩夢啊……” “哼衅码!你這毒婦竟也來了拯刁?” 一聲冷哼從身側(cè)響起逝段,我...
    開封第一講書人閱讀 39,729評論 0 276
  • 序言:老撾萬榮一對情侶失蹤惹恃,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后巫糙,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,271評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡醉锄,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,363評論 3 340
  • 正文 我和宋清朗相戀三年恳不,在試婚紗的時候發(fā)現(xiàn)自己被綠了开呐。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,498評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡卵惦,死狀恐怖瓦戚,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情较解,我是刑警寧澤,帶...
    沈念sama閱讀 36,183評論 5 350
  • 正文 年R本政府宣布啡捶,位于F島的核電站奸焙,受9級特大地震影響徒溪,放射性物質(zhì)發(fā)生泄漏金顿。R本人自食惡果不足惜鲤桥,卻給世界環(huán)境...
    茶點故事閱讀 41,867評論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望嫂拴。 院中可真熱鬧贮喧,春花似錦筒狠、人聲如沸箱沦。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,338評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽寒跳。三九已至,卻和暖如春童太,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背翘贮。 一陣腳步聲響...
    開封第一講書人閱讀 33,458評論 1 272
  • 我被黑心中介騙來泰國打工征冷, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人肴捉。 一個月前我還...
    沈念sama閱讀 48,906評論 3 376
  • 正文 我出身青樓叔收,卻偏偏與公主長得像,于是被迫代替她去往敵國和親饺律。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,507評論 2 359

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