Каждый день пользовательская таблица из оракула сбрасывается в HDFS. Дамп содержит только последние изменения (вставки и обновления), которые были сделаны после предыдущего дампа. Теперь я хотел загрузить все ежедневные дампы, используя PIG, в отношение и соединить его с файлом транзакции, используя поле «userid». Проблема с обновленными записями. Один и тот же пользователь может иметь несколько записей. Я хочу использовать только самую последнюю запись пользователя при присоединении. Как мы можем это сделать. Любая помощь приветствуется. Спасибо.
Обработка обновленных записей в Hadoop
Ответы (1)
Вам нужно сгруппировать файл обновлений, упорядочить его по дате и выбрать первый, а затем присоединиться к нему. Что-то вроде приведенного ниже кода должно предоставить вам самое последнее обновление.
A = LOAD 'user_updates'...;
A_Users = GROUP A BY user_id;
A_TOP = FOREACH A_Users {
sorted = ORDER A BY update_time DESC;
top_one = LIMIT sorted 1;
GENERATE top_one;
};
person
Arnon Rotem-Gal-Oz
schedule
26.04.2013
Спасибо за ваш ответ. Вместо того, чтобы делать это каждый раз, есть ли постепенный способ сделать это? Это может создать проблему, когда набор данных становится очень большим. Есть ли лучший способ сделать это, чем тот, который упомянут в этой ссылке grokbase.com/t/hive/user/10688hfg6z/
- person rahul; 28.04.2013
поскольку таблица обновлений небольшая, вы можете выполнить реплицированное соединение, чтобы меньшая таблица была скопирована, а большая не перемещалась, см. pig.apache.org/docs/r0.11.0/perf.html#Specialized-Joins
- person Arnon Rotem-Gal-Oz; 28.04.2013
Другим способом было бы сохранить его в HBase, который поддерживает случайное чтение-запись (т.е. вы можете обновить определенные записи, которые были изменены).
- person Arnon Rotem-Gal-Oz; 28.04.2013
Спасибо. Попробую реплицированное соединение
- person rahul; 28.04.2013