我是 apache phoenix 的新手。我们需要编写 phoenix udfs。但我发现关于它的文档非常有限:在博客上: http://phoenix-hbase.blogspot.in/2013/04/how-to-add-your-own-built-in-function.html 上面的链接只提供了非常简单的功能,只有单一的 i/p 和 o/p 类型。 我一周以来一直在搜索,但找不到任何文档解释如何编写评估函数,该函数需要多个参数并可以根据输入返回不同的数据类型。目前我只能了解phoenix内置函数的源码,比较麻烦。有没有Phoenix UDF的综合文档。
最佳答案
我也在尝试 Phoenix 并且需要编写 UDF。以下是我迄今为止学到的一些东西。
您可以通过以下方式创建接受多个输入的 UDF:
1) 像这样为类定义两个参数
@FunctionParseNode.BuiltInFunction(
名称 = BitmapUnionUDF.NAME,
参数 = {
@FunctionParseNode.Argument(allowedTypes = {PBinary.class}),
@FunctionParseNode.Argument(allowedTypes = {PBinary.class})
}
)
公共(public)类 BitmapIntersectionLengthUDF 扩展 ScalarFunction {
2) 访问评估函数内的参数
表达式 arg1 = getChildren().get(0);
表达式 arg2 = getChildren().get(1);
3) 要从每个参数的表达式中实际获取字节值:
if (!arg1.evaluate(tuple, ptr)) {
返回假;
}
-- 这将 ptr 设置为指向 arg1 的值
4) 检索 arg1 值的字节
ptr.copyBytes()
-- 这将返回一个字节数组,您可以将其转换为适当的类型。
5) 注册jar和函数
CREATE FUNCTION BITMAP_INTERSECTION_LENGTH(varbinary,varbinary) 使用 jar '/path/to/jar' 返回整数为 'com.xxx.yyyy.zzz.BitmapIntersectionLengthUDF';
6) phoenix.apache.org/udf.html有关如何/在何处放置 jar 以及要设置哪些配置的更多提示。
关于apache - 需要 apache Phoenix UDF 指南,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39151509/