2013-12-05 2 views
5

У меня есть таблица HIVE с 10 столбцами, где первые 9 столбцов будут иметь повторяющиеся строки, а 10-й столбец не будет, так как он будет иметь CREATE_DATE, который будет иметь дату, когда он был создан.Удаление строк DUPLICATE в улье на основе столбцов

Пример:

Если вставить 10 строк в таблицу сегодня она будет иметь CREATE_DATE как дата сегодняшней .. Если я вставляю те же 10 строк, завтра он будет иметь другой CREATE_DATE, который создает проблему мне используя DISTINCT.

Есть ли способ удаления дубликатов записей на основе 9 столбцов и игнорирования 10-го.

Пример: Давайте рассмотрим, что у меня есть 5 столбцов в таблице. Это ВНЕШНЯЯ ТАБЛИЦА ВИЧ, разделенная DAYID и MARKETID. Всякий раз, когда столбцы, отличные от CREATEDATE (как указано в строках 1 и 2), одинаковы ИЛИ, если строки дублируются (как указано в строках 3 и 4), он должен сохранять любую из этих строк. Неважно, что он сохраняет.

COL1 COL2 CREATEDATE DAYID MARKETID 
A  1 20131206 20131207 1234 
A  1 20131207 20131207 1234 
A  1 20131206 20131207 1234 
B  1 20131206 20131207 1234 
B  1 20131206 20131207 1234 
C  2 20131206 20131207 1234 
C  2 20131207 20131207 5678 

выход ---

COL1 COL2 CREATEDATE DAYID MARKETID 
A  1 20131206 20131207 1234 
B  1 20131206 20131207 1234 
C  2 20131206 20131207 1234 
C  2 20131207 20131207 5678 

Благодаря ягодичной

+0

Можете ли вы предоставить некоторые данные примера здесь и вы хотите? –

+0

Пример: Давайте рассмотрим, что у меня есть 5 столбцов в таблице. COL1 COL2 CREATEDATE DAYID MARKETID A – user3072054

ответ

17

Вы можете сделать следующее:

select col1,col2,dayid,marketid,max(createdate) as createdate 
from tablename 
group by col1,col2,dayid,marketid 

Таким образом, вы группируя данные по всем столбцам, кроме данные, поэтому, если в этих столбцах есть строки с одинаковыми значениями, y будет в той же группе, а затем просто «выберите» созданное, которое вы хотите, используя функцию агрегата, такую ​​как max/min и т. д.

+0

Спасибо, dimamah..это хорошо работает .... – user3072054

+1

выберет * из группы таблиц * тоже работа? – Petro

0

Ну, куст не обеспечивает обновление/удаление строки на уровне, поэтому мы можем избежать дублирующие данные при загрузке данных в базовые таблицы. Как показано ниже

CREATE TABLE RAW_TABLE 
(
    COL1 STRING, 
    COL2 STRING, 
    CREATEDATE STRING, 
    DAYID STRING, 
    MARKETID STRING 
) 
ROW FORMAT DELIMITED 
FIELDS TERMINATE BY'\t' 
STORED AS TEXTFILE; 

LOAD DATA INPATH '/FOLDER/TO/EXAMPLE.txt INTO RAW_TABLE; 

CREATE TABLE JLT_CLEAN AS 
SELECT col1, 
    col2, 
    dayid, 
    marketid, 
    MAX(createdate) AS createdate 
FROM JLT_STAHING 
GROUP BY col1, 
    col2, 
    dayid, 
    marketid; 

Это то, что мы можем использовать.

Смежные вопросы