2015-02-13 4 views
0

У меня есть TableA -Имя строки по серийному номеру

NRow 
---- 
    1 
    2 
... 
1000000 

И TableB -

RowCount Name 
-------------- 
    100 A 
     10 B 
    200 C 
    ... ... 

Я хочу, чтобы добавить тег TableA, который будет принимать значение "A" для первых 100 строк, «B» для следующих 10 строк, «C» для следующих 200 строк и т. Д. Может ли уль это сделать?

+0

лучший способ использовать udf. – amow

+0

Как мне сделать это автоматически с помощью UDF? – KalEl

+0

Рассмотрите возможность записи функции, которая начинается с загрузки данных таблицы B, а затем обрабатывает данные таблицы A, выдает значение имени. Если вы спрашиваете, как автоматически добавить UDF к улью, как к оригинальным. Что я использую, это конфигурация hive.semantic.analyzer.hook. – amow

ответ

0

Ответ на мой собственный вопрос - это возможно с помощью креста.

select a.*, b.Name 
from tablea a, 
(select RowCount, sum(RowCount) rows over (order by Name) as CumRow from tableb) b 
where a.NRow between b.CumRow-b.RowCount+1 and b.CumRow 

UDF также может сделать это, - но он должен будет эффективно имитировать перекрестное соединение (потому что нужно будет нести всю информацию TableB и просканировать TableA).

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