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和产品数量降序排列结果。