一、列轉行
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 虛擬...