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 <7mmi...@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);