Hadoop 在配置单元中使用联接更新查询

Hadoop 在配置单元中使用联接更新查询,hadoop,hive,Hadoop,Hive,我正在努力做到以下几点: UPDATE a SET col1 = B.col1, col3= B.col4 FROM table A JOIN table B on a.col2=b.col2 WHERE A.col5 = B.col5; 但是,这会引发以下错误: 编译语句时出错:ParseException失败-在“col4”附近的“from”处缺少EOF 我尝试重新排列set和from子句,但无法执行查询。例外情况不断出现。 我的表类型、Column数据类型都是相同的。在表上运行静态更新

我正在努力做到以下几点:

UPDATE a
SET col1 = B.col1,
col3= B.col4
FROM table A 
JOIN table B on a.col2=b.col2
WHERE A.col5 = B.col5;
但是,这会引发以下错误:

编译语句时出错:ParseException失败-在“col4”附近的“from”处缺少EOF

我尝试重新排列set和from子句,但无法执行查询。例外情况不断出现。 我的表类型、Column数据类型都是相同的。在表上运行静态更新非常好


是否有任何方法可以在配置单元中使用join运行更新?请帮助。

Hive不支持此功能。只能使用以下结构:

UPDATE a SET col1 =..., col3=... WHERE ...
但是,您有两个选项可以更新表:

  • 子查询

    UPDATE a SET col1 =..., col3=... WHERE col2 in (SELECT ...)
    
    这不是你的案子

  • 插入覆盖

    INSERT OVERWRITE TABLE a SELECT B.col1, col2, A.col3, ...
    
    小心!它会覆盖旧表,若查询错误,可能会丢失或损坏数据。在对实际数据执行之前测试两次


  • 还有一件事,您能解释一下插入覆盖如何替换更新吗?insert向表中添加行时不更新或更改列的值吗?insert OVERRIDE用相应select语句的输出替换所选表或分区的内容。在select语句中,可以使用多个表中的联接和混合变量。因此,您的目标是编写“select”,并在更新后查看输出。好的。看起来像是司机的问题。这个查询在Squirrel中运行得非常好,但在OracleSQLDeveloper中却没有。知道为什么吗?