工作中常用的hive行列轉換方法

2021-10-01 07:22:37 字數 4355 閱讀 9680

一、列轉行

1. 測試資料準備:

表dev.dev_three_kingdoms中存放三國武將各項屬性案列存放的資料。

drop table dev.dev_three_kingdoms;

create table if not exists dev.dev_three_kingdoms

kingdom           string   comment '國家',

general           string   comment '武將',

commander_value     int   comment '統帥值',

force_value         int   comment '武力值',

intelligence        int   comment '智力值',

political_value     int   comment '政治值'

comment '三國武將屬性表'

row format delimited fields terminated by '\t'

null defined as ""

stored as orc

建表語句:

資料如下:

kingdom

general

commander_value

force_value

intelligence

political_value蜀國

關羽 95

97 75

62 蜀國

諸葛亮 92

44 100 95

魏國 曹操

96 78

91 94

魏國 張遼

93 92

78 58

吳國 周瑜

97 71

96 86

吳國 太史慈 90

93 66

58 2. 實現的功能為將每個武將的屬性轉換為按行儲存,比如:

蜀國         關羽         統帥         95

蜀國         關羽         武力         97

蜀國         關羽         智力         75

蜀國         關羽         政治         62

3. 實現方法:

3.1 構建乙個編碼表,存放武將屬性欄位名和屬性分類描述資訊

表名:dev.dim_attr_code

drop table dev.dim_attr_code;

create table if not exists dev.dim_attr_code

attr_code           string   comment '屬性值編碼',

attr_name           string   comment '屬性描述'

row format delimited

fields terminated by ','

lines terminated by '\n'

stored as inputformat

'org.apache.hadoop.mapred.textinputformat'

outputformat

'org.apache.hadoop.hive.ql.io.hiveignorekeytextoutputformat';

attr_code

attr_name

commander_value 統帥

force_value 武力

intelligence 智力

political_value 政治

3.2 列轉行sql如下

select a.kingdom  國家,

a.general  武將,

b.attr_name 屬性,

a.col_value 屬性值

from

select kingdom

,general

,split(col_str,'!')[0]  col_name

,split(col_str,'!')[1]  col_value

from (select kingdom

,general

,concat('commander_value!',commander_value,'&',

'force_value!',force_value,'&',

'intelligence!',intelligence,'&',

'political_value!',political_value

) cols_str

from dev.dev_three_kingdoms

)t lateral  view explode(split(cols_str,'&'))  b as col_str

) ajoin

dev.dim_attr_code b

on a.col_name=b.attr_code;

執行結果如下:

國家

武將

屬性

屬性值蜀國

關羽 統帥

95 蜀國

關羽 武力

97 蜀國

關羽 政治

62 蜀國

關羽 智力

75 蜀國

諸葛亮 統帥

92 蜀國

諸葛亮 武力

44 蜀國

諸葛亮 政治

95 蜀國

諸葛亮 智力

100 魏國

曹操 統帥

96 魏國

曹操 武力

78 魏國

曹操 政治

94 魏國

曹操 智力

91 魏國

張遼 統帥

93 魏國

張遼 武力

92 魏國

張遼 政治

58 魏國

張遼 智力

78 吳國

太史慈 統帥

90 吳國

太史慈 武力

93 吳國

太史慈 政治

58 吳國

太史慈 智力

66 吳國

周瑜 統帥

97 吳國

周瑜 武力

71 吳國

周瑜 政治

86 吳國

周瑜 智力

96 二、行轉列

表名:dev.dev_three_kingdoms_zong

建表語句:

drop table dev.dev_three_kingdoms_zong;

create table if not exists dev.dev_three_kingdoms_zong

kingdom           string   comment '國家',

general           string   comment '武將',

attr_name         string   comment '統帥值',

attr_value        string   comment '武力值'

comment '三國武將屬性縱表'

row format delimited fields terminated by '\t'

null defined as ""

stored as orc

縱轉行sql:

select kingdom  國家

,general 武將

,max(case when attr_name='統帥' then attr_value else '' end) 統帥

,max(case when attr_name='武力' then attr_value else '' end) 武力

,max(case when attr_name='智力' then attr_value else '' end) 智力

,max(case when attr_name='政治' then attr_value else '' end) 政治

from dev.dev_three_kingdoms_zong

group by kingdom

,general

linux 工作中常用

一,help 獲取shell內建命令幫助資訊 示例 help cd 二,常用快捷按鍵 1 ctrl c 停止程序 如 tail f 後,退出按 ctrl c 返回到命令列。2 ctrl l 清屏 3 ctrl q 退出 4 tab 自動補全 在linux 和 window的cmd命令列中可用。5 上...

工作中常用的命令

1.unzip zip archive tar cf new.tar path tar xvf file.tar 2.transfer files scp username ip path path first path 傳輸檔案路徑 second path 儲存的路徑 安裝ssh伺服器 apt g...

工作中常用的工具

寫 evc,vs2005,visual assist 讀 source insight 檔案比較 ultra compare 編輯器 ultra edit 設計圖 viso 串列埠除錯 dnw,串列埠除錯助手 linux unubtu9.0,armlinux 交叉編譯 cygwin,cegcc 虛擬...