Автоинкремент UDF работает в улье, но возвращает ноль в Impala

Я создал java-функцию, которая создает автоматически увеличивающееся значение, я также создал пользовательскую функцию hive на основе этой функции, она отлично работает в улье. Я создал UDF Impala на основе этой функции, и он возвращает «ноль» вместо автоматического инкрементного целого числа.

Вот код Java UDF:

import org.apache.hadoop.hive.ql.exec.UDF;
import org.apache.hadoop.hive.ql.udf.UDFType;

@UDFType(stateful = true)
public class AutoIncrementUDF extends UDF {

    int ctr;

    public int evaluate() {
        ctr++;
        return ctr;
    }
}

Создание пользовательской функции Hive:

create function autoincr as 'AutoIncrementUDF';

Создание пользовательской функции Impala:

create function autoincr() returns int LOCATION '/user/acombs/AutoIncrementUDF.jar' symbol='AutoIncrementUDF';

Использование его в Hive и Impala:

select  autoincr() as testkey, * from mapfund 

Любая помощь очень ценится! Спасибо, Анна


person Anna    schedule 06.04.2015    source источник


Ответы (1)


К сожалению, Impala не поддерживает аннотацию @UDFType или понятие пользовательской функции Hive с отслеживанием состояния. Мы добавим примечание в нашу документацию, чтобы сообщить об этом ограничении.

Однако, если вы пытаетесь вернуть номер строки, вы можете использовать аналитические оконные функции, такие как ROW_NUMBER().

Например,

> select ROW_NUMBER() over (order by int_col) as testkey, int_col, float_col from alltypestiny;
+---------+---------+-------------------+
| testkey | int_col | float_col         |
+---------+---------+-------------------+
| 1       | 0       | 0                 |
| 2       | 0       | 0                 |
| 3       | 0       | 0                 |
| 4       | 0       | 0                 |
| 5       | 1       | 1.100000023841858 |
| 6       | 1       | 1.100000023841858 |
| 7       | 1       | 1.100000023841858 |
| 8       | 1       | 1.100000023841858 |
+---------+---------+-------------------+
Fetched 8 row(s) in 0.12s

См. раздел Аналитические функции Impala. подробнее.

person Matt    schedule 21.04.2015