Как объединить данные при загрузке их в улей? - PullRequest
1 голос
/ 01 декабря 2011

Я пытаюсь использовать улей для анализа нашего журнала, и у меня есть вопрос.

Предположим, у нас есть такие данные:
A 1
A 1
A 1
Б 1
C 1
Б 1
Как я могу сделать это в таблице улья (порядок не важен, я просто хочу объединить их)?
A 1
B 1
C 1

без предварительной обработки с помощью awk / sed или чего-то подобного?
Спасибо!

Ответы [ 4 ]

3 голосов
/ 16 сентября 2013

Шаг 1: Создать таблицу Hive для набора входных данных.создать таблицу, если она не существует table1 (строка fld1, строка fld2) ФОРМАТ ROW РАЗДЕЛЕННЫЕ ПОЛЯ, ПРЕКРАЩАЕМЫЕ '\ t';(я предполагал, что разделитель полей равен \ t, вы можете заменить его фактическим разделителем)

Шаг 2: Запустите ниже, чтобы получить данные слияния, которые вы ищете

создатьтаблица table2 как выбор fld1, fld2 из группы table1 по fld1, fld2;

Я пробовал это для нижнего набора ввода

куст (по умолчанию)> выбор * из таблицы1;OK

A 1

A 1

A 1

B 1

C 1

B 1

создать таблицу table4 как выбрать fld1, fld2 из группы table1 с помощью fld1, fld2;

hive (по умолчанию)> select * from table4;OK

A 1

B 1

C 1

Вы также можете использовать внешнюю таблицу, но для простоты я использовал здесь управляемую таблицу.

2 голосов
/ 09 декабря 2011

Одна идея ... вы могли бы создать таблицу вокруг первого файла (называемого 'oldtable').

Затем выполнить что-то вроде этого .... создать таблицу newtable выберите field1, max (field) из oldtablegroup by field1;

Не уверен, что у меня есть правильный синтаксис, но идея состоит в том, чтобы получить уникальные значения первого поля и только одного второго.Имеет смысл?

0 голосов
/ 13 июля 2015

Нет способа предварительно обработать данные, пока они загружаются, без использования внешней программы.Вы можете использовать представление, если хотите сохранить исходные данные нетронутыми.

hive> SELECT * FROM table1;
OK
A       1
A       1
A       1
B       1
C       1
B       1
B       2 # Added to show it will group correctly with different values

hive> CREATE VIEW table2 (fld1, fld2) AS SELECT fld1, fld2 FROM table1 GROUP BY fld1, fld2;
hive> SELECT * FROM table2;
OK
A       1
B       1
B       2
C       1
0 голосов
/ 13 июля 2015

Для объединения данных мы также можем использовать «UNION ALL», он также может объединять два разных типа данных.

вставить перезапись в таблицу test1 (выберите x. * Из t1 x) UNION ALL (выберите y. * Из t2 y);

здесь мы объединяем данные двух таблиц (t1 и t2) в одну таблицу test1.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...