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

Hive使用多个lateral view explode拆分多列出现行重复问题

Hive多分隔符字段按位置拆分去重解决方案

问题根因

你当前使用多个explode分别拆分三个字段的写法,会生成三个拆分后数组的笛卡尔积:当每个字段拆分后得到4个元素时,单条原始数据会生成444=64行数据,这就是你遇到重复行问题的核心原因。

解决方案

使用Hive内置的posexplode函数替代普通explode:posexplode拆分数组后会同时返回元素位置索引和元素值,通过索引匹配三个字段的对应位置元素,就能避免笛卡尔积,实现一一对应。

最优查询语句

select 
    Ref_No as Ref,
    ccy_arr[pos] as ccy,
    amt_arr[pos] as amt,
    tag_arr[pos] as tag_1
from (
    -- 预计算三个字段的拆分结果,避免重复计算
    select 
        Ref_No,
        split(Currency, "\\^") as ccy_arr,
        split(Amount, "\\^") as amt_arr,
        split(Tag, "\\^") as tag_arr
    from table1
) t
-- 对任意一个数组做位置拆解,此处以Currency字段的拆分结果为例
lateral view posexplode(ccy_arr) tmp as pos, ccy
-- 过滤原始字符串末尾^产生的空值元素
where trim(ccy) != ''
-- 可选:增加长度校验,避免三个字段元素数量不一致导致的错位问题
and pos < size(amt_arr) 
and pos < size(tag_arr)

样例输出

针对你给出的测试数据,执行上述语句后会得到4行正确的结构化结果:

Refccyamttag_1
EBDR001usd240DBC
EBDR001usd300ODA
EBDR001usd210ICA
EBDR001usd500DRA

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 20:45:08