思路:
直接查询百度 Kylin UDF实现 发现一篇已经删除的博客http://cache.baiducontent.com/c?m=9f65cb4a8c8507ed19fa950d100b8738440197634b86914323c3933fcf331d5c063fa8f062630d57938327365ff8540abdb6652969423db09ace8b4dddbb923c6ad567627f45cd1f498f0eafba5154b237e05dfede6df0ccf42592dec5a5da4325cc44040a97808f4d731edd19f00346e4b19939022f63ad9e44728e2a605de9&p=8b2a97548bdf18ff57ee96355959&newp=8b2a970d9c8905ff57ee962c540c92695d0fc20e3cd3d501298ffe0cc4241a1a1a3aecbf23261106d4c3766100a5435fecf73176340634f1f689df08d2ecce7e67c26d70&user=baidu&fm=sc&query=kylin+%CA%B5%CF%D6%D7%D4%B6%A8%D2%E5+%BA%AF%CA%FD&qid=be77acf60002ac48&p1=1
查看配置文件 kylin.properties 中发现 udf的前缀配置为
kylin.query.udf.
全局搜索代码发现 具体的实现
KylinConfigBase.java 中与对应从配置中获取UDF注册配置的方法getUDFs()
进一步发现此方法的调用在OLAPSchemaFactory中createOLAPSchemaFunctions(projConfig.getUDFs(), out);
即拼接生成calcite的初始化信息时,定义 UDF
实现
1.利用 org.apache.calcite.linq4j.function.Parameter 注解
实现一个java的类 包含eval方法
2.编译成 jar,放入kylin的lib目录下面
3.配置kylin.properties
kylin.query.udf.fname=com.demo.kylin.udf.UDFDemo