View 使用子查询的配置单元横向视图和WHERE子句

View 使用子查询的配置单元横向视图和WHERE子句,view,hive,subquery,apache-hive,View,Hive,Subquery,Apache Hive,我正在寻找一种优化查询的方法 我们有一个名为lea的事件表,其中有一列app_属性,这些属性是标记,存储为逗号分隔的字符串 我想选择与选择所需标记的查询结果相匹配的所有事件 我的第一次尝试: 但是蜂巢不允许这样 失败:SemanticException[错误10249]:第4:6行不支持的子查询表达式“tag”:相关表达式不能包含非限定的列引用 用WHERE tag_table.tag IN替换WHERE tag IN,再次尝试,但运气不好 失败:SemanticException行4:6子查询

我正在寻找一种优化查询的方法

我们有一个名为lea的事件表,其中有一列app_属性,这些属性是标记,存储为逗号分隔的字符串

我想选择与选择所需标记的查询结果相匹配的所有事件

我的第一次尝试:

但是蜂巢不允许这样

失败:SemanticException[错误10249]:第4:6行不支持的子查询表达式“tag”:相关表达式不能包含非限定的列引用

用WHERE tag_table.tag IN替换WHERE tag IN,再次尝试,但运气不好

失败:SemanticException行4:6子查询sq_1[tag_table.tag in SELECT source_value FROM mapping,其中indicator='Bandwidth Usage']的定义中的无效表别名tag_table'在第4:20行用作sq_1

最后。。。下面的查询给出了期望的结果,但我觉得这不是解决这个用例的最佳方式。是否有人遇到过您需要使用子查询从横向视图中选择的相同用例


WHERE子句中的配置单元子查询可与in、NOT in、EXIST或NOT一起使用 存在如下。如果在WHERE条件中未在列名称之前指定employee表的别名(请参见以下示例),配置单元将报告相关表达式不能包含非限定列引用的错误。这是配置单元子查询的一个限制

来自ApacheHiveEssentials

我猜这个问题也是由子查询引起的。
事件应该有别名

我有完全相同的问题。你找到优化的解决方案了吗?没有,我还在第一篇文章中使用这个查询。
SELECT uuid, app_properties, tag
FROM events
LATERAL VIEW explode(split(app_properties, '(, |,)')) tag_table AS tag
WHERE tag IN (SELECT source_value FROM mapping WHERE indicator = 'Bandwidth Usage')
SELECT to_date(substring(events.time, 0, 10)) as date, t2.code, t2.indicator, count(1) as total
FROM events
LEFT JOIN (
    SELECT distinct t.uuid, im.code, im.indicator
    FROM mapping im
    RIGHT JOIN (
      SELECT tag, uuid
      FROM events
      LATERAL VIEW explode(split(app_properties, '(, |,)')) tag_table AS tag
      ) t
    ON im.source_value = t.tag AND im.indicator = 'Bandwidth Usage'
    WHERE im.source_value IS NOT NULL
) t2 ON (events.uuid = t2.uuid)
WHERE t2.code IS NOT NULL
GROUP BY to_date(substring(events.time, 0, 10)), t2.code, t2.indicator;