大数据Hive行列转换应用与实现

本文涉及的产品
云原生大数据计算服务MaxCompute,500CU*H 100GB 3个月
简介: 大数据Hive行列转换应用与实现

1 工作应用场景

实际工作场景中经常需要实现对于Hive中的表进行行列转换操作,例如当前ADS层的数据表,我们统计得到每个小时不同维度下的UV、PV、IP的个数,而现在为了构建可视化报表,得到每个小时的UV、PV的线图,观察访问趋势,我们需要构建如下的表结构:

在Hive中,我们可以通过函数来实现各种复杂的行列转换。

2 行转列:多行转多列

2.1 需求

➢ 原始数据表

➢ 目标结果表

4.2.2 case when判断

➢ 功能

用于实现对数据的判断,根据条件,不同的情况返回不同的结果,类似于Java中的switch case 功能

➢ 语法

➢ 语法一

CASE 
WHEN 条件1 THEN VALUE1
WHEN 条件2 THEN VALUE2
……
WHEN 条件N THEN VALUEN
ELSE 默认值
END

➢ 语法二

CASE 列
WHEN V1 THEN VALUE1
WHEN V2 THEN VALUE2
……
WHEN VN THEN VALUEN
ELSE 默认值
END

➢ 测试

➢ 语法一:当id < 2显示a,当id = 2 显示b ,其他的显示c

select
  id,
  case
  when id < 2 then 'a'
  when id = 2 then 'b'
  else 'c'
  end as caseName
from tb_url;

语法二:当id =1 显示a,当id = 2 显示b ,其他的显示c

select
id,
case id
when 1 then 'a'
when 2 then 'b'
else 'c'
end as caseName
from tb_url;

2.3 实现

➢ 创建原始数据表,加载数据

--切换数据库
use db_function;
--建表
create table row2col1(
   col1 string,
   col2 string,
   col3 int
) row format delimited fields terminated by '\t';
--加载数据到表中
load data local inpath '/export/data/r2c1.txt' into table row2col1;

➢ SQL实现转换

select
  col1 as col1,
  max(case col2 when 'c' then col3 else 0 end) as c,
  max(case col2 when 'd' then col3 else 0 end) as d,
  max(case col2 when 'e' then col3 else 0 end) as e
from
  row2col1
group by
  col1;

3 行转列:多行转单列

3.1 需求

➢ 原始数据表

➢ 目标数据表

3.2 concat

➢ 功能:用于实现字符串拼接,不可指定分隔符

➢ 语法

concat(element1,element2,element3……)


➢ 测试

select concat(“it”,“cast”,“And”,“heima”);

±----------------+

| itcastAndheima |

±----------------+


➢ 特点:如果任意一个元素为null,结果就为null

select concat(“it”,“cast”,“And”,null);

±------+

| NULL |

±------+


3.3 concat_ws

➢ 功能:用于实现字符串拼接,可以指定分隔符

➢ 语法

concat_ws(SplitChar,element1,element2……)


➢ 测试

select concat_ws("-",“itcast”,“And”,“heima”);

±------------------+

| itcast-And-heima |

±------------------+


➢ 特点:任意一个元素不为null,结果就不为null

select concat_ws("-",“itcast”,“And”,null);

±------------+

| itcast-And |

±------------+


3.4 collect_list

➢ 功能:用于将一列中的多行合并为一行,不进行去重

➢ 语法

collect_list(colName)

➢ 测试

select collect_list(col1) from row2col1;

±---------------------------+

| [“a”,“a”,“a”,“b”,“b”,“b”] |

±---------------------------+


3.5 concat_set

➢ 功能:用于将一列中的多行合并为一行,并进行去重

➢ 语法

collect_set(colName)


➢ 测试

select collect_set(col1) from row2col1;

±-----------+

| [“b”,“a”] |

±-----------+


3.6 实现

➢ 创建原始数据表,加载数据

--切换数据库
use db_function;
--建表
create table row2col2(
   col1 string,
   col2 string,
   col3 int
)row format delimited fields terminated by '\t';
--加载数据到表中
load data local inpath '/export/data/r2c2.txt' into table row2col2;

➢ SQL实现转换

select
  col1,
  col2,
  concat_ws(',', collect_list(cast(col3 as string))) as col3
from
  row2col2
group by
  col1, col2;

4 列转行:多列转多行

4.1 需求

⚫ 原始数据表

⚫ 目标结果表

4.2 union

➢ 功能:将多个select语句结果合并为一个,且结果去重且排序

➢ 语法

select_statement

UNION [DISTINCT]

select_statement

UNION [DISTINCT]

select_statement …

➢ 测试

select 'b','a','c' 
union 
select 'a','b','c' 
union  
select 'a','b','c';

4.3 union all

➢ 功能:将多个select语句结果合并为一个,且结果不去重不排序

➢ 语法

select_statement UNION ALL select_statement UNION ALL select_statement …


➢ 测试

select ‘b’,‘a’,‘c’

union all

select ‘a’,‘b’,‘c’

union allselect ‘a’,‘b’,‘c’;

4.4 实现

➢ 创建原始数据表,加载数据

–切换数据库

use db_function;


–创建表

create table col2row1

(

col1 string,

col2 int,

col3 int,

col4 int

) row format delimited fields terminated by ‘\t’;


–加载数据

load data local inpath ‘/export/data/c2r1.txt’ into table col2row1;


➢ SQL实现转换

select col1, ‘c’ as col2, col2 as col3 from col2row1

UNION ALL

select col1, ‘d’ as col2, col3 as col3 from col2row1

UNION ALLselect col1, ‘e’ as col2, col4 as col3 from col2row1;

5 列转行:单列转多行

5.1 需求

➢ 原始数据表

➢ 目标结果表

5.2 explode

➢ 功能:用于将一个集合或者数组中的每个元素展开,将每个元素变成一行

➢ 语法

explode( Map | Array)

➢ 测试

select explode(split(“a,b,c,d”,","));

5.3 实现

➢ 创建原始数据表,加载数据

--切换数据库
use db_function;
--创建表
create table col2row2(
   col1 string,
   col2 string,
   col3 string
)row format delimited fields terminated by '\t';
--加载数据
load data local inpath '/export/data/c2r2.txt' into table col2row2;

➢ SQL实现转换

select
  col1,
  col2,
  lv.col3 as col3
from
  col2row2
    lateral view
  explode(split(col3, ',')) lv as col3;

c43f2c6f218c416bbdae462cfce254f0.png

相关实践学习
基于MaxCompute的热门话题分析
Apsara Clouder大数据专项技能认证配套课程:基于MaxCompute的热门话题分析
目录
相关文章
|
3月前
|
存储 数据采集 搜索推荐
Java 大视界 -- Java 大数据在智慧文旅旅游景区游客情感分析与服务改进中的应用实践(226)
本篇文章探讨了 Java 大数据在智慧文旅景区中的创新应用,重点分析了如何通过数据采集、情感分析与可视化等技术,挖掘游客情感需求,进而优化景区服务。文章结合实际案例,展示了 Java 在数据处理与智能推荐等方面的强大能力,为文旅行业的智慧化升级提供了可行路径。
Java 大视界 -- Java 大数据在智慧文旅旅游景区游客情感分析与服务改进中的应用实践(226)
|
3月前
|
机器学习/深度学习 数据采集 数据可视化
Java 大视界 -- 基于 Java 的大数据可视化在城市空气质量监测与污染溯源中的应用(216)
本文探讨Java大数据可视化在城市空气质量监测与污染溯源中的创新应用,结合多源数据采集、实时分析与GIS技术,助力环保决策,提升城市空气质量管理水平。
Java 大视界 -- 基于 Java 的大数据可视化在城市空气质量监测与污染溯源中的应用(216)
|
3月前
|
存储 监控 数据可视化
Java 大视界 -- 基于 Java 的大数据可视化在企业生产运营监控与决策支持中的应用(228)
本文探讨了基于 Java 的大数据可视化技术在企业生产运营监控与决策支持中的关键应用。面对数据爆炸、信息孤岛和实时性不足等挑战,Java 通过高效数据采集、清洗与可视化引擎,助力企业构建实时监控与智能决策系统,显著提升运营效率与竞争力。
|
3月前
|
Java 大数据 数据处理
Java 大视界 -- 基于 Java 的大数据实时数据处理在工业互联网设备协同制造中的应用与挑战(222)
本文探讨了基于 Java 的大数据实时数据处理在工业互联网设备协同制造中的应用与挑战。文章分析了传统制造模式的局限性,介绍了工业互联网带来的机遇,并结合实际案例展示了 Java 在多源数据采集、实时处理及设备协同优化中的关键技术应用。同时,也深入讨论了数据安全、技术架构等挑战及应对策略。
|
3月前
|
数据采集 搜索推荐 Java
Java 大视界 -- Java 大数据在智能教育虚拟学习环境构建与用户体验优化中的应用(221)
本文探讨 Java 大数据在智能教育虚拟学习环境中的应用,涵盖多源数据采集、个性化推荐、实时互动优化等核心技术,结合实际案例分析其在提升学习体验与教学质量中的成效,并展望未来发展方向与技术挑战。
|
3月前
|
机器学习/深度学习 人工智能 自然语言处理
Java 大视界 -- Java 大数据机器学习模型在自然语言生成中的可控性研究与应用(229)
本文深入探讨Java大数据与机器学习在自然语言生成(NLG)中的可控性研究,分析当前生成模型面临的“失控”挑战,如数据噪声、标注偏差及黑盒模型信任问题,提出Java技术在数据清洗、异构框架融合与生态工具链中的关键作用。通过条件注入、强化学习与模型融合等策略,实现文本生成的精准控制,并结合网易新闻与蚂蚁集团的实战案例,展示Java在提升生成效率与合规性方面的卓越能力,为金融、法律等强监管领域提供技术参考。
|
3月前
|
存储 人工智能 算法
Java 大视界 -- Java 大数据在智能医疗影像数据压缩与传输优化中的技术应用(227)
本文探讨 Java 大数据在智能医疗影像压缩与传输中的关键技术应用,分析其如何解决医疗影像数据存储、传输与压缩三大难题,并结合实际案例展示技术落地效果。
|
3月前
|
机器学习/深度学习 安全 Java
Java 大视界 -- Java 大数据在智能金融反洗钱监测与交易异常分析中的应用(224)
本文探讨 Java 大数据在智能金融反洗钱监测与交易异常分析中的应用,介绍其在数据处理、机器学习建模、实战案例及安全隐私等方面的技术方案与挑战,展现 Java 在金融风控中的强大能力。
|
3月前
|
机器学习/深度学习 算法 Java
Java 大视界 -- Java 大数据机器学习模型在生物信息学基因功能预测中的优化与应用(223)
本文探讨了Java大数据与机器学习模型在生物信息学中基因功能预测的优化与应用。通过高效的数据处理能力和智能算法,提升基因功能预测的准确性与效率,助力医学与农业发展。
|
3月前
|
机器学习/深度学习 搜索推荐 数据可视化
Java 大视界 -- Java 大数据机器学习模型在电商用户流失预测与留存策略制定中的应用(217)
本文探讨 Java 大数据与机器学习在电商用户流失预测与留存策略中的应用。通过构建高精度预测模型与动态分层策略,助力企业提前识别流失用户、精准触达,实现用户留存率与商业价值双提升,为电商应对用户流失提供技术新思路。