在数据仓库中,行转列通常称为”变形”(Pivoting) 或 “透视”(Pivoting),可使用Spark SQL的pivot语句实现。下面是一个简单的示例:
假设我们有如下表格:
- +-------+-------+------+
- | name | brand | year |
- +-------+-------+------+
- | Alice | BMW | 2017 |
- | Bob | Tesla | 2018 |
- | Alice | Tesla | 2019 |
- | Bob | BMW | 2020 |
- +-------+-------+------+
我们想要把该表中的品牌列转换为4列,分别表示不同的品牌,而值则为对应品牌的年份。具体操作如下:
- SELECT name,
- COALESCE(BMW, 0) AS BMW,
- COALESCE(Tesla, 0) AS Tesla
- FROM (
- SELECT name,
- brand,
- year
- FROM my_table
- ) T
- PIVOT (
- MAX(year)
- FOR brand IN ('BMW', 'Tesla')
- )
运行上面的代码,得到的结果如下所示:
- +-------+------+------+
- | name | BMW | Tesla|
- +-------+------+------+
- | Alice | 2017 | 2019 |
- | Bob | 2020 | 2018 |
- +-------+------+------+
可以看到,原本的品牌列已经被转换成了两个新的列,并且对于每个人名,都有对应的品牌年份信息填充其中。这就是典型的行转列操作。其中,COALESCE函数用于处理可能存在的空值情况。