温馨提示×

Hive列转行与行转列的区别

小樊
93
2024-12-20 18:52:08
栏目: 大数据
开发者测试专用服务器限时活动,0元免费领,库存有限,领完即止! 点击查看>>

Hive中的列转行(Pivot)和行转列(Unpivot)是两种不同的数据转换操作,它们在处理数据时有着不同的目的和效果。

  1. 列转行(Pivot): 列转行是将Hive表中的一列或多列值转换为多个新的列,这些新列通常包含原始列的值作为行数据。在Hive中,可以使用CASE语句结合GROUP BY聚合函数(如SUMAVG等)来实现列转行的操作。这种转换通常用于将数据从长格式转换为宽格式,使得数据分析更加方便。

示例: 假设有一个名为sales_data的表,其中包含以下列:product_iddaterevenue。我们想要将date列的值转换为多个新的列,例如yearmonthday,并将这些新列的值汇总为每个product_id的总revenue。可以使用以下Hive SQL语句实现:

SELECT product_id,
       SUM(CASE WHEN YEAR(date) = 2021 THEN revenue ELSE 0 END) AS revenue_2021,
       SUM(CASE WHEN YEAR(date) = 2022 THEN revenue ELSE 0 END) AS revenue_2022,
       SUM(CASE WHEN YEAR(date) = 2023 THEN revenue ELSE 0 END) AS revenue_2023
FROM sales_data
GROUP BY product_id;
  1. 行转列(Unpivot): 行转列是将Hive表中的一行或多行数据转换为多个新的列,这些新列通常包含原始行的键值对作为行数据。在Hive中,可以使用LATERAL VIEWEXPLODE函数来实现行转列的操作。这种转换通常用于将数据从宽格式转换为长格式,以便进行更详细的数据分析。

示例: 假设有一个名为employee_data的表,其中包含以下列:employee_iddepartmentsalary。我们想要将每个员工的工资信息转换为多个新的列,例如yearmonthday,并将这些新列的值汇总为每个员工的总收入。可以使用以下Hive SQL语句实现:

SELECT employee_id,
       SUM(CASE WHEN YEAR(salary_date) = 2021 THEN salary ELSE 0 END) AS salary_2021,
       SUM(CASE WHEN YEAR(salary_date) = 2022 THEN salary ELSE 0 END) AS salary_2022,
       SUM(CASE WHEN YEAR(salary_date) = 2023 THEN salary ELSE 0 END) AS salary_2023
FROM employee_data
LATERAL VIEW INLINE(EXPLODE(ARRAY(
  STRUCT('2021', salary_date, salary),
  STRUCT('2022', salary_date, salary),
  STRUCT('2023', salary_date, salary)
))) t AS year, month, salary
GROUP BY employee_id;

总结:

  • 列转行是将一列或多列值转换为多个新的列,通常用于将长格式数据转换为宽格式。
  • 行转列是将一行或多行数据转换为多个新的列,通常用于将宽格式数据转换为长格式。

亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>

推荐阅读:oracle的行转列和列转行怎么实现

0