Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Hive 是否有方法从此配置单元查询中elemenate子查询?_Hive_Hiveql - Fatal编程技术网

Hive 是否有方法从此配置单元查询中elemenate子查询?

Hive 是否有方法从此配置单元查询中elemenate子查询?,hive,hiveql,Hive,Hiveql,编辑:我使用的是ApacheHive版本3.1.0.3.1.5.0-152 当我运行以下查询时: 插入delta_表,从batch_表中选择*,其中loaddate=从batch_表中选择maxloaddate 我得到这个错误: 不支持的子查询表达式“loaddate”:仅子查询表达式 最高级别的合并是允许的 我们有一个表,该表在每日批次中写入,其中loaddate列对于每个批次都是唯一的。查询的目的是从最近的批中获取所有记录,而不知道其加载日期。 我怀疑问题是因为我在子查询中使用了子查询。是否

编辑:我使用的是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;