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

时间:2018-12-25 16:30:26

标签: hadoop hive hortonworks-sandbox

我正在尝试了解如何删除评级表中重复少于20次的user_id(ID少于20票的ID会使预测混乱)

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

以下是我得到的错误:org.apache.hive.service.cli.HiveSQLException:编译语句时出错:FAILED:SemanticException [Error 10128]:Line 3:6 UDAF'COUNT'尚不支持此位置

2 个答案:

答案 0 :(得分:0)

如果您有transactional table,则可以使用以下语句 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);

答案 1 :(得分:0)

有两个大问题

  • 您的查询是错误的。为了正常工作,您需要对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 
        );