1

自動増分値を作成する Java 関数を作成し、この関数に基づいてハイブ UDF も作成しました。ハイブでうまく機能します。この関数に基づいて Impala UDF を作成したところ、自動増分整数ではなく「null」が返されました。

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;
    }
}

ハイブ UDF の作成:

create function autoincr as 'AutoIncrementUDF';

Impala UDF の作成:

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

Hive と Impala での使用:

select  autoincr() as testkey, * from mapfund 

どんな助けでも大歓迎です!ありがとう、アンナ

4

1 に答える 1

2

@UDFType残念ながら、Impala はステートフルな Hive UDF の注釈または概念をサポートしていません。この制限を知らせるために、ドキュメントにメモを追加します。

ただし、行番号を返そうとしている場合は、 のような分析ウィンドウ関数を使用できます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 分析関数を参照してください。

于 2015-04-21T21:48:53.340 に答える