You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@kylin.apache.org by li...@apache.org on 2024/04/01 05:35:56 UTC
(kylin) 05/14: KYLIN-5765 Optimization of registering udf operators
This is an automated email from the ASF dual-hosted git repository.
liyang pushed a commit to branch kylin5
in repository https://gitbox.apache.org/repos/asf/kylin.git
commit b7615c56bb618fc1133d156d12df9fd00ea04a2d
Author: Mingming Ge <7m...@gmail.com>
AuthorDate: Mon Jul 10 14:10:51 2023 +0800
KYLIN-5765 Optimization of registering udf operators
---
.../kylin/query/util/RexToTblColRefTranslator.java | 31 +++++++++++++---------
1 file changed, 19 insertions(+), 12 deletions(-)
diff --git a/src/query-common/src/main/java/org/apache/kylin/query/util/RexToTblColRefTranslator.java b/src/query-common/src/main/java/org/apache/kylin/query/util/RexToTblColRefTranslator.java
index 9ce69bc03d..bc5d78109a 100644
--- a/src/query-common/src/main/java/org/apache/kylin/query/util/RexToTblColRefTranslator.java
+++ b/src/query-common/src/main/java/org/apache/kylin/query/util/RexToTblColRefTranslator.java
@@ -287,6 +287,8 @@ public class RexToTblColRefTranslator {
private final Map<String, SqlNode> rexToSqlMap;
+ private static final Set<String> REGISTERED_UDFS = registerUdfs();
+
public OLAPRexSqlStandardConvertletTable(RexCall call, Map<String, SqlNode> rexToSqlMap) {
super();
this.rexToSqlMap = rexToSqlMap;
@@ -303,18 +305,7 @@ public class RexToTblColRefTranslator {
}
private void registerUdfOperator(RexCall call) {
- Set<String> udfs = Sets.newHashSet();
- KylinConfig.getInstanceFromEnv().getUDFs().forEach((key, value) -> {
- try {
- val methods = Class.forName(value).getMethods();
- for (Method method : methods) {
- udfs.add(method.getName().toLowerCase(Locale.ROOT));
- }
- } catch (Exception e) {
- log.error("registerUdfOperator not found method for :", e);
- }
- });
- if (udfs.contains(call.getOperator().toString().toLowerCase(Locale.ROOT))) {
+ if (REGISTERED_UDFS.contains(call.getOperator().toString().toLowerCase(Locale.ROOT))) {
SqlOperator operator = call.getOperator();
this.registerEquivOp(operator);
}
@@ -338,6 +329,22 @@ public class RexToTblColRefTranslator {
}
}
+ private static Set<String> registerUdfs() {
+ Set<String> udfs = Sets.newHashSet();
+ KylinConfig.getInstanceFromEnv().getUDFs().forEach((key, value) -> {
+ try {
+ val methods = Class.forName(value).getMethods();
+ for (Method method : methods) {
+ udfs.add(method.getName().toLowerCase(Locale.ROOT));
+ }
+ } catch (Exception e) {
+ log.error("registerUdfOperator not found method for :", e);
+ }
+ });
+
+ return udfs;
+ }
+
private Map<TimeUnit, SqlDatePartFunction> initTimeUnitFunctionMap() {
Map<TimeUnit, SqlDatePartFunction> rst = Maps.newHashMap();
rst.putIfAbsent(TimeUnit.YEAR, SqlStdOperatorTable.YEAR);