Hive中的posexplode
函数用于将数组或map类型的列展开为多行
假设我们有一个名为orders
的表,其中包含以下列:
表结构如下:
CREATE TABLE orders (
order_id INT,
products ARRAY<STRING>
);
现在,我们想要分析每个订单中包含的产品数量。我们可以使用posexplode
函数来实现这一目标。首先,我们需要将products
列展开为多行,然后计算每个产品的数量。以下是查询示例:
SELECT
order_id,
posexplode(products) AS product_id,
COUNT(*) AS product_count
FROM
orders
GROUP BY
order_id, product_id
ORDER BY
order_id, product_count DESC;
这个查询将返回以下结果:
order_id | product_id | product_count |
---|---|---|
1 | a | 2 |
1 | b | 1 |
2 | c | 3 |
2 | d | 1 |
在这个例子中,我们首先使用posexplode
函数将products
列展开为多行。然后,我们使用GROUP BY
子句按order_id
和product_id
对结果进行分组,并使用COUNT(*)
函数计算每个产品的数量。最后,我们使用ORDER BY
子句按订单ID和产品数量降序排列结果。