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

Hive双表关联条件编写求助:实现details_filter字段逻辑

解决Hive中新增details_filter字段的SQL实现

我来帮你搞定这个需求啦!根据你给出的匹配规则和期望输出,我们可以通过Hive的集合函数+条件判断来完成details_filter字段的计算,具体SQL如下:

WITH cust_det_groups AS (
    SELECT 
        Cust_dec,
        collect_set(Cust_det) AS det_list
    FROM Cust_buy_details
    GROUP BY Cust_dec
)
SELECT 
    c.Cust_id,
    c.Purchase,
    c.Purchase_detail,
    CASE
        WHEN c.Purchase = cd.Cust_dec AND array_contains(cd.det_list, c.Purchase_detail) THEN c.Purchase_detail
        ELSE NULL
    END AS details_filter
FROM Customers c
LEFT JOIN cust_det_groups cd ON c.Purchase = cd.Cust_dec;

代码逻辑说明:

  1. 预处理Cust_buy_details表:用CTE(公共表表达式)cust_det_groups把每个Cust_dec对应的所有Cust_det值收集成一个数组集合det_list,这样每个购买决策(buy/no_buy)只会对应一条记录,后续关联更高效。
  2. 关联两张表:左连接Customers表和预处理后的cust_det_groups表,关联条件是Customers.Purchase等于Cust_buy_details.Cust_dec。
  3. 条件判断生成目标字段:
    • 当Purchase和Cust_dec匹配,且Purchase_detail存在于对应Cust_dec的det_list集合中时,返回Purchase_detail;
    • 其他所有情况(包括Purchase和Cust_dec不匹配,或者匹配但Purchase_detail不在集合里)都返回null,完全符合你给出的规则。

和示例结果的匹配验证:

  • Cust_id=123:Purchase是buy,对应的det_list包含Cheap,所以details_filter返回Cheap;
  • Cust_id=985:Purchase是buy,但Purchase_detail是Deal of the day不在buy对应的det_list里,返回null;
  • Cust_id=978:Purchase是no_buy,Purchase_detail是Interested不在no_buy对应的det_list里,返回null;
    所有结果都和你期望的输出一致哦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 20:12:43