2021-01-28

MySQL

書寫順序:select--from--where--group by--having--order by
執(zhí)行順序:from--where--group by--having--select--order by
from:從哪個表檢索
where:過濾表中數(shù)據(jù)的條件
group by:分組
having:對已經(jīng)分組的數(shù)據(jù)進行過濾
select:查看結(jié)果集中的哪個列浑玛,或列的結(jié)果
order by:按照什么樣的順序來查看

hive與sql的區(qū)別(轉(zhuǎn)自鏈接處):

  • hive不支持等值連接:
    例如
    sql:select * from a,b where a.id=b.id
    hive必須為:select * from a join b on a.id=b.id;
  • 分號字符
    sql:select concat(key,concat(';',key)) from dual;
    hive需要進行轉(zhuǎn)義:select concat(key,concat('\073',key)) from dual;
  • hive不支持insert into 表 values() ,delete,update
  • hive支持嵌入mapreduce程序挟冠,來處理復(fù)雜的邏輯
  • Hive不支持將數(shù)據(jù)插入現(xiàn)有的表或分區(qū)中
    只支持覆蓋重寫整個表 insert overwrite table t1
  • hive支持將轉(zhuǎn)換后的數(shù)據(jù)直接寫入不同的表,還能寫入分區(qū)涯曲、hdfs和本地目錄
    from t1
    insert overwrite table t2
    select t3.c2, avg(t3.c1) from t3 where
    怎么防止數(shù)據(jù)傾斜

1.開窗函數(shù)

-排名開窗 ROW_NUMBER雀监、DENSE_RANK双吆、RANK、NTILE
--查詢按組累加
select id,[group],num,sum(num) over(partition by [group] order by id) from testaa
group by id,[group],num

ROW_NUMBER()為每一組的行按順序生成一個唯一的序號
RANK() 若有重復(fù)值則生成重復(fù)的序號,且下一個序號不連續(xù)
DENSE_RANK()若有重復(fù)值則生成重復(fù)的序號好乐,下一個序號是連續(xù)的

#row_number() over (partition by 分組列 order by 排序列)
SELECT WeekNo,Price,Sales_Amount,
row_number() over (partition by WeekNo order by Sales_Amount) as rk from forecasting
order by WeekNo
運行結(jié)果
#DENSE_RANK() over (partition by 分組列 order by 排序列)
SELECT WeekNo,Price,Sales_Amount,
DENSE_RANK() over (partition by WeekNo order by Sales_Amount) as rk from forecasting
order by WeekNo
運行結(jié)果
#RANK() over (partition by 分組列 order by 排序列)
SELECT WeekNo,Price,Sales_Amount,
RANK() over (partition by WeekNo order by Sales_Amount) as rk from forecasting
order by WeekNo
運行結(jié)果

-聚合開窗函數(shù) sum() max() min()

#max(聚合列) over(partition by 排序列)
SELECT WeekNo,Price,Sales_Amount,
max(Sales_Amount) over (partition by WeekNo) as rk from forecasting
order by WeekNo
運行結(jié)果

2.join,left join,right join,union all,union

-join:取交集匾竿,INNER JOIN 與 JOIN 是相同的;
-left join:以左表為主表曹宴,若左(m條)右(n條)兩表是一(多)對多的關(guān)系搂橙,則結(jié)果集顯示左表中連接字段的值分別與右表連接字段的多個值進行連接歉提,最多m*n條笛坦,最少0條,left join與left outer join是相同的苔巨;
-right join:以右表為主表版扩,結(jié)果集返回右表的行數(shù),一(多)對多與上面left join類似侄泽;
-union all:取并集礁芦,包括重復(fù)行,不進行排序悼尾,m+n條柿扣;
-union:取并集,不包括重復(fù)行闺魏,排序未状,最多m+n條;

select * from (SELECT distinct WeekNo from forecasting) a 
left join forecasting b
on a.WeekNo=b.WeekNo
order by a.WeekNo
left join一對多運行結(jié)果
#union all
select * from (SELECT distinct WeekNo from forecasting where month_num=12) a 
union all
SELECT distinct WeekNo from forecasting b
order by WeekNo
union all運行結(jié)果
#union 
select * from (SELECT distinct WeekNo from forecasting where month_num=12) a 
union 
SELECT distinct WeekNo from forecasting b
order by WeekNo
union運行結(jié)果

3.日期函數(shù)

-now() 返回當(dāng)前日期時間析桥;
-curdate()返回當(dāng)前日期司草;
-datediff(end_date,start_date)返回相差的天數(shù);
-date_sub/add(start_date,interval n day/hour/year);hive:date_sub/add(start_date,n)返回減/加天數(shù)的日期

SELECT  WeekNo,NOW(),datediff(curdate(),'2020/12/31'),
date_add(now(),interval -4 day)  from forecasting order by WeekNo
運行結(jié)果

4.空值處理函數(shù)

-isnull(字段名,返回值)泡仗,coalesce(),ifnull()一樣的用法


SELECT  ifnull(Inventory_Unit,0)  from forecasting order by WeekNo
運行結(jié)果

5. 去除重復(fù)值只保留一行

用row_number() over(partition by order by )編號埋虹,取第一條

6.數(shù)據(jù)庫

ODS層:粒度最細;當(dāng)前需要加載的數(shù)據(jù)娩怎,存儲處理完后的歷史數(shù)據(jù)
DW層:數(shù)據(jù)倉庫層搔课;經(jīng)過清洗了的,滿足第三范式截亦;粒度與ODS相同爬泥;只允許增加,不允許修改刪除魁巩;按照一定主題進行組織急灭;
DM層:數(shù)據(jù)集市層;以某個業(yè)務(wù)應(yīng)用為出發(fā)點谷遂,雪花狀葬馋;匯總級,不存在明細數(shù)據(jù);

7. 將字符串轉(zhuǎn)化為數(shù)組,并滿足top_category_name_new包含在rule_category 中

array_contains(split(colnameA,','),colnameB)
eg: colnameA: a,b,c colnameB:c

8. concat相關(guān)

  • 連接多個字段

(1) concat(colname1,'separator',colname2,'separator',...,colnameN)
只要其中一個是NULL畴嘶,那么將返回NULL

(2) concat_ws連接多個字段蛋逾,并一次性指定分隔符
concat_ws('separator',colname1,colname2,...,colnameN)

只要有一個字符串不是NULL,就不會返回NULL,separator不能為NULL窗悯,否則返回NULL
eg:

image.png

  • 實現(xiàn)行轉(zhuǎn)列,并放在一條記錄里

(1) 【Hive SQL】concat_ws('seperator',collect_set(colname))
collect_set將同一個分組中的值轉(zhuǎn)化成數(shù)組区匣,去重?zé)o序,排除NULL值
需要排序可以改成collect_list(不去重)或在外面加sort_array進行排序

concat_ws('seperator',collect_list(colname))
concat_ws('seperator',sort_array(collect_set(colname)),false)

eg:
colname
1
2
3
轉(zhuǎn)換為(1,2,3)

(2)group_concat( [distinct] colname [order by 排序字段 asc/desc ] [separator '分隔符'] )

或者group_concat(colname,'separator'),表示將group by產(chǎn)生的同一個分組中的值連接起來蒋院,返回一個字段
后面別忘了group by
eg:

image.png

9. array_contains(split( CASE WHEN rule_category IN ('服裝','女裝') THEN '服裝' ELSE rule_category END,','), category_lv1)

表示某個字段的值包含在數(shù)組中

10. 分類匯總(a,b,c,total)

grouping(col==1,'total',col)
group by cube(col)

11.json字符串解析

get_json_object(col,'$.name')

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末亏钩,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子欺旧,更是在濱河造成了極大的恐慌姑丑,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,366評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件辞友,死亡現(xiàn)場離奇詭異栅哀,居然都是意外死亡,警方通過查閱死者的電腦和手機称龙,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,521評論 3 395
  • 文/潘曉璐 我一進店門留拾,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人鲫尊,你說我怎么就攤上這事痴柔。” “怎么了马昨?”我有些...
    開封第一講書人閱讀 165,689評論 0 356
  • 文/不壞的土叔 我叫張陵竞帽,是天一觀的道長。 經(jīng)常有香客問我鸿捧,道長屹篓,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,925評論 1 295
  • 正文 為了忘掉前任匙奴,我火速辦了婚禮堆巧,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘泼菌。我一直安慰自己谍肤,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,942評論 6 392
  • 文/花漫 我一把揭開白布哗伯。 她就那樣靜靜地躺著荒揣,像睡著了一般。 火紅的嫁衣襯著肌膚如雪焊刹。 梳的紋絲不亂的頭發(fā)上系任,一...
    開封第一講書人閱讀 51,727評論 1 305
  • 那天恳蹲,我揣著相機與錄音,去河邊找鬼俩滥。 笑死嘉蕾,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的霜旧。 我是一名探鬼主播错忱,決...
    沈念sama閱讀 40,447評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼挂据!你這毒婦竟也來了以清?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,349評論 0 276
  • 序言:老撾萬榮一對情侶失蹤棱貌,失蹤者是張志新(化名)和其女友劉穎玖媚,沒想到半個月后箕肃,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體婚脱,經(jīng)...
    沈念sama閱讀 45,820評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,990評論 3 337
  • 正文 我和宋清朗相戀三年勺像,在試婚紗的時候發(fā)現(xiàn)自己被綠了障贸。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,127評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡吟宦,死狀恐怖篮洁,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情殃姓,我是刑警寧澤袁波,帶...
    沈念sama閱讀 35,812評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站蜗侈,受9級特大地震影響篷牌,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜踏幻,卻給世界環(huán)境...
    茶點故事閱讀 41,471評論 3 331
  • 文/蒙蒙 一枷颊、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧该面,春花似錦夭苗、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,017評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至猾瘸,卻和暖如春界赔,著一層夾襖步出監(jiān)牢的瞬間桥嗤,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,142評論 1 272
  • 我被黑心中介騙來泰國打工仔蝌, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留泛领,地道東北人。 一個月前我還...
    沈念sama閱讀 48,388評論 3 373
  • 正文 我出身青樓敛惊,卻偏偏與公主長得像渊鞋,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子瞧挤,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,066評論 2 355

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

  • 一 . 開窗函數(shù) 分組函數(shù) 開窗函數(shù) 分組與開窗的區(qū)別分組函數(shù)每組只返回一行锡宋,而開窗函數(shù)每組返回多行。如下: 分組...
    文字抒意閱讀 3,959評論 0 4
  • 一特恬,開窗函數(shù): 開窗函數(shù):為將要被操作的行的集合定義一個窗口执俩,它對一組值進行操作,不需要使用GROUP BY子句對...
    weiwei_js閱讀 13,655評論 1 9
  • UDTF 被稱為是表生成函數(shù): explode() 函數(shù)是其中的一個代表癌刽。 UDTF函數(shù)的使用限制: 1:一個se...
    流砂月歌閱讀 157評論 0 0
  • 碎語 學(xué)習(xí)的正態(tài)曲線:入門容易役首,精通難 積累的正態(tài)曲線:先越讀越多,后越讀越少 什么是開窗函數(shù) 很多場景比如排序显拜,...
    數(shù)有道閱讀 1,049評論 5 3
  • 參考: MySQL 8.0窗口函數(shù):用非常規(guī)思維簡易實現(xiàn)SQL需求 數(shù)分面試-SQL篇 一衡奥、mysql窗口函數(shù)簡介...
    kaka22閱讀 1,313評論 0 1