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

本文涉及的产品
云原生大数据计算服务MaxCompute,500CU*H 100GB 3个月
云原生大数据计算服务 MaxCompute,5000CU*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的热门话题分析
本实验围绕社交用户发布的文章做了详尽的分析,通过分析能得到用户群体年龄分布,性别分布,地理位置分布,以及热门话题的热度。
SaaS 模式云数据仓库必修课
本课程由阿里云开发者社区和阿里云大数据团队共同出品,是SaaS模式云原生数据仓库领导者MaxCompute核心课程。本课程由阿里云资深产品和技术专家们从概念到方法,从场景到实践,体系化的将阿里巴巴飞天大数据平台10多年的经过验证的方法与实践深入浅出的讲给开发者们。帮助大数据开发者快速了解并掌握SaaS模式的云原生的数据仓库,助力开发者学习了解先进的技术栈,并能在实际业务中敏捷的进行大数据分析,赋能企业业务。 通过本课程可以了解SaaS模式云原生数据仓库领导者MaxCompute核心功能及典型适用场景,可应用MaxCompute实现数仓搭建,快速进行大数据分析。适合大数据工程师、大数据分析师 大量数据需要处理、存储和管理,需要搭建数据仓库?学它! 没有足够人员和经验来运维大数据平台,不想自建IDC买机器,需要免运维的大数据平台?会SQL就等于会大数据?学它! 想知道大数据用得对不对,想用更少的钱得到持续演进的数仓能力?获得极致弹性的计算资源和更好的性能,以及持续保护数据安全的生产环境?学它! 想要获得灵活的分析能力,快速洞察数据规律特征?想要兼得数据湖的灵活性与数据仓库的成长性?学它! 出品人:阿里云大数据产品及研发团队专家 产品 MaxCompute 官网 https://www.aliyun.com/product/odps&nbsp;
目录
相关文章
|
1月前
|
SQL 存储 分布式计算
ODPS技术架构深度剖析与实战指南——从零开始掌握阿里巴巴大数据处理平台的核心要义与应用技巧
【10月更文挑战第9天】ODPS是阿里巴巴推出的大数据处理平台,支持海量数据的存储与计算,适用于数据仓库、数据挖掘等场景。其核心组件涵盖数据存储、计算引擎、任务调度、资源管理和用户界面,确保数据处理的稳定、安全与高效。通过创建项目、上传数据、编写SQL或MapReduce程序,用户可轻松完成复杂的数据处理任务。示例展示了如何使用ODPS SQL查询每个用户的最早登录时间。
90 1
|
1月前
|
存储 分布式计算 druid
大数据-149 Apache Druid 基本介绍 技术特点 应用场景
大数据-149 Apache Druid 基本介绍 技术特点 应用场景
57 1
大数据-149 Apache Druid 基本介绍 技术特点 应用场景
ly~
|
1月前
|
供应链 搜索推荐 安全
大数据模型的应用
大数据模型在多个领域均有广泛应用。在金融领域,它可用于风险评估与预测、智能营销及反欺诈检测,助力金融机构做出更加精准的决策;在医疗领域,大数据模型能够协助疾病诊断与预测、优化医疗资源管理和加速药物研发;在交通领域,该技术有助于交通流量预测、智能交通管理和物流管理,从而提升整体交通效率;电商领域则借助大数据模型实现商品推荐、库存管理和价格优化,增强用户体验与企业效益;此外,在能源和制造业中,大数据模型的应用范围涵盖从需求预测到设备故障预测等多个方面,全面推动了行业的智能化转型与升级。
ly~
83 2
ly~
|
1月前
|
供应链 搜索推荐 大数据
大数据在零售业中的应用
在零售业中,大数据通过分析顾客的购买记录、在线浏览习惯等数据,帮助零售商理解顾客行为并提供个性化服务。例如,分析网站点击路径以了解顾客兴趣,并利用历史购买数据开发智能推荐系统,提升销售和顾客满意度。此外,大数据还能优化库存管理,通过分析销售数据和市场需求,更准确地预测需求,减少库存积压和缺货现象,提高资金流动性。
ly~
273 2
ly~
|
1月前
|
机器学习/深度学习 人工智能 自然语言处理
大数据在智慧金融中的应用
在智能算法交易中,深度学习揭示价格波动的复杂动力学,强化学习依据市场反馈优化策略,助力投资者获取阿尔法收益。智能监管合规利用自然语言处理精准解读法规,实时追踪监管变化,确保机构紧跟政策。大数据分析监控交易,预警潜在违规行为,变被动防御为主动预防。数智化营销通过多维度数据分析,构建细致客户画像,提供个性化产品推荐。智慧客服借助 AI 技术提升服务质量,增强客户满意度。
ly~
108 2
ly~
|
1月前
|
供应链 监控 搜索推荐
大数据的应用场景
大数据在众多行业中的应用场景广泛,涵盖金融、零售、医疗保健、交通物流、制造、能源、政府公共服务及教育等领域。在金融行业,大数据用于风险评估、精准营销、反欺诈以及决策支持;零售业则应用于商品推荐、供应链管理和门店运营优化等;医疗保健领域利用大数据进行疾病预测、辅助诊断和医疗质量评估;交通物流业通过大数据优化物流配送、交通管理和运输安全;制造业则在生产过程优化、设备维护和供应链协同方面受益;能源行业运用大数据提升智能电网管理和能源勘探效率;政府和公共服务部门借助大数据改善城市管理、政务服务及公共安全;教育行业通过大数据实现个性化学习和资源优化配置;体育娱乐业则利用大数据提升赛事分析和娱乐制作水平。
ly~
352 2
|
2月前
|
存储 数据可视化 大数据
大数据管理与应用
大数据管理与应用是一门融合数学、统计学和计算机科学的新兴专业,涵盖数据采集、存储、处理、分析及应用,旨在帮助企业高效决策和提升竞争力。核心课程包括数据库原理、数据挖掘、大数据分析技术等,覆盖数据处理全流程。毕业生可从事数据分析、大数据开发、数据管理等岗位,广泛应用于企业、金融及互联网领域。随着数字化转型加速,该专业需求旺盛,前景广阔。
130 5
|
2月前
|
存储 搜索推荐 大数据
大数据在医疗领域的应用
大数据在医疗领域有广泛应用,包括电子病历的数字化管理和共享,提升医疗服务效率与协同性;通过数据分析支持医疗决策,制定个性化治疗方案;预测疾病风险并提供预防措施;在精准医疗中深度分析患者基因组信息,实现高效治疗;在药物研发中,加速疗效和副作用发现,提高临床试验效率。此外,在金融领域,大数据的“4V”特性助力业务决策前瞻性,被广泛应用于银行、证券和保险的风险评估、市场分析及个性化服务中,提升运营效率和客户满意度。
97 6
|
1月前
|
SQL 分布式计算 Java
大数据-96 Spark 集群 SparkSQL Scala编写SQL操作SparkSQL的数据源:JSON、CSV、JDBC、Hive
大数据-96 Spark 集群 SparkSQL Scala编写SQL操作SparkSQL的数据源:JSON、CSV、JDBC、Hive
34 0
|
2月前
|
机器学习/深度学习 人工智能 分布式计算
人工智能与大数据的融合应用##
随着科技的快速发展,人工智能(AI)和大数据技术已经深刻地改变了我们的生活。本文将探讨人工智能与大数据的基本概念、发展历程及其在多个领域的融合应用。同时,还将讨论这些技术所带来的优势与挑战,并展望未来的发展趋势。希望通过这篇文章,读者能够对人工智能与大数据有更深入的理解,并思考其对未来社会的影响。 ##