Hive

如何在Hive中实现列转行

小樊
81
2024-12-20 18:43:04
栏目: 大数据

在Hive中,可以使用UNNEST函数将行转换为列

假设我们有一个名为sales_data的表,其结构如下:

CREATE TABLE sales_data (
  product_id INT,
  sale_date STRING,
  quantity INT
);

现在,我们希望将这个表转换为一个宽格式,其中每个产品ID和日期组合都有一行,相应的数量值放在单独的列中。可以使用以下查询实现这一目标:

SELECT
  product_id,
  COLLECT_LIST(sale_date) AS sale_dates,
  COLLECT_LIST(quantity) AS quantities
FROM
  sales_data
GROUP BY
  product_id;

这将返回一个结果集,其中每个product_id都有对应的sale_datesquantities列表。

如果你希望将结果集转换回标准的宽格式(即每个日期和数量都有一行),可以使用UNNEST函数。首先,需要创建一个辅助表,用于存储sale_datesquantities的数组:

CREATE TABLE sales_data_unneasted AS
SELECT
  product_id,
  sale_date,
  quantity
FROM
  sales_data;

接下来,使用UNNEST函数将数组转换为行:

WITH product_sales AS (
  SELECT
    product_id,
    sale_date,
    quantity
  FROM
    sales_data_unneasted
),
unnested_sales AS (
  SELECT
    product_id,
    UNNEST(sale_dates) AS sale_date,
    UNNEST(quantities) AS quantity
  FROM
    product_sales
)
SELECT
  product_id,
  sale_date,
  quantity
FROM
  unnested_sales;

这将返回一个宽格式的结果集,其中每个产品ID、日期和数量组合都有一行。

0
看了该问题的人还看了