Как удалить столбцы с менее чем 20 повторениями в таблице улья - PullRequest
0 голосов
/ 25 декабря 2018

Я пытаюсь узнать об удалении повторов user_id менее чем в 20 раз в таблице оценок (идентификаторы с менее чем 20 голосами портят прогноз)

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

Ниже приведена ошибка, которую я получил: org.apache.hive.service.cli.HiveSQLException: ошибка при компиляции оператора: СБОЙ: SemanticException [Ошибка 10128]: Строка 3: 6 Еще не поддерживается место для UDAF 'COUNT' "

Ответы [ 2 ]

0 голосов
/ 25 декабря 2018

Есть две большие проблемы

  • Ваш запрос неверный.для правильной работы необходимо использовать функцию агрегации 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 
        );
0 голосов
/ 25 декабря 2018

Если у вас есть транзакционная таблица , тогда вы можете 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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...