首页 > 解决方案 > 根据 Hive SQL 中的选择查询设置 if 条件值

问题描述

我想根据IF选择查询中的值的条件设置一个新列。例如,

SELECT
    request_id,
    charge_click_cnt,
    IF(
        uuid IN (
            SELECT
                deviceid
            from
                t1
            where
                dt between '20210908'
                and '20210915'
        ),
        'shop_user',
        'non_shop_user'
    ) as shop_user
FROM
    t2

但似乎有些错误如下。

org.apache.spark.sql.catalyst.analysis.CheckAnalysis$class#failAnalysis:41 org.apache.spark.sql.catalyst.analysis.Analyzer#failAnalysis:91 org.apache.spark.sql.catalyst.analysis.CheckAnalysis$ $anonfun$checkAnalysis$1#apply:316

所以我想知道是否有更好的方法可以像之前的代码一样设置条件值。
提前感谢。

标签: sqlapache-sparkhivehiveql

解决方案


如果 spark 允许带有 exists 子句的 case 语句,则以下内容应该可以工作。

SELECT request_id,
       charge_click_cnt, 
       CASE WHEN EXISTS(SELECT 1
                          FROM t1
                         WHERE dt between '20210908'AND '20210915'
                           AND uuid=deviceid) THEN 'shop_user' 
            ELSE 'non_shop_user' 
        END 
  FROM t2;

推荐阅读