Hive 是否有方法从此配置单元查询中elemenate子查询?
编辑:我使用的是ApacheHive版本3.1.0.3.1.5.0-152 当我运行以下查询时: 插入delta_表,从batch_表中选择*,其中loaddate=从batch_表中选择maxloaddate 我得到这个错误: 不支持的子查询表达式“loaddate”:仅子查询表达式 最高级别的合并是允许的 我们有一个表,该表在每日批次中写入,其中loaddate列对于每个批次都是唯一的。查询的目的是从最近的批中获取所有记录,而不知道其加载日期。Hive 是否有方法从此配置单元查询中elemenate子查询?,hive,hiveql,Hive,Hiveql,编辑:我使用的是ApacheHive版本3.1.0.3.1.5.0-152 当我运行以下查询时: 插入delta_表,从batch_表中选择*,其中loaddate=从batch_表中选择maxloaddate 我得到这个错误: 不支持的子查询表达式“loaddate”:仅子查询表达式 最高级别的合并是允许的 我们有一个表,该表在每日批次中写入,其中loaddate列对于每个批次都是唯一的。查询的目的是从最近的批中获取所有记录,而不知道其加载日期。 我怀疑问题是因为我在子查询中使用了子查询。是否
我怀疑问题是因为我在子查询中使用了子查询。是否有办法更改此查询以执行相同的操作,但不使用最后一个子查询 取决于您拥有的配置单元的版本,但是您可以使用with子句来避免第二个子查询
with max_load as ( select max(loaddate) as loaddate from batch_table)
insert into delta_table
(select * from batch_table a where a.loaddate=max_load.loaddate);
错误似乎是因为表创建不正确,并且由于某种原因导致查询失败。我重新创建了表,它现在可以工作了。分析函数+过滤器将比自连接或子查询更高效,只需再扫描一次表即可找到最大日期:
insert into delta_table
select col1, col2, ... coln --list columns here
from
(
select t.*, rank() over(order by loaddate desc) rnk
from batch_table t
)s
where rnk=1;
取决于您拥有的蜂巢的版本,您可以使用带有的子句替换为派生表并将其联接到该子句。我有Apache配置单元版本3.1.0.3.1.5.0-152,我尝试了该查询,但得到了无效的表别名或列引用“max_load”:可能的列名为:。。。错误尝试使用最大负载为的内部联接将maxloaddate作为loaddate从batch\u表插入delta\u表选择*从batch\u表a内部联接最大负载a.loaddate=max\u load.loaddate;