【问题标题】:Hive Query Subquery inside the filter expresson过滤器表达式中的 Hive 查询子查询
【发布时间】:2020-09-06 18:19:53
【问题描述】:

我正在使用 spark sql 创建查询。实际查询的大小有点大,但我遇到的问题是以下错误

Error in SQL statement: AnalysisException: IN/EXISTS predicate sub-queries can only be used in a Filter: Aggregate

查询的以下部分引起了麻烦。我不确定

select col1, col2,
sum(case
    WHEN snoozed_until is NULL
        AND hired is NULL
        AND lower(profile_archive_status) = 'true'
        AND profile_id NOT IN 
    (SELECT profile_id
    FROM candidates_feedback f
    WHERE lower(f.a1) LIKE '%no%') THEN
        1
        ELSE 0 END) Archived, 
        sum(case
        WHEN snoozed_until is NULL
            AND hired is NULL
            AND lower(profile_archive_status) = 'true'
            AND profile_id IN (SELECT profile_id FROM candidates_feedback f WHERE lower(f.a1) LIKE '%no%') THEN 1 ELSE 0 END) Rejected,
from table;

【问题讨论】:

  • 提供样本数据、期望的结果以及您想要完成的任务的说明。
  • @GordonLinoff 我已经更新了查询,我希望它现在有意义。类似的事情在这里。 stackoverflow.com/questions/34861516/…
  • 选择投影中不允许使用 IN/EXISTS 谓词。查询分析器说它只在过滤器中接受。请尝试修改查询

标签: sql apache-spark hive apache-spark-sql


【解决方案1】:

在子查询中使用左连接:

select col1, col2,
sum(CASE
       WHEN snoozed_until is NULL
        AND hired is NULL
        AND lower(profile_archive_status) = 'true'
        AND p.profile_id IS NULL THEN 1 ELSE 0 
     END) Archived, 
sum(CASE
        WHEN snoozed_until is NULL
            AND hired is NULL
            AND lower(profile_archive_status) = 'true'
            AND p.profile_id IS NOT NULL THEN 1 ELSE 0 
    END) Rejected
from table t
     left join 
     (SELECT DISTINCT profile_id
        FROM candidates_feedback f
       WHERE lower(f.a1) LIKE '%no%') p on t.profile_id=p.profile_id

【讨论】:

    猜你喜欢
    • 2021-01-29
    • 1970-01-01
    • 2018-11-15
    • 1970-01-01
    • 1970-01-01
    • 2020-08-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多