日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

hive sql 学习笔记

發布時間:2025/3/20 编程问答 18 豆豆
生活随笔 收集整理的這篇文章主要介紹了 hive sql 学习笔记 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1、coalesce

? ? 語法:

COALESCE ( expression [ ,...n ] )

  參數:

  expression 任何類型的表達式。

  返回類型:

  返回數據類型優先級最高的?expression?的數據類型。 如果所有表達式都不可為 Null,則結果的類型也不可為 Null。

  備注 如果所有參數均為 NULL,則?COALESCE?返回?NULL。?至少應有一個?Null?值為?NULL?類型。   比較?COALESCE?和?CASE

COALESCE?表達式是?CASE?表達式的語法快捷方式。 即查詢優化器將代碼?COALESCE(expression1,...n)?重寫為以下?CASE?表達式:

CASE

WHEN (expression1?IS?NOT?NULL) THEN?expression1

WHEN (expression2?IS?NOT?NULL) THEN?expression2

...

ELSE expressionN

END

這意味著將多次計算輸入值(expression1、expression2、expressionN?等)。 此外,為了符合?SQL?標準,包含子查詢的值表達式被視為不確定的且子查詢被計算兩次。 在每種情況中,第一次計算和后續計算可能返回不同的結果。

?

2、having子句

  sql中having子句與where子句類似,都是表示條件的設定,它們的區別在于,having子句在查詢過程中慢于聚合語句(sum,min,max,avg,count);而where子句在查詢過程中則快于聚合語句(sum,min,max,avg,count)。

  簡單說來:??

  where子句:??
  select sum(num) as rmb from order where id>10??
  //先查詢出id大于10的記錄才能進行聚合語句??

  having子句:??
  select reportsto as manager, count(*) as reports from employees??
  group by reportsto having count(*) > 4??

  //having的條件表達式count()是一個聚合語句,因此having的執行一定慢于聚合語句count,如果換成where則會出錯。

  //統計分組數據時用到聚合語句,對分組數據再次判斷時要用having。如果不用這些關系就不存在使用having。直接使用where就行了。 ?

  having就是來彌補where在分組數據判斷時的不足。因為where要快于聚合語句。

?

  如果你對何時應該使用WHERE,何時使用HAVING仍舊很迷惑,請遵照下面的說明:???

  WHERE語句在GROUP?BY語句之前;SQL會在分組之前計算WHERE語句。???

  HAVING語句在GROUP?BY語句之后;SQL會在分組之后計算HAVING語句。

3、mapjoin

使用MAPJOIN時,需要注意:
1、LEFT OUTER JOIN的左表必須是大表;
2、RIGHT OUTER JOIN的右表必須是大表;
3、INNER JOIN左表或右表均可以作為大表;
4、FULL OUTER JOIN不能使用MAPJOIN;
5、MAPJOIN支持小表為子查詢;
6、使用MAPJOIN時需要引用小表或是子查詢時,需要引用別名;
7、在MAPJOIN中,可以使用不等值連接或者使用OR連接多個條件;

  mapjoin里寫的是小表,且left outer join時小表寫在join的后面;

  hive中使用mapjoin有時可以大大提高sql語句的執行效率。

  其原理是:它會把小表全部讀入內存中,在map的時候直接拿另外一張表的數據和內存中表的數據做匹配,進行join操作,這樣省去了reduce。

  (1)在“關聯操作中有一個表非常小,另一個表很大”的場景下,mapjoin就不會由于數據傾斜而導致某個reduce上落數據太多而失敗;

  例子:

SELECT?/*+ MAPJOIN(b) */?a.key, a.value FROM a JOIN b ON a.key = b.key
  • does not need a reducer. For every mapper of A, B is read completely. The restriction is that?a FULL/RIGHT OUTER JOIN b?cannot be performed.

(2)在需要進行“不等值連接操作”的場景中(如a.x<b.y 或 a.x like b.y 等),由于where子句中的不等值join操作產生笛卡爾積,引起數據異常增大,速度會變慢;而mapjoin則可以提高此操作的效率,即使遇到笛卡爾積也不會對運行速度帶來太大影響;

  例子:

  

select /*+ MAPJOIN(a) */a.start_level, b.*from dim_level ajoin (select * from test) bwhere b.xx>=a.start_level and b.xx<end_level;

  在同時需要進行大小表關聯和不等值關聯的情景下,用mapjoin會有更明顯的效果,尤其是大表數據傾斜比較嚴重的時候。

  例子:

  使用mapjoin前:

create table hive_no_mapjoin as select f.id,f.dt, coalesce(k.amt,0.0) amt from(select a.id,t.dt from hive_dt t join (select id, min(dt) min_dt from hive_mapjoin group by id) awhere t.dt>= a.min_dt) f left outer join hive_mapjoin k on f.dt = k.dt and f.id = k.id;

  使用mapjoin后:

create table hive_ok_mapjoin as select f.id,f.dt, coalesce(k.amt,0.0) amt from(select /*+ mapjoin(t) */ a.id,t.dtfrom hive_dt t join (select id, min(dt) min_dt from hive_mapjoin group by id) a where t.dt>= a.min_dt) f left outer join tmp.tst1 kon f.dt = k.dt and f.id = k.id;

  友情鏈接:http://www.cnblogs.com/tmeily/p/4250858.html

       http://www.ithao123.cn/content-579190.html

?

4、hive中,group by 需要比較多的reduce , order by rand()需要比較多的map reduce,所以當數據量比較大的時候,如果這兩個動作同時執行,會很耗資源,解決的辦法是分成兩步,先order by rand() limit n 取出來,然后再從這個結果里面group by;

?

5、hive中,需要select 多個字段,但只要distinct某個字段并列出它的值,可以用:

select cid,count(distinct cid) from credit.vec_sim_pairs where dt=${CUR_DATE} and cid!='0' group by cid; 忽略count(distinct cid)這一列就可以了。 參考來源:http://www.jb51.net/article/24717.htm 6、查看某個表的某個分區的hdfs路徑 語句: use database; show table extended like table_name partition(dt='%Y%m%d') 7、隨機抽樣的語句:(1)select * from tablename TABLESAMPLE(n PERCENT|ROWS|ByteLengthLiteral ) where …… 其中,n percent將會抽取 n%的比例數據 (但是這種方法結果出來的數據并沒有真的是按比例抽取) (2)select * from my_table distribute by rand() sort by rand() limit 10000;(親測可靠) 參考:http://www.joefkelley.com/736/ http://www.aichengxu.com/other/9663663.htm http://lxw1234.com/archives/2015/08/444.htm 8、hive中字段類型轉換 cast(field as type) 或者: convert(field,type) 9、explain 使用explain可以查看hql語句運行的詳細信息; 例如: explain select a.key c1, a.value c2, b.key c3, b.value c4 from src a join src_skewjoin1 b on a.key = b.key;

轉載于:https://www.cnblogs.com/zichun-zeng/p/5899946.html

總結

以上是生活随笔為你收集整理的hive sql 学习笔记的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 欧美日韩在线免费播放 | 一区二区三区不卡视频 | 人妻激情偷乱频一区二区三区 | 老司机午夜在线 | 精品1区2区3区| 国产成人精品无码片区在线 | 超碰999 | 双乳被四个男人吃奶h文 | 99热6这里只有精品 三级av在线免费观看 | 校园伸入裙底揉捏1v1h | 精品国产视频一区二区 | 成年人视频免费看 | 成人免费黄色小视频 | 久操网站 | 日本三级日本三级日本三级极 | 中国字幕一色哟哟 | 麻豆传媒一区二区三区 | 天海翼一区 | 精品人妻午夜一区二区三区四区 | 亚洲欧美小视频 | 亚洲欧洲无码一区二区三区 | 一区视频在线播放 | 欧美熟妇精品一区二区蜜桃视频 | 日本a级c片免费看三区 | 国产精欧美一区二区三区蓝颜男同 | 教练含着她的乳奶揉搓揉捏动态图 | 亚洲av人人澡人人爽人人夜夜 | 国产精品一区二区电影 | 欧美少妇精品 | 在线观看视频免费 | 国产视频欧美视频 | 中国大陆一级毛片 | 五十路六十路七十路熟婆 | 国产又粗又长又爽 | 亚洲免费成人在线 | 午夜一二区 | 麻豆av影视 | 奇米一区二区 | 日韩图色| 久久久久色 | 美女久久| 91在线精品一区二区 | 日韩女优在线 | 中文字幕免费高清在线观看 | 人妖一区二区三区 | 国产成人麻豆精品午夜在线 | 日韩在线成人 | 97超碰免费观看 | 亚洲一级淫片 | 97人人射 | 国产一区二区三区 | 精品国产色 | 精品少妇人妻AV无码专区在线 | 2025国产精品 | 欧美变态口味重另类在线视频 | 欧美三日本三级少妇99 | 天天舔天天射天天干 | 青青草社区视频 | 大陆农村乡下av | cao久久 | 天天插天天摸 | 国产另类综合 | 欧美亚洲日本在线 | 日本无遮羞调教打屁股网站 | 加勒比成人av | 欧美一级在线观看 | 在线伊人网 | 在线观看国产免费av | 久草福利在线观看 | 妹子色综合 | 男人天堂亚洲天堂 | 一级片视频网站 | 草视频在线 | 日韩六区| 国产精品成av人在线视午夜片 | 精品91视频| 丁香花免费高清完整在线播放 | 2022av视频| 日韩激情中文字幕 | 日韩av成人在线 | 性欧美video另类hd尤物 | 欧美色图17p | 日韩久久在线 | 日日爱网站 | 乌克兰毛片 | 国产91丝袜在线播放九色 | 激情av综合 | 91中文字幕在线 | 日韩黄色av | 三级在线观看网站 | 91视频在线网站 | 久久影院午夜 | 日本韩国欧美一区二区三区 | 深夜福利国产精品 | 国产免费av片在线观看 | 91蜜桃婷婷狠狠久久综合9色 | 国产污视频在线观看 | 国产99re | 中文字幕av播放 |