簡單易懂一教就會的Hive行轉列列轉行

2021-12-30 12:11:43 字數 2175 閱讀 7280

例一:行轉列

資料:ab1

ac2ab3

cd4cd5

cd6轉化為:

ab1,2,3

cd4,5,6

創表hive>createtabletest1(col1string,col2string,col3string)rowformatdelimitedfieldsterminatedby'';

載入資料:

hive>loaddatalocalinpath'/home/huangwei/test.txt'intotabletest1;

使用的函式說明:

concat_wa(stringsep,stringarray)函式返回字串連線後的結果,sep表示各個字串直接的分割符

collect_set(col)函式 將col欄位進行去重,並合併成乙個陣列

實現方式:

hive>selectcol1,col2,concat_ws(',',collect_set(col3))fromtest1groupbycol1,col2;

列轉行資料:ab1,2,3

cd4,5,6

轉化為:

ab1ac2

ab3cd4

cd5cd6

使用到的函式

函式split(stringstr,stringpat)將字串按照pat分割

函式explode(array)將陣列中的元素拆分為多行顯示

selectcol1,col2,test.col4fromtest1lateralviewexplode(split(col3,','))testascol4;

例二行轉列

資料:張三,語文,80

李四,語文,89

王五,語文,75

張三,數學,90

李四,數學,88

王五,數學,79

張三,英語,93

李四,英語,87

王五,英語,85

轉換為:

張三,80,90,93

李四,89,88,87

王五,75,79,85

創表:createtabletest2(namestring,projectstring,scoreint)rowformatdelimitedfieldsterminatedby',';

載入資料:

loaddatalocalinpath'/home/huangwei/test.txt'intotabletest1;

函式:casewhenathenbelsecend如果a為true返回b如果a為false返回c

max()去最大值

處理:selectname,max(casewhensubject='chinese'thenscoreelse0end)aschinese,max(casewhensubject='math'thenscoreelse0end)asmath,max(casewhensubject='english'thenscoreelse0end)asenglishfromtest2groupbyname;

sql執行過程

看第一行80是由casewhensubject='語文'thenscoreelse0end得出,其他的0分別是由casewhensubject='數學'thenscoreelse0end、casewhensubject='英語'thenscoreelse0end、casewhensubject='生物'thenscoreelse0end得出,一次類推,得到的結果集為:

張三 80 0 0

李四 89 0 0

王五 75 0 0

張三 0 90 0

李四 0 88 0

王五 0 79 0

張三 0 0 93

李四 0 0 87

王五 0 0 85

下一步,聚合分組,最終完成任務。

列轉行:

資料: 

張三,80,90,93

李四,89,88,87

王五,75,79,85

實現方式:

selectname,』chinese』assubject,』chinese』asscorefromtest3

union

selectname,』math』assubject,』math』asscorefromtest3

union

selectname,』english』assubject,』math』asscorefromtest3;

簡單易懂的講解深度學習(入門系列之一)

摘要 當你和女朋友在路邊手拉手一起約會的時候,你可曾想,你們之間早已碰撞出了一種神秘的智慧型 深度學習。戀愛容易,相處不易,不斷磨合,打造你們的默契,最終才能決定你們是否在一起。深度學習也一樣,輸入各種不同的引數,進行訓練擬合,最後輸出擬合結果。戀愛又不易,且學且珍惜!導言 目前人工智慧非常火爆,而...

Python練習 乙個簡單易懂的迭代器,了解一下

今天我們學習了迭代器,其實可以理解為是乙個元素容器被遍歷的方式,不難理解,看看下面的小例子 1 2 乙個簡單的迭代器 3 l 1,2,3,4,5,6,7 建立乙個列表l 4 ite l.iter iter 代表l是乙個可迭代的物件 5print ite.next 使用iterator.next 方法...

對JS閉包的簡單理解,一學就會,一敲就廢

閉包的定義 閉包是指有權訪問另乙個函式作用域中的變數的函式。閉包的特點 1.函式中巢狀函式 2.函式內部可以引用函式外部的變數和引數 閉包的缺點 閉包比普通函式占用的記憶體更大,所以在不用的時候要關掉 常見的閉包函式 for var i 0 i 5 i 1000 列印結果是 5個5 其實這就是比較典...