目录
3.1 lateral view explode(array()) 方法
3.3 lateral view inline(array(struct<>))
0 前言
行转列一直是SQL开发常见的数据结构转换方式,一般最普遍的方法就是采用union all的形式,但这种方式代码重复片段太多,写法不够优雅。本文采用hive sql的形式给出了三种行转列的方法,分别利用hive中的explode()、inline()、及stack()函数进行转换。
这里首先声明,行转列与列转行的定义,主要是以矩阵转置的概念来看,我们把多列组成的一行数据称为行向量,把该行向量变换为多行一列(列向量)的过程称为行转列,相反的把列向量(多行一列)转换为行向量(多列一行)的过程称为列转行。那么有同学会问在hive中,经常会把多行数据按照指定的分隔符合并成一列,这种也属于列转行吗?为了区分,我们统一把这种操作方式叫多行转一行,或者叫数据合并过程(collect_list()),而把该过程的逆过程称为一行转多行,或称为数据展开过程(explode(),flatmap())。
1 需求描述
已知学生成绩表如下,分别有三个科目英语、数学、历史&#