如何删除配置单元表中重复次数少于20次的列

6xfqseft  于 2021-05-31  发布在  Hadoop
关注(0)|答案(2)|浏览(292)

我正在尝试学习如何删除用户id的重复不到20次在评级表(id与不到20票搞砸了预测)

delete * FROM rating
WHERE COUNT(user_id) <20;

下面是我得到的错误:org.apache.hive.service.cli.hivesqlexception:编译语句时出错:failed:semanticexception[error 10128]:行3:6尚未支持udaf“count”的位置

nzk0hqpo

nzk0hqpo1#

有两个大问题
你的问题是错误的。要正常工作,需要使用聚合函数 count 和groupby在一起 user_id 柱。
不能使用删除记录 delete 除非你的表是 transactional table. 要从非跨国表中删除记录,需要使用 insert overwrite 语句用所需的记录覆盖表。
语法:

Insert overwrite table select * from <table_name> where <condition>

你的代码应该是这样的

INSERT overwrite TABLE rating 
SELECT * 
FROM   rating 
WHERE  
user_id IN 
       ( 
        SELECT   user_id 
        FROM     rating 
        GROUP BY(user_id) 
        HAVING   count(user_id) > 20 
        );
rdlzhqv9

rdlzhqv92#

如果您有事务表,那么您可以 delete user_id 计数少于 20 用下面的语句。

hive> delete from rating where user_id in 
      (select user_id from rating group by user_id having count(user_id) < 20);

相关问题