hive_查詢select

借鑒hive官網(wǎng):https://hive.apache.org/

經(jīng)典語句

[WITH CommonTableExpression (, CommonTableExpression)*]    (Note: Only available starting with Hive 0.13.0)
 SELECT [ALL | DISTINCT] select_expr, select_expr, ...
     FROM table_reference
     [WHERE where_condition]
     [GROUP BY col_list]
     [ORDER BY col_list]
     [CLUSTER BY col_list
         | [DISTRIBUTE BY col_list] [SORT BY col_list]
     ]
    [LIMIT [offset,] rows]

獲取當前數(shù)據(jù)庫

SELECT current_database()
show databases like '*gdw*'

查表名

use 庫名;
show tables like '*XXX*';

where子句

where條件表達式是一個布爾表達式

SELECT * FROM sales WHERE amount > 10 AND region = "US"

ALL和DISTINCT選項指定是否應(yīng)重復(fù)行。

若沒有給出這些選項,則默認值為ALL(返回所有匹配的行)疑枯。DISTINCT指定從結(jié)果集中刪除重復(fù)的行。注意千诬,Hive支持從版本1.1.0[HIVE-9194]開始的SELECT DISTINCT *

SELECT DISTINCT col1, col2 FROM t1

基于分區(qū)的查詢

一般來說,SELECT查詢掃描整個表(除了進行抽樣)。如果使用PARTITIONED BY子句創(chuàng)建表挪蹭,則查詢可以執(zhí)行分區(qū)修剪鲸湃,并僅掃描與查詢指定的分區(qū)相關(guān)的表的一小部分赠涮。如果在WHERE子句或JOIN中的ON子句中指定了分區(qū)謂詞,則Hive目前正在進行分區(qū)修剪暗挑。例如笋除,如果表page_views在列日期分區(qū),則以下查詢將在2008-03-01和2008-03-31之間的幾天內(nèi)檢索行炸裆。

##where分區(qū)
SELECT page_views.*
FROM page_views
WHERE page_views.date >= '2008-03-01' AND page_views.date <='2008-03-31'

##on分區(qū)
SELECT page_views.*
FROM page_views JOIN dim_users
     ON (page_views.user_id = dim_users.id AND page_views.date >= '2008-03-01' AND page_views.date <= '2008-03-31')

HAVING子句垃它,若有g(shù)roup by 子句的話,having子句要放到group by 之后晒衩。

SELECT col1 FROM t1 GROUP BY col1 HAVING SUM(col2) > 10
#同理
SELECT col1 FROM (SELECT col1, SUM(col2) AS col2sum FROM t1 GROUP BY col1) t2 WHERE t2.col2sum > 10

LIMIT子句

LIMIT子句可用于約束SELECT語句返回的行數(shù)嗤瞎。LIMIT需要一個或兩個數(shù)字參數(shù),它們必須都是非負整數(shù)常量听系。
第一個參數(shù)指定要返回的第一行的偏移量贝奇,第二個參數(shù)指定要返回的最大行數(shù)。
當給定一個參數(shù)時靠胜,它代表最大行數(shù)掉瞳,而指定要返回的第一行的偏移量默認值為0。

 #查詢返回5個任意客戶
 SELECT * FROM customers LIMIT 5
 #查詢返回創(chuàng)建的前5個客戶
 SELECT * FROM customers ORDER BY create_date LIMIT 5
 #查詢返回第3到第7個創(chuàng)建的客戶
 SELECT * FROM customers ORDER BY create_date LIMIT 2,5

正則表達書浪漠,可以使用基于正則表達式的列規(guī)范

  SELECT `(ds|hr)?+.+` FROM sales

group by 子句

SELECT pv_users.gender, count (DISTINCT pv_users.userid)
FROM pv_users
GROUP BY pv_users.gender;

Order, Sort, Cluster, and Distribute By

oder by

Hive中的order by跟傳統(tǒng)的sql語言中的order by作用是一樣的陕习,會對查詢的結(jié)果做一次全局排序,所以說址愿,只有hive的sql中制定了order by所有的數(shù)據(jù)都會到同一個reducer進行處理(不管有多少map该镣,也不管文件有多少的block只會啟動一個reducer)。但是對于大量數(shù)據(jù)這將會消耗很長的時間去執(zhí)行响谓。
這里跟傳統(tǒng)的sql還有一點區(qū)別:如果指定了hive.mapred.mode=strict(默認值是nonstrict),這時就必須指定limit來限制輸出條數(shù)损合,原因是:所有的數(shù)據(jù)都會在同一個reducer端進行,數(shù)據(jù)量大的情況下可能不能出結(jié)果娘纷,那么在這樣的嚴格模式下嫁审,必須指定輸出的條數(shù)。

sort by

Hive中指定了sort by赖晶,那么在每個reducer端都會做排序律适,也就是說保證了局部有序(每個reducer出來的數(shù)據(jù)是有序的,但是不能保證所有的數(shù)據(jù)是有序的,除非只有一個reducer)捂贿,好處是:執(zhí)行了局部排序之后可以為接下去的全局排序提高不少的效率(其實就是做一次歸并排序就可以做到全局排序了)纠修。
“order by”和“sort by”之間的區(qū)別是前者保證輸出中的總順序,而后者僅保證在reducer中的行的排序厂僧。
Hive使用SORT BY中的列對行進行排序分瘾,然后將行提供給reducer。排序順序?qū)⒁蕾囉诹蓄愋陀跸怠H绻惺菙?shù)字類型,則排序順序也以數(shù)字順序排列白魂。如果列是字符串類型汽纤,則排序順序?qū)⑹亲值漤樞颉?/p>

distribute by和sort by一起使用

ditribute by是控制map的輸出在reducer是如何劃分的

   select mid, money, name 
   from store 
   distribute by mid sort by mid asc, money asc 

我們所有的mid相同的數(shù)據(jù)會被送到同一個reducer去處理,這就是因為指定了distribute by mid福荸,這樣的話就可以統(tǒng)計出每個商戶中各個商店盈利的排序了

cluster by的功能就是distribute by和sort by相結(jié)合

cluster by指定的列只能是降序蕴坪,不能指定asc和desc。

  select mid, money, name from store cluster by mid 
  #等價
  select mid, money, name from store distribute by mid sort by mid 

注意

   select mid, money, name 
       from store 
       cluster by mid sort by money 
   #等價
    select mid, money, name 
       from store 
      distribute by mid sort by mid , money  

JSON查詢

select get_json_object(字段,'$.Name')

衍生1:pg用法

select each_json_text(字段->>'Name')

衍生2:生成json字段


需求.png
 select 
     user_id,
     concat_ws(';',collect_set(ddd_id,':',name)) 特征
   from table_name
   group by user_id ;
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末敬锐,一起剝皮案震驚了整個濱河市背传,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌台夺,老刑警劉巖径玖,帶你破解...
    沈念sama閱讀 218,122評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異颤介,居然都是意外死亡梳星,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,070評論 3 395
  • 文/潘曉璐 我一進店門滚朵,熙熙樓的掌柜王于貴愁眉苦臉地迎上來冤灾,“玉大人,你說我怎么就攤上這事辕近≡隙郑” “怎么了?”我有些...
    開封第一講書人閱讀 164,491評論 0 354
  • 文/不壞的土叔 我叫張陵移宅,是天一觀的道長归粉。 經(jīng)常有香客問我,道長吞杭,這世上最難降的妖魔是什么盏浇? 我笑而不...
    開封第一講書人閱讀 58,636評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮芽狗,結(jié)果婚禮上绢掰,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 67,676評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著校镐,像睡著了一般序芦。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上挂疆,一...
    開封第一講書人閱讀 51,541評論 1 305
  • 那天,我揣著相機與錄音,去河邊找鬼给梅。 笑死,一個胖子當著我的面吹牛双揪,可吹牛的內(nèi)容都是我干的动羽。 我是一名探鬼主播,決...
    沈念sama閱讀 40,292評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼渔期,長吁一口氣:“原來是場噩夢啊……” “哼运吓!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起疯趟,我...
    開封第一講書人閱讀 39,211評論 0 276
  • 序言:老撾萬榮一對情侶失蹤拘哨,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后信峻,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體倦青,經(jīng)...
    沈念sama閱讀 45,655評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,846評論 3 336
  • 正文 我和宋清朗相戀三年盹舞,在試婚紗的時候發(fā)現(xiàn)自己被綠了姨夹。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,965評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡矾策,死狀恐怖磷账,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情贾虽,我是刑警寧澤逃糟,帶...
    沈念sama閱讀 35,684評論 5 347
  • 正文 年R本政府宣布,位于F島的核電站蓬豁,受9級特大地震影響绰咽,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜地粪,卻給世界環(huán)境...
    茶點故事閱讀 41,295評論 3 329
  • 文/蒙蒙 一取募、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧蟆技,春花似錦玩敏、人聲如沸斗忌。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,894評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽织阳。三九已至,卻和暖如春砰粹,著一層夾襖步出監(jiān)牢的瞬間唧躲,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,012評論 1 269
  • 我被黑心中介騙來泰國打工碱璃, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留弄痹,地道東北人。 一個月前我還...
    沈念sama閱讀 48,126評論 3 370
  • 正文 我出身青樓嵌器,卻偏偏與公主長得像界酒,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子嘴秸,可洞房花燭夜當晚...
    茶點故事閱讀 44,914評論 2 355

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