我想把复制品放进去 mytable 如果在 col1 .
mytable
col1
WITH CTE AS ( SELECT *, ROW_NUMBER() OVER (PARTITION BY col1 ORDER BY col1) AS RN FROM mytable ) DELETE FROM CTE WHERE RN <> 1
我有个错误:无法识别语句中“cte”中“delete”附近的输入
svmlkihl1#
我认为hive不支持这种语法 DELETE . 试试这个:
DELETE
DELETE FROM mytable t WHERE t.id > (SELECT MIN(t2.id) -- some sort of unique id FROM t t2 WHERE t2.id = t.id );
如果你有完整的副本,那么上面的就行不通了。在hive的最新版本中,您可以使用 MERGE . 在旧版本中:
MERGE
create table temp_t as select distinct t.* from t; truncate table t; insert into t select * from temp_t;
当然,在试这个之前先备份一下table!
mftmpeh82#
另一种方法:假设您有唯一的id列。
Delete from MyTable where ID in (SELECT ID FROM (SELECT *, ROW_NUMBER() OVER (PARTITION BY col1 ORDER BY col1) AS RN FROM mytable) a where RN <> 1)
2条答案
按热度按时间svmlkihl1#
我认为hive不支持这种语法
DELETE
. 试试这个:如果你有完整的副本,那么上面的就行不通了。在hive的最新版本中,您可以使用
MERGE
. 在旧版本中:当然,在试这个之前先备份一下table!
mftmpeh82#
另一种方法:假设您有唯一的id列。