Hive 行列转换

本文涉及的产品
实时计算 Flink 版,5000CU*H 3个月
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
大数据开发治理平台 DataWorks,不限时长
简介: 使用`lateral view + explode`或`inline`可将列转换为行,实现数据降维。例如,`explode(array|map)`用于单列转多行,`inline(array_struct)`将结构体数组拆分成多行。同样,通过条件聚合可实现行转列,常用于多行数据聚合到单行中,如示例所示的按月统计订单金额。

2000元阿里云代金券免费领取,2核4G云服务器仅664元/3年,新老用户都有优惠,立即抢购>>>


阿里云采购季(云主机223元/3年)活动入口:请点击进入>>>,


阿里云学生服务器(9.5元/月)购买入口:请点击进入>>>,

行列转换

列转行

使用 lateral view + explode(array|map)lateral view + inline(array_struct) 可以将列转换为行。

  • 单列转多行,降维(单列数组或键值对)

示例1:explode(array(...))

select ..., A
from T
lateral view explode(ARRAY_FIELD) as A;
select explode(`array`(88.2,98.3,67.1)) AS (price);

示例2:explode(map(...))

select ..., K, V
from T
lateral view explode(MAP_FIELD) as K, V;
select explode(`map`("java",56,"mysql",88,"javascript",66)) AS (subject, score);

示例3:inline(array_struct)

select ..., 
from T
lateral view inline(STRUCT_ARRAY_FIELD)V as F1,...,FN;
with tmp as (
select array(
    named_struct('name','henry','age',22,'is_member','true'),
    named_struct('name','pola','age',20,'is_member','true'),
    named_struct('name','ariel','age',19,'is_member','true')
   ) AS array_struct
)
select name,age,is_member
from tmp
lateral view inline(array_struct)V as name,age,is_member;

lateral view inline(array_struct)将结构体数组的每个元素都转化为一行,每一行都包含结构体字段的值.
前:
image.png

后:
image.png

  • 多列转多行
select ..., A
from T
lateral view explode(array|map(F1,...,FN))V as A;

示例:

SELECT name, class, Scores.subject, Scores.score
FROM Students
LATERAL VIEW EXPLODE(ARRAY(
    named_struct('subject','math','score',math_score),
    named_struct('subject','science','score',science_score)
    )
) V AS Scores;

前:
image.png
后:
image.png

行转列
  • 多行转多列
    条件聚合,通常用于将多行数据中满足条件的某个值聚合到单个行中。

    select
          F1,...,
          sum(if(C1,0,V1)) as A1,
          sum(if(C2,0,V2)) as A2,
          sum(if(C3,0,V3)) as A3
      from TABLE_NAME
      group by F1,...
    
      drop table if exists lateral_view_stack_test1w;
      create table lateral_view_stack_test1w as
      select year,
             sum(if(month(order_time)=1,order_amount,0)) as sum_jan,
             sum(if(month(order_time)=2,order_amount,0)) as sum_feb,
             sum(if(month(order_time)=3,order_amount,0)) as sum_mar,
             sum(if(month(order_time)=4,order_amount,0)) as sum_apr,
             sum(if(month(order_time)=5,order_amount,0)) as sum_may,
             sum(if(month(order_time)=6,order_amount,0)) as sum_jun,
             sum(if(month(order_time)=7,order_amount,0)) as sum_jul,
             sum(if(month(order_time)=8,order_amount,0)) as sum_aug,
             sum(if(month(order_time)=9,order_amount,0)) as sum_sep,
             sum(if(month(order_time)=10,order_amount,0)) as sum_oct,
             sum(if(month(order_time)=11,order_amount,0)) as sum_nov,
             sum(if(month(order_time)=12,order_amount,0)) as sum_dec
      from hive_internal_par_regex_test1w
      where year>=2014
      group by year;
    
目录
相关文章
|
6天前
|
SQL HIVE 索引
【Hive SQL 每日一题】行列转换
该文介绍了如何使用SQL进行数据的行列转换。首先展示了行转列的例子,通过创建一个学生成绩表,利用`IF`和`SUM`函数按学生ID分组,将每个学生的各科成绩转换为独立列。然后,文章讲述了列转行的需求,利用`LATERAL VIEW`和`POSEXPLODE`将已转换的表格恢复为原始行格式,通过索引匹配过滤笛卡尔积避免错误结果。此外,还提到了使用`UNION ALL`的另一种列转行方法。
|
9月前
|
SQL 数据可视化 大数据
大数据Hive行列转换应用与实现
大数据Hive行列转换应用与实现
124 0
|
17天前
|
SQL 数据采集 数据挖掘
大数据行业应用之Hive数据分析航班线路相关的各项指标
大数据行业应用之Hive数据分析航班线路相关的各项指标
117 1
|
17天前
|
SQL 存储 大数据
【大数据技术Hadoop+Spark】Hive基础SQL语法DDL、DML、DQL讲解及演示(附SQL语句)
【大数据技术Hadoop+Spark】Hive基础SQL语法DDL、DML、DQL讲解及演示(附SQL语句)
96 0
|
8月前
|
SQL 分布式计算 大数据
黑马程序员-大数据入门到实战-分布式SQL计算 Hive 入门
黑马程序员-大数据入门到实战-分布式SQL计算 Hive 入门
85 0
|
8月前
|
SQL Java 大数据
Hive实战(03)-深入了解Hive JDBC:在大数据世界中实现数据交互
Hive实战(03)-深入了解Hive JDBC:在大数据世界中实现数据交互
262 1
|
17天前
|
SQL 分布式计算 数据库
【大数据技术Spark】Spark SQL操作Dataframe、读写MySQL、Hive数据库实战(附源码)
【大数据技术Spark】Spark SQL操作Dataframe、读写MySQL、Hive数据库实战(附源码)
128 0
|
17天前
|
SQL 存储 分布式计算
【大数据技术Hadoop+Spark】Hive数据仓库架构、优缺点、数据模型介绍(图文解释 超详细)
【大数据技术Hadoop+Spark】Hive数据仓库架构、优缺点、数据模型介绍(图文解释 超详细)
339 0
|
8月前
|
SQL 存储 大数据
黑马程序员-大数据入门到实战-分布式SQL计算 Hive 语法与概念
黑马程序员-大数据入门到实战-分布式SQL计算 Hive 语法与概念
85 0
|
8月前
|
SQL 前端开发 Java
大数据平台底层技术-JAVA篇-如何动态加载不同版本的 HIVE JDBC 驱动 - 一文读懂JAVA的类加载机制 1
大数据平台底层技术-JAVA篇-如何动态加载不同版本的 HIVE JDBC 驱动 - 一文读懂JAVA的类加载机制
http://www.vxiaotou.com