Hadoop / Hive запрос, чтобы разделить один столбец на несколько - PullRequest
3 голосов
/ 07 ноября 2011

Я использую HIVE с двумя таблицами, похожими (более или менее):

-TABLE1 определяется как [(Переменные: строка), (Значение1: int), (Значение2: int)]

с полем «Переменные», выглядящим как «x0, x1, x2, x3, ..., xn»

-TABLE2 определяют как [(Value1Sum: int), (Value2Sum: int), (X1: строка), (X4: строка), (X17: строка)]

Я "конвертирую" table1 в table2 с помощью запроса:

INSERT OVERWRITE TABLE table2
    SELECT sum(v1), sum(v2), x1, x4, x17
        FROM (SELECT
                Value1 as v1,
                Value2 as v2,
                split(Variables, ",")[1] as x1,
                split(Variables, ",")[4] as x4,
                split(Variables, ",")[17] as x17 
              FROM Table1) tmp
        GROUP BY tmp.x1, tmp.x4, tmp.x17

Вызывает ли Hive 3 раза функцию разделения?

Есть ли способ сделать его более элегантным?

Есть ли способ сделать его более общим?

С наилучшими пожеланиями, CC

1 Ответ

3 голосов
/ 18 ноября 2011

Да, это будет вызывать разделение каждый раз.Вы можете сделать его немного более элегантным:

Почему бы не определить переменные как столбец массива для начала?Они позволяют напрямую обращаться к элементам:

select Varaibles[1] from table1

Я предполагаю, что вы используете внешнюю таблицу, поэтому вы можете сделать это следующим образом:

create external table table1(variables array<string>, a int, b int)
ROW FORMAT DELIMITED
    COLLECTION ITEMS TERMINATED BY ','
LOCATION 'hdfs://somewhere'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...