在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_dates
和quantities
列表。
如果你希望將結果集轉換回標準的寬格式(即每個日期和數量都有一行),可以使用UNNEST
函數。首先,需要創建一個輔助表,用于存儲sale_dates
和quantities
的數組:
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、日期和數量組合都有一行。