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

how to delete columns with less than 20 repetitions on a hive table

我正在尝试了解如何删除 user_id 在评分中重复次数少于 20 次的内容 table(少于 20 票的 id 会打乱预测)

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

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

如果您有 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);

有两个大问题

  • 您的查询有误。要正常工作,您需要在 user_id 列上使用聚合函数 count 和 groupby。
  • 您不能使用 delete 语句删除记录,除非您 table 是 transactional table.

要从 非跨国 table 中删除记录,您需要使用 insert overwrite 语句用您的记录覆盖 table想。

语法:

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 
        );