You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Hive中如何实现列转多行?附具体业务场景示例

Hive 固定多SKU列转多行实现方案

实现思路

当前场景为固定列数的宽表转长表,核心通过Hive内置UDTF函数posexplode()实现:

  • posexplode()可以将数组拆解为多行,同时返回每个元素在数组中的位置索引
  • 我们将所有sku名称字段、sku数量字段分别按顺序封装为两个数组,通过位置索引匹配就能保证sku名称和对应数量正确关联,避免错乱

实现SQL

假设你的原始表名为original_table,最终转换SQL如下:

SELECT 
    a.index,
    a.name,
    b.sku_nm,
    c.sku_cnt
FROM original_table a
-- 拆解sku名称数组,返回位置和名称
LATERAL VIEW posexplode(array(sku1_nm, sku2_nm, sku3_nm)) b AS pos, sku_nm
-- 拆解sku数量数组,返回位置和数量
LATERAL VIEW posexplode(array(sku1_cnt, sku2_cnt, sku3_cnt)) c AS pos2, sku_cnt
-- 位置匹配保证sku名称和数量对应
WHERE b.pos = c.pos2
-- 可选:过滤掉空值的无效sku行
AND b.sku_nm IS NOT NULL
AND c.sku_cnt IS NOT NULL;

效果验证

拿你给出的示例数据验证:
原始行数据:index=1、name=dgpark、sku1_nm=box、sku1_cnt=3、sku2_nm=drink、sku2_cnt=2、sku3_nm=choco、sku3_cnt=3
执行SQL后输出3行结果:

  • 1 dgpark box 3
  • 1 dgpark drink 2
  • 1 dgpark choco 3

扩展说明

如果后续原始表新增sku4、sku5等字段,只需要在两个array()参数里按顺序新增对应的skuX_nm、skuX_cnt字段即可,其他逻辑无需修改。

内容的提问来源于stack exchange,提问作者dgpark

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 01:36:01