溫馨提示×

如何在Hive中實現列轉行

小樊
98
2024-12-20 18:43:04
欄目: 大數據

在Hive中,可以使用UNNEST函數將行轉換為列

假設我們有一個名為sales_data的表,其結構如下:

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

現在,我們希望將這個表轉換為一個寬格式,其中每個產品ID和日期組合都有一行,相應的數量值放在單獨的列中??梢允褂靡韵虏樵儗崿F這一目標:

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
亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女