impalaカスタム集約関数はjavaでは開発できません.c++でしか開発できません.

1670 ワード


impala3.0
カスタム関数(UDF:USER-DEFINED FUNCTION)は、一方通行関数(eg:rtrim()、abs()、concat()、substr()など)があり、scala、java、C++を使って開発できます
 カスタム集約関数(UDAF:USER-DEFINED AGGREGATE FUNCTION)   (eg:sum()、max()、avg()など)は、C++でしか開発できず、scala、javaはしばらくサポートされていません.
     JAva言語開発のUDAFはhive上で作成して使用できます.
 
IMPALA 3.0ドキュメント原文:
To create a persistent scalar C++UDF with CREATE FUNCTION:(scalar、c++開発のカスタム関数構文を作成)
CREATE FUNCTION [IF NOT EXISTS]
[db_name.]function_name([arg_type[, arg_type...])
RETURNS return_type
LOCATION 'hdfs_path_to_dot_so'
SYMBOL='symbol_name'

To create a persistent Java UDF with CREATE FUNCTION:(java開発のカスタム関数を作成する構文)
CREATE FUNCTION [IF NOT EXISTS] [db_name.]function_name
LOCATION 'hdfs_path_to_jar'
SYMBOL='class_name'

To create a persistent UDA,which must be written in C+,issue a CREATE AGGREGATE FUNCTION statement:(C++で永続的な集約関数を開発し、集約関数を作成する構文を公開する必要がある)
CREATE [AGGREGATE] FUNCTION [IF NOT EXISTS]
[db_name.]function_name([arg_type[, arg_type...])
RETURNS return_type
LOCATION 'hdfs_path'
[INIT_FN='function]
UPDATE_FN='function
MERGE_FN='function
[PREPARE_FN='function]
[CLOSEFN='function]
[SERIALIZE_FN='function]
[FINALIZE_FN='function]
[INTERMEDIATE type_spec]

作業環境のimpalaバージョン2.9.0-cdh 5.12.1
Java-udfを作成するときもreturnsを指定し、エラーを報告することは指定しません.
create function mylower2  (string)  returns  string  location  '/usr/data/hive-udf.jar'  symbol 'com.xxx.hive.lower' 

 
 
以上の内容は仕事の中で蓄積して、完全に正しいことを保証しないで、もし間違いがあれば、指摘して、ありがとうございます!