как объединить данные при загрузке их в куст?

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

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

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


person SSolid    schedule 01.12.2011    source источник


Ответы (4)


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

Шаг 2. Выполните команду ниже, чтобы получить нужные данные слияния.

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

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

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

A 1

A 1

A 1

B 1

C 1

B 1

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

куст (по умолчанию)> выберите * из таблицы4; ХОРОШО

A 1

B 1

C 1

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

person Navneet Kumar    schedule 16.09.2013
comment
Или вы можете просто сделать: выберите отдельные fld1, fld2 из table1. Тот же результат, но он выглядит немного чище (ну, по крайней мере, для меня) - person JagdCrab; 23.08.2016

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

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

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

person user783112    schedule 08.12.2011

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

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

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

person Kapil Sharma    schedule 13.07.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
person brandon.bell    schedule 13.07.2015