(kylin) 32/35: KYLIN-5841 Fix vulnerability, Upgrade org.apache.avro:avro to version 1.11.3

2024-04-12 Thread liyang
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 7d24ce642c1dc96f2a476408fd546d971963d5e0
Author: huangsheng 
AuthorDate: Sun Oct 8 15:29:39 2023 +0800

KYLIN-5841 Fix vulnerability, Upgrade org.apache.avro:avro to version 1.11.3
---
 pom.xml | 7 +++
 1 file changed, 7 insertions(+)

diff --git a/pom.xml b/pom.xml
index 04a01dc8a8..6b37bca758 100644
--- a/pom.xml
+++ b/pom.xml
@@ -401,6 +401,7 @@
 9.23
 1.2.1
 1.1.10.4
+1.11.3
 
 
 
@@ -3003,6 +3004,12 @@
 netty
 ${netty3.version}
 
+
+org.apache.avro
+avro
+${avro.version}
+provided
+
 
 
 



(kylin) 20/35: KYLIN-5816 Add zk lock for dict v3

2024-04-12 Thread liyang
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 2159699d8e54588d879e0ebdbb1f2ed11380bb23
Author: Yaguang Jia 
AuthorDate: Thu Sep 21 16:51:14 2023 +0800

KYLIN-5816 Add zk lock for dict v3
---
 .../engine/spark/builder/DFDictionaryBuilder.scala | 17 +-
 .../kylin/engine/spark/builder/ZKHelper.scala  | 42 +
 .../spark/builder/v3dict/DictionaryBuilder.scala   | 69 ++
 3 files changed, 75 insertions(+), 53 deletions(-)

diff --git 
a/src/spark-project/engine-spark/src/main/scala/org/apache/kylin/engine/spark/builder/DFDictionaryBuilder.scala
 
b/src/spark-project/engine-spark/src/main/scala/org/apache/kylin/engine/spark/builder/DFDictionaryBuilder.scala
index ae95344cd0..af8399ca3a 100644
--- 
a/src/spark-project/engine-spark/src/main/scala/org/apache/kylin/engine/spark/builder/DFDictionaryBuilder.scala
+++ 
b/src/spark-project/engine-spark/src/main/scala/org/apache/kylin/engine/spark/builder/DFDictionaryBuilder.scala
@@ -48,28 +48,13 @@ class DFDictionaryBuilder(
 changeAQEConfig(true)
   }
 
-  private val YARN_CLUSTER: String = "cluster"
   private val AQE = "spark.sql.adaptive.enabled";
   private val originalAQE = ss.conf.get(AQE)
 
-  private def tryZKJaasConfiguration(): Unit = {
-val config = KylinConfig.getInstanceFromEnv
-if (YARN_CLUSTER.equals(config.getDeployMode)) {
-  val kapConfig = KapConfig.wrap(config)
-  if (KapConfig.FI_PLATFORM.equals(kapConfig.getKerberosPlatform) || 
KapConfig.TDH_PLATFORM.equals(kapConfig.getKerberosPlatform)) {
-val sparkConf = ss.sparkContext.getConf
-val principal = sparkConf.get("spark.kerberos.principal")
-val keytab = sparkConf.get("spark.kerberos.keytab")
-logInfo(s"ZKJaasConfiguration principal: $principal, keyTab: $keytab")
-javax.security.auth.login.Configuration.setConfiguration(new 
ZKJaasConfiguration(principal, keytab))
-  }
-}
-  }
-
   @throws[IOException]
   private[builder] def safeBuild(ref: TblColRef): Unit = {
 val sourceColumn = ref.getIdentity
-tryZKJaasConfiguration()
+ZKHelper.tryZKJaasConfiguration(ss)
 val lock: Lock = KylinConfig.getInstanceFromEnv.getDistributedLockFactory
   .getLockForCurrentThread(getLockPath(sourceColumn))
 lock.lock()
diff --git 
a/src/spark-project/engine-spark/src/main/scala/org/apache/kylin/engine/spark/builder/ZKHelper.scala
 
b/src/spark-project/engine-spark/src/main/scala/org/apache/kylin/engine/spark/builder/ZKHelper.scala
new file mode 100644
index 00..1fd321f64e
--- /dev/null
+++ 
b/src/spark-project/engine-spark/src/main/scala/org/apache/kylin/engine/spark/builder/ZKHelper.scala
@@ -0,0 +1,42 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.kylin.engine.spark.builder
+
+import org.apache.kylin.common.{KapConfig, KylinConfig}
+import org.apache.spark.internal.Logging
+import org.apache.spark.sql.SparkSession
+
+object ZKHelper extends Logging{
+  private val YARN_CLUSTER: String = "cluster"
+
+  def tryZKJaasConfiguration(ss: SparkSession): Unit = {
+val config = KylinConfig.getInstanceFromEnv
+if (YARN_CLUSTER.equals(config.getDeployMode)) {
+  val kapConfig = KapConfig.wrap(config)
+  if (KapConfig.FI_PLATFORM.equals(kapConfig.getKerberosPlatform) || 
KapConfig.TDH_PLATFORM.equals(kapConfig.getKerberosPlatform)) {
+val sparkConf = ss.sparkContext.getConf
+val principal = sparkConf.get("spark.kerberos.principal")
+val keytab = sparkConf.get("spark.kerberos.keytab")
+logInfo(s"ZKJaasConfiguration principal: $principal, keyTab: $keytab")
+javax.security.auth.login.Configuration.setConfiguration(new 
ZKJaasConfiguration(principal, keytab))
+  }
+}
+  }
+
+}
diff --git 
a/src/spark-project/engine-spark/src/main/scala/org/apache/kylin/engine/spark/builder/v3dict/DictionaryBuilder.scala
 
b/src/spark-project/engine-spark/src/main/scala/org/apache/kylin/engine/spark/builder/v3dict/Dictio

(kylin) 35/35: KYLIN-5846 upgrade spark version to 3.2.0-kylin-4.6.16.0

2024-04-12 Thread liyang
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 3f9b9c83bedbce17be0dcac5af427c636353621a
Author: huangsheng 
AuthorDate: Mon Oct 30 13:30:54 2023 +0800

KYLIN-5846 upgrade spark version to 3.2.0-kylin-4.6.16.0
---
 pom.xml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/pom.xml b/pom.xml
index 6b37bca758..889fa87c96 100644
--- a/pom.xml
+++ b/pom.xml
@@ -126,7 +126,7 @@
 
 2.0.2
 
-3.2.0-kylin-4.6.14.0
+3.2.0-kylin-4.6.16.0
 
 0.9.2-kylin-r4
 



(kylin) 29/35: KYLIN-5838 Replace join expression with the name of computedColumn

2024-04-12 Thread liyang
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 eacb62b8aa9c23a627ec5803d18b245420222f4c
Author: Pengfei Zhan 
AuthorDate: Tue Sep 26 21:23:55 2023 +0800

KYLIN-5838 Replace join expression with the name of computedColumn
---
 .../kylin/query/util/ConvertToComputedColumn.java  | 20 +++
 .../apache/kylin/query/util/CCOnRealModelTest.java | 68 ++
 2 files changed, 52 insertions(+), 36 deletions(-)

diff --git 
a/src/query-common/src/main/java/org/apache/kylin/query/util/ConvertToComputedColumn.java
 
b/src/query-common/src/main/java/org/apache/kylin/query/util/ConvertToComputedColumn.java
index 1c4fa5a287..8e4e7631b7 100644
--- 
a/src/query-common/src/main/java/org/apache/kylin/query/util/ConvertToComputedColumn.java
+++ 
b/src/query-common/src/main/java/org/apache/kylin/query/util/ConvertToComputedColumn.java
@@ -34,11 +34,13 @@ import javax.annotation.Nullable;
 import org.apache.calcite.avatica.util.Quoting;
 import org.apache.calcite.sql.SqlAggFunction;
 import org.apache.calcite.sql.SqlAsOperator;
+import org.apache.calcite.sql.SqlBasicCall;
 import org.apache.calcite.sql.SqlCall;
 import org.apache.calcite.sql.SqlDataTypeSpec;
 import org.apache.calcite.sql.SqlDynamicParam;
 import org.apache.calcite.sql.SqlIdentifier;
 import org.apache.calcite.sql.SqlIntervalQualifier;
+import org.apache.calcite.sql.SqlJoin;
 import org.apache.calcite.sql.SqlKind;
 import org.apache.calcite.sql.SqlLiteral;
 import org.apache.calcite.sql.SqlNode;
@@ -100,12 +102,30 @@ public class ConvertToComputedColumn implements 
IQueryTransformer {
 List inputNodes = new LinkedList<>();
 inputNodes.addAll(collectCandidateInputNodes(select.getSelectList(), 
select.getGroup()));
 inputNodes.addAll(collectCandidateInputNodes(select.getOrderList(), 
select.getGroup()));
+if (select.getFrom() instanceof SqlJoin) {
+SqlJoin join = (SqlJoin) select.getFrom();
+collectJoinNodes(inputNodes, join);
+}
 inputNodes.addAll(collectCandidateInputNode(select.getHaving(), 
select.getGroup()));
 inputNodes.addAll(getInputTreeNodes(select.getWhere()));
 inputNodes.addAll(getInputTreeNodes(select.getGroup()));
 return inputNodes;
 }
 
+private static void collectJoinNodes(List inputNodes, SqlJoin 
join) {
+if (join.getLeft() instanceof SqlJoin) {
+collectJoinNodes(inputNodes, (SqlJoin) join.getLeft());
+}
+SqlNode condition = join.getCondition();
+if (condition.getKind() == SqlKind.EQUALS) {
+SqlBasicCall call = (SqlBasicCall) condition;
+inputNodes.addAll(call.getOperandList());
+}
+if (join.getRight() instanceof SqlJoin) {
+collectJoinNodes(inputNodes, (SqlJoin) join.getRight());
+}
+}
+
 private static List collectInputNodes(SqlOrderBy sqlOrderBy) {
 // if order list is not empty and query is a select
 // then collect order list with checking on group keys
diff --git 
a/src/query/src/test/java/org/apache/kylin/query/util/CCOnRealModelTest.java 
b/src/query/src/test/java/org/apache/kylin/query/util/CCOnRealModelTest.java
index 164810ad51..a299fbee9e 100644
--- a/src/query/src/test/java/org/apache/kylin/query/util/CCOnRealModelTest.java
+++ b/src/query/src/test/java/org/apache/kylin/query/util/CCOnRealModelTest.java
@@ -17,32 +17,20 @@
  */
 package org.apache.kylin.query.util;
 
-import org.apache.kylin.common.util.NLocalFileMetadataTestCase;
-import org.junit.After;
-import org.junit.Assert;
-import org.junit.Before;
-import org.junit.Ignore;
-import org.junit.Test;
+import org.apache.kylin.junit.annotation.MetadataInfo;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Disabled;
+import org.junit.jupiter.api.Test;
 
 /**
  * test against real models
  */
-public class CCOnRealModelTest extends NLocalFileMetadataTestCase {
-private ConvertToComputedColumn converter;
-
-@Before
-public void setup() throws Exception {
-
this.createTestMetadata("../core-metadata/src/test/resources/ut_meta/ccjointest");
-converter = new ConvertToComputedColumn();
-}
-
-@After
-public void after() throws Exception {
-super.cleanupTestMetadata();
-}
+@MetadataInfo(overlay = 
"../core-metadata/src/test/resources/ut_meta/ccjointest")
+class CCOnRealModelTest {
+private final ConvertToComputedColumn converter = new 
ConvertToComputedColumn();
 
 @Test
-public void testConvertSingleTableCC() {
+void testConvertSingleTableCC() {
 {
 String originSql = "select count(*), sum (price * item_count) from 
test_kylin_fact f left join test_order o on f.ORDER_ID = o.ORDER_ID"
 + " left join test_account a on o.buyer_id = a.account

(kylin) 24/35: KYLIN-5830 Push columns of sortRel to subOlapContexts

2024-04-12 Thread liyang
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 191d08c272b48d04441783290459291f70c2e9e6
Author: Pengfei Zhan 
AuthorDate: Wed Sep 20 10:20:56 2023 +0800

KYLIN-5830 Push columns of sortRel to subOlapContexts
---
 .../query/routing/RealizationChooserTest.java  | 24 +-
 .../org/apache/kylin/util/OlapContextTestUtil.java | 13 
 .../org/apache/kylin/query/relnode/KapSortRel.java | 19 +++--
 .../apache/kylin/query/relnode/KapTableScan.java   | 10 +
 4 files changed, 59 insertions(+), 7 deletions(-)

diff --git 
a/src/kylin-it/src/test/java/org/apache/kylin/query/routing/RealizationChooserTest.java
 
b/src/kylin-it/src/test/java/org/apache/kylin/query/routing/RealizationChooserTest.java
index 2cea9cf51b..267be6b1d8 100644
--- 
a/src/kylin-it/src/test/java/org/apache/kylin/query/routing/RealizationChooserTest.java
+++ 
b/src/kylin-it/src/test/java/org/apache/kylin/query/routing/RealizationChooserTest.java
@@ -21,12 +21,14 @@ package org.apache.kylin.query.routing;
 import java.util.List;
 import java.util.Map;
 
+import org.apache.calcite.rel.RelNode;
 import org.apache.calcite.sql.parser.SqlParseException;
 import org.apache.kylin.common.KylinConfig;
 import org.apache.kylin.engine.spark.NLocalWithSparkSessionTest;
 import org.apache.kylin.guava30.shaded.common.collect.ImmutableList;
 import org.apache.kylin.metadata.cube.model.NDataflow;
 import org.apache.kylin.metadata.cube.model.NDataflowManager;
+import org.apache.kylin.query.relnode.KapSortRel;
 import org.apache.kylin.query.relnode.OLAPContext;
 import org.apache.kylin.util.OlapContextTestUtil;
 import org.junit.After;
@@ -97,6 +99,25 @@ public class RealizationChooserTest extends 
NLocalWithSparkSessionTest {
 }
 }
 
+@Test
+public void testPushSortRelToSubOlapContexts() throws SqlParseException {
+overwriteSystemProp("kylin.query.print-logical-plan", "true");
+String project = "joins_graph_left_or_inner";
+String sql = "select a.NAME from TEST_BANK_INCOME a inner join 
TEST_BANK_LOCATION b on a.COUNTRY = b.COUNTRY\n"
++ "order by a.INCOME nulls last";
+RelNode relNode = 
OlapContextTestUtil.cutOlapContextsAndReturnRelNode(project, sql);
+KapSortRel sortRel = null;
+while (relNode != null) {
+if (relNode instanceof KapSortRel) {
+sortRel = (KapSortRel) relNode;
+break;
+}
+relNode = relNode.getInput(0);
+}
+Assert.assertNotNull(sortRel);
+Assert.assertTrue(sortRel.isNeedPushToSubCtx());
+}
+
 @Test
 public void testCanMatchModelInnerQueryLeft() throws SqlParseException {
 // model: TEST_BANK_INCOME inner join TEST_BANK_LOCATION
@@ -127,7 +148,8 @@ public class RealizationChooserTest extends 
NLocalWithSparkSessionTest {
 String sql = "select a.NAME from TEST_BANK_INCOME a left join 
TEST_BANK_LOCATION b \n"
 + " on a.COUNTRY = b.COUNTRY where " + filter;
 OLAPContext olapContext = 
OlapContextTestUtil.getOlapContexts(getProject(), sql).get(0);
-Map sqlAlias2ModelNameMap = 
OlapContextTestUtil.matchJoins(dataflow.getModel(), olapContext);
+Map sqlAlias2ModelNameMap = 
OlapContextTestUtil.matchJoins(dataflow.getModel(),
+olapContext);
 Assert.assertTrue(sqlAlias2ModelNameMap.isEmpty());
 }
 }
diff --git 
a/src/kylin-it/src/test/java/org/apache/kylin/util/OlapContextTestUtil.java 
b/src/kylin-it/src/test/java/org/apache/kylin/util/OlapContextTestUtil.java
index 094fa8c3c5..e7e2a88b5c 100644
--- a/src/kylin-it/src/test/java/org/apache/kylin/util/OlapContextTestUtil.java
+++ b/src/kylin-it/src/test/java/org/apache/kylin/util/OlapContextTestUtil.java
@@ -56,6 +56,19 @@ public class OlapContextTestUtil {
 return getOlapContexts();
 }
 
+public static RelNode cutOlapContextsAndReturnRelNode(String project, 
String sql) throws SqlParseException {
+QueryExec queryExec = new QueryExec(project, 
KylinConfig.getInstanceFromEnv());
+RelNode rel = null;
+try {
+rel = queryExec.parseAndOptimize(sql);
+QueryContextCutter.selectRealization(project, rel, false);
+} catch (NoRealizationFoundException | 
NoStreamingRealizationFoundException e) {
+// When NoRealizationFoundException occurs, do nothing
+// because we only need to obtain OlapContexts.
+}
+return rel;
+}
+
 public static List getOlapContexts(String project, String 
sql, boolean reCutBanned,
 Consumer consumer) throws 
SqlParseException {
 QueryExec queryExec = new QueryExec(project, 
KylinConfig.getInstanceFromEnv()

(kylin) 21/35: KYLIN-5817 Query scanRows and bytes are incorrect

2024-04-12 Thread liyang
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 00352e8c2d53307b4cf3f847fc6bbf2a869c4520
Author: haocheni 
AuthorDate: Fri Sep 22 10:29:48 2023 +0800

KYLIN-5817 Query scanRows and bytes are incorrect
---
 .../src/main/scala/org/apache/spark/sql/hive/QueryMetricUtils.scala   | 4 ++--
 .../org/apache/spark/sql/execution/SparkQueryMetricUtilsSuite.scala   | 4 ++--
 2 files changed, 4 insertions(+), 4 deletions(-)

diff --git 
a/src/spark-project/sparder/src/main/scala/org/apache/spark/sql/hive/QueryMetricUtils.scala
 
b/src/spark-project/sparder/src/main/scala/org/apache/spark/sql/hive/QueryMetricUtils.scala
index 4beda86353..68fc7b9b19 100644
--- 
a/src/spark-project/sparder/src/main/scala/org/apache/spark/sql/hive/QueryMetricUtils.scala
+++ 
b/src/spark-project/sparder/src/main/scala/org/apache/spark/sql/hive/QueryMetricUtils.scala
@@ -63,8 +63,8 @@ object QueryMetricUtils extends Logging {
   child => {
 if (child.isInstanceOf[SparkPlan]) {
   val result = collectAdaptiveSparkPlanExecMetrics(child, scanRow, 
scanBytes)
-  newScanRow = result._1
-  newScanBytes = result._2
+  newScanRow += result._1
+  newScanBytes += result._2
 } else {
   logTrace("Not sparkPlan in collectAdaptiveSparkPlanExecMetrics, 
child: " + child.getClass.getName)
 }
diff --git 
a/src/spark-project/sparder/src/test/scala/org/apache/spark/sql/execution/SparkQueryMetricUtilsSuite.scala
 
b/src/spark-project/sparder/src/test/scala/org/apache/spark/sql/execution/SparkQueryMetricUtilsSuite.scala
index ede02eef60..f0eda5b817 100644
--- 
a/src/spark-project/sparder/src/test/scala/org/apache/spark/sql/execution/SparkQueryMetricUtilsSuite.scala
+++ 
b/src/spark-project/sparder/src/test/scala/org/apache/spark/sql/execution/SparkQueryMetricUtilsSuite.scala
@@ -217,8 +217,8 @@ class SparkQueryMetricUtilsSuite extends QueryTest with 
SharedSparkSession {
 assert(0 == collectScanMetrics._1.get(0))
 assert(0 == collectScanMetrics._2.get(0))
 val collectScanMetrics2 = 
QueryMetricUtils.collectAdaptiveSparkPlanExecMetrics(dataWritingCommandExec, 1, 
1)
-assert(1 == collectScanMetrics2._1)
-assert(1 == collectScanMetrics2._2)
+assert(2 == collectScanMetrics2._1)
+assert(2 == collectScanMetrics2._2)
 
   }
 



(kylin) 22/35: KYLIN-5828 Concurrently dict v2 jobs lead to abnormal encoding result

2024-04-12 Thread liyang
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 c61dc4189968f29f8e56e98f72a16f100e9d6e2b
Author: huangsheng 
AuthorDate: Fri Sep 22 16:13:50 2023 +0800

KYLIN-5828 Concurrently dict v2 jobs lead to abnormal encoding result
---
 .../engine/spark/builder/CreateFlatTable.scala |  15 +--
 .../engine/spark/builder/DFDictionaryBuilder.scala |  16 +--
 .../engine/spark/builder/DFTableEncoder.scala  |  13 ++-
 .../spark/builder/DictionaryBuilderHelper.java |   5 +-
 .../job/stage/build/FlatTableAndDictBase.scala |  18 ++--
 .../engine/spark/dict/NGlobalDictionaryV2Test.java |  77 +--
 .../kylin/engine/spark/builder/TestDFChooser.scala |   5 +-
 .../engine/spark/builder/TestGlobalDictBuild.scala |  58 +--
 .../v3dict/GlobalDictionaryUpdateSuite.scala   |   6 +-
 .../scala/org/apache/spark/sql/KapFunctions.scala  |   4 +-
 .../sql/catalyst/expressions/KapExpresssions.scala |  24 +++--
 .../org/apache/spark/sql/udf/DictEncodeImpl.scala  |   9 +-
 .../org/apache/spark/dict/NBucketDictionary.java   |  62 +---
 .../spark/dict/NGlobalDictBuilderAssist.scala  |   5 +-
 .../apache/spark/dict/NGlobalDictHDFSStore.java|  10 +-
 .../org/apache/spark/dict/NGlobalDictS3Store.java  |  16 +--
 .../org/apache/spark/dict/NGlobalDictStore.java|   4 +-
 .../org/apache/spark/dict/NGlobalDictionaryV2.java | 107 +
 18 files changed, 326 insertions(+), 128 deletions(-)

diff --git 
a/src/spark-project/engine-spark/src/main/scala/org/apache/kylin/engine/spark/builder/CreateFlatTable.scala
 
b/src/spark-project/engine-spark/src/main/scala/org/apache/kylin/engine/spark/builder/CreateFlatTable.scala
index b659b87969..654c5b9f6f 100644
--- 
a/src/spark-project/engine-spark/src/main/scala/org/apache/kylin/engine/spark/builder/CreateFlatTable.scala
+++ 
b/src/spark-project/engine-spark/src/main/scala/org/apache/kylin/engine/spark/builder/CreateFlatTable.scala
@@ -31,6 +31,7 @@ import org.apache.kylin.guava30.shaded.common.collect.Sets
 import org.apache.kylin.metadata.cube.cuboid.NSpanningTree
 import org.apache.kylin.metadata.cube.model.{NCubeJoinedFlatTableDesc, 
NDataSegment}
 import org.apache.kylin.metadata.model._
+import org.apache.spark.dict.NGlobalDictionaryV2.NO_VERSION_SPECIFIED
 import org.apache.spark.sql.functions.{col, expr}
 import org.apache.spark.sql.{Dataset, Row, SparkSession}
 
@@ -115,12 +116,14 @@ class CreateFlatTable(val flatTable: IJoinedFlatTableDesc,
dictCols: Set[TblColRef],
encodeCols: Set[TblColRef]): Dataset[Row] = {
 val ccDataset = withColumn(ds, ccCols)
+var buildVersion = System.currentTimeMillis()
 if (seg.isDictReady) {
   logInfo(s"Skip already built dict, segment: ${seg.getId} of dataflow: 
${seg.getDataflow.getId}")
+  buildVersion = NO_VERSION_SPECIFIED
 } else {
-  buildDict(ccDataset, dictCols)
+  buildDict(ccDataset, dictCols, buildVersion)
 }
-encodeColumn(ccDataset, encodeCols)
+encodeColumn(ccDataset, encodeCols, buildVersion)
   }
 
   private def withColumn(ds: Dataset[Row], withCols: Set[TblColRef]): 
Dataset[Row] = {
@@ -131,21 +134,21 @@ class CreateFlatTable(val flatTable: IJoinedFlatTableDesc,
 withDs
   }
 
-  private def buildDict(ds: Dataset[Row], dictCols: Set[TblColRef]): Unit = {
+  private def buildDict(ds: Dataset[Row], dictCols: Set[TblColRef], 
buildVersion: Long): Unit = {
 val matchedCols = if (seg.getIndexPlan.isSkipEncodeIntegerFamilyEnabled) {
   filterOutIntegerFamilyType(ds, dictCols)
 } else {
   selectColumnsInTable(ds, dictCols)
 }
 val builder = new DFDictionaryBuilder(ds, seg, ss, 
Sets.newHashSet(matchedCols.asJavaCollection))
-builder.buildDictSet()
+builder.buildDictSet(buildVersion)
   }
 
-  private def encodeColumn(ds: Dataset[Row], encodeCols: Set[TblColRef]): 
Dataset[Row] = {
+  private def encodeColumn(ds: Dataset[Row], encodeCols: Set[TblColRef], 
buildVersion: Long): Dataset[Row] = {
 val matchedCols = selectColumnsInTable(ds, encodeCols)
 var encodeDs = ds
 if (matchedCols.nonEmpty) {
-  encodeDs = DFTableEncoder.encodeTable(ds, seg, matchedCols.asJava)
+  encodeDs = DFTableEncoder.encodeTable(ds, seg, matchedCols.asJava, 
buildVersion)
 }
 encodeDs
   }
diff --git 
a/src/spark-project/engine-spark/src/main/scala/org/apache/kylin/engine/spark/builder/DFDictionaryBuilder.scala
 
b/src/spark-project/engine-spark/src/main/scala/org/apache/kylin/engine/spark/builder/DFDictionaryBuilder.scala
index af8399ca3a..d930fd178b 100644
--- 
a/src/spark-project/engine-spark/src/main/scala/org/apache/kylin/engine/spark/builder/DFDictionaryBuilder.scala
+++ 
b/src/spark-project/engine-spark/src/main/scala/org/apache/kylin/engine/spark/builder/DFDictionaryBuilder.scala
@@ -43,8 +43,

(kylin) 23/35: KYLIN-5829 Add a tool for generating sql from dumped metadata

2024-04-12 Thread liyang
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 f9255a515d38edafd099c81712c0b6ff8e7038d7
Author: Pengfei Zhan 
AuthorDate: Mon Jun 19 11:41:51 2023 +0800

KYLIN-5829 Add a tool for generating sql from dumped metadata
---
 build/bin/create-table.sh  |  1 -
 build/conf/kylin-tools-diag-log4j.xml  |  6 ++
 .../kylin/tool}/util/CreateTableFromJson.java  | 31 +-
 .../kylin/tool/util/CreateTableFromJsonTest.java   | 68 ++
 4 files changed, 89 insertions(+), 17 deletions(-)

diff --git a/build/bin/create-table.sh b/build/bin/create-table.sh
index 5fbc49541d..a21e39036e 100755
--- a/build/bin/create-table.sh
+++ b/build/bin/create-table.sh
@@ -16,7 +16,6 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 #
-
 if [ -z $KYLIN_HOME ];then
 export KYLIN_HOME=$(cd -P -- "$(dirname -- "$0")"/../ && pwd -P)
 fi
diff --git a/build/conf/kylin-tools-diag-log4j.xml 
b/build/conf/kylin-tools-diag-log4j.xml
index 728e50d2ca..227e71cdd1 100644
--- a/build/conf/kylin-tools-diag-log4j.xml
+++ b/build/conf/kylin-tools-diag-log4j.xml
@@ -28,6 +28,9 @@
 
 
 
+
+
+
 
 
 
@@ -38,5 +41,8 @@
 
 
 
+
+
+
 
 
diff --git 
a/src/core-metadata/src/main/java/org/apache/kylin/rest/util/CreateTableFromJson.java
 b/src/tool/src/main/java/org/apache/kylin/tool/util/CreateTableFromJson.java
similarity index 81%
rename from 
src/core-metadata/src/main/java/org/apache/kylin/rest/util/CreateTableFromJson.java
rename to 
src/tool/src/main/java/org/apache/kylin/tool/util/CreateTableFromJson.java
index 2ee7efef22..67148ad608 100644
--- 
a/src/core-metadata/src/main/java/org/apache/kylin/rest/util/CreateTableFromJson.java
+++ b/src/tool/src/main/java/org/apache/kylin/tool/util/CreateTableFromJson.java
@@ -16,10 +16,13 @@
  * limitations under the License.
  */
 
-package org.apache.kylin.rest.util;
+package org.apache.kylin.tool.util;
 
 import java.io.File;
 import java.io.IOException;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Locale;
 import java.util.Map;
@@ -29,20 +32,16 @@ import org.apache.kylin.common.util.JsonUtil;
 import org.apache.kylin.metadata.model.ColumnDesc;
 import org.apache.kylin.metadata.model.TableDesc;
 
-import org.apache.kylin.guava30.shaded.common.collect.Lists;
-import org.apache.kylin.guava30.shaded.common.collect.Maps;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+import lombok.extern.slf4j.Slf4j;
 
 /**
  * A tool to generate database and tables from metadata backups of customer
  */
+@Slf4j
 public class CreateTableFromJson {
 
 private static final String QUOTE = "`";
-private static final Map TYPE_MAP = Maps.newHashMap();
-
-private static final Logger logger = 
LoggerFactory.getLogger(CreateTableFromJson.class);
+private static final Map TYPE_MAP = new HashMap<>();
 
 static {
 TYPE_MAP.put("integer", "int");
@@ -54,23 +53,23 @@ public class CreateTableFromJson {
 String pathDir = args[0];
 Map> map = createDbAndTables(pathDir);
 
-map.forEach((k, v) -> {
-logger.info(k);
-v.forEach(logger::info);
+map.forEach((db, tables) -> {
+for (String s : db.split("\n")) {
+log.info(s);
+}
+tables.forEach(log::info);
 });
-
-logger.info("\n\n\n\n\n");
 }
 
 // the path is /{metadata_backup_path}/{project_name}/table/
 private static Map> createDbAndTables(String pathDir) 
throws IOException {
-Map> map = Maps.newHashMap();
+Map> map = new LinkedHashMap<>();
 File file = new File(pathDir).getAbsoluteFile();
 File[] files = file.listFiles();
 
 for (File f : Objects.requireNonNull(files)) {
 final TableDesc tableDesc = JsonUtil.readValue(f, TableDesc.class);
-List columnNameTypeList = Lists.newArrayList();
+List columnNameTypeList = new ArrayList<>();
 for (ColumnDesc column : tableDesc.getColumns()) {
 String name = column.getName();
 String type = convert(column.getDatatype());
@@ -79,7 +78,7 @@ public class CreateTableFromJson {
 
 String databaseSql = String.format(Locale.ROOT, "create database 
%s;%nuse %s;",
 quote(tableDesc.getDatabase()), 
quote(tableDesc.getDatabase()));
-map.putIfAbsent(databaseSql, Lists.newArrayList());
+map.putIfAbsent(databaseSql, new ArrayList<>());
 

(kylin) 13/35: KYLIN-5807 Fix query execute as user without data query acl

2024-04-12 Thread liyang
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 a212350a518cde5fa1fe0357a71b806f5533e2c3
Author: Zhimin Wu <596361...@qq.com>
AuthorDate: Fri Sep 1 18:26:22 2023 +0800

KYLIN-5807 Fix query execute as user without data query acl

Co-authored-by: Feng Zhu 
---
 .../java/org/apache/kylin/rest/service/AccessService.java  | 14 ++
 .../java/org/apache/kylin/rest/service/QueryService.java   | 13 +
 .../org/apache/kylin/rest/service/QueryServiceTest.java|  2 ++
 3 files changed, 25 insertions(+), 4 deletions(-)

diff --git 
a/src/common-service/src/main/java/org/apache/kylin/rest/service/AccessService.java
 
b/src/common-service/src/main/java/org/apache/kylin/rest/service/AccessService.java
index 54dcf242c8..031282378f 100644
--- 
a/src/common-service/src/main/java/org/apache/kylin/rest/service/AccessService.java
+++ 
b/src/common-service/src/main/java/org/apache/kylin/rest/service/AccessService.java
@@ -756,13 +756,19 @@ public class AccessService extends BasicService {
 return sidWithPermissions;
 }
 
-@SneakyThrows(IOException.class)
 public Set getUserNormalExtPermissions(String project) {
-String projectUuid = 
NProjectManager.getInstance(KylinConfig.getInstanceFromEnv()).getProject(project)
-.getUuid();
 Authentication authentication = 
SecurityContextHolder.getContext().getAuthentication();
 if (Objects.nonNull(authentication)) {
-val userName = authentication.getName();
+return getUserNormalExtPermissionsByUserInProject(project, 
authentication.getName());
+}
+return new HashSet<>();
+}
+
+@SneakyThrows(IOException.class)
+public Set getUserNormalExtPermissionsByUserInProject(String 
project, String userName) {
+String projectUuid = 
NProjectManager.getInstance(KylinConfig.getInstanceFromEnv()).getProject(project)
+.getUuid();
+if (Objects.nonNull(userName)) {
 if (userAclService.canAdminUserQuery(userName)) {
 return Collections.singleton(AclConstants.DATA_QUERY);
 }
diff --git 
a/src/query-service/src/main/java/org/apache/kylin/rest/service/QueryService.java
 
b/src/query-service/src/main/java/org/apache/kylin/rest/service/QueryService.java
index 60837454a0..7b10e1eb67 100644
--- 
a/src/query-service/src/main/java/org/apache/kylin/rest/service/QueryService.java
+++ 
b/src/query-service/src/main/java/org/apache/kylin/rest/service/QueryService.java
@@ -81,6 +81,7 @@ import org.apache.kylin.common.util.AddressUtil;
 import org.apache.kylin.common.util.JsonUtil;
 import org.apache.kylin.common.util.Pair;
 import org.apache.kylin.common.util.SetThreadName;
+import org.apache.kylin.constants.AclConstants;
 import org.apache.kylin.engine.spark.filter.BloomFilterSkipCollector;
 import org.apache.kylin.engine.spark.filter.ParquetPageFilterCollector;
 import org.apache.kylin.guava30.shaded.common.annotations.VisibleForTesting;
@@ -567,6 +568,18 @@ public class QueryService extends BasicService implements 
CacheSignatureQuerySup
 if (!grantedProjects.contains(sqlRequest.getProject())) {
 throw new KylinException(ACCESS_DENIED, "Access is denied.");
 }
+
+val isDataPermissionDefaultEnabled = 
KylinConfig.getInstanceFromEnv().isDataPermissionDefaultEnabled();
+if (isDataPermissionDefaultEnabled) {
+try {
+Set extPermissions = 
accessService.getUserNormalExtPermissionsByUserInProject(sqlRequest.getProject(),
 executeUser);
+if (!extPermissions.contains(AclConstants.DATA_QUERY)) {
+throw new KylinException(ACCESS_DENIED, "Access is 
denied.");
+}
+} catch (Exception e) {
+throw new KylinException(ACCESS_DENIED, e);
+}
+}
 }
 
 private void checkSqlRequest(SQLRequest sqlRequest) {
diff --git 
a/src/query-service/src/test/java/org/apache/kylin/rest/service/QueryServiceTest.java
 
b/src/query-service/src/test/java/org/apache/kylin/rest/service/QueryServiceTest.java
index 200fbb960f..89fead0d99 100644
--- 
a/src/query-service/src/test/java/org/apache/kylin/rest/service/QueryServiceTest.java
+++ 
b/src/query-service/src/test/java/org/apache/kylin/rest/service/QueryServiceTest.java
@@ -230,6 +230,8 @@ public class QueryServiceTest extends 
NLocalFileMetadataTestCase {
 ReflectionTestUtils.setField(queryService, "aclTCRService", 
aclTCRService);
 ReflectionTestUtils.setField(accessService, "userService", 
userService);
 ReflectionTestUtils.setField(accessService, "aclService", aclService);
+ReflectionTestUtils.setField(accessService, "userAclService", 
userAclService);
+

(kylin) 01/35: KYLIN-5792 Support ldap memberid mode

2024-04-12 Thread liyang
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 d6285db6ab757a13ce83d119001a8ef37944522e
Author: Mingming Ge <7mmi...@gmail.com>
AuthorDate: Tue Aug 22 17:05:27 2023 +0800

KYLIN-5792 Support ldap memberid mode
---
 .../java/org/apache/kylin/tool/util/LdapUtils.java | 12 -
 .../org/apache/kylin/tool/util/LdapUtilsTest.java  | 57 ++
 2 files changed, 68 insertions(+), 1 deletion(-)

diff --git a/src/tool/src/main/java/org/apache/kylin/tool/util/LdapUtils.java 
b/src/tool/src/main/java/org/apache/kylin/tool/util/LdapUtils.java
index 79b621291a..ed7d3ecbca 100644
--- a/src/tool/src/main/java/org/apache/kylin/tool/util/LdapUtils.java
+++ b/src/tool/src/main/java/org/apache/kylin/tool/util/LdapUtils.java
@@ -112,8 +112,18 @@ public class LdapUtils {
 left += maxValRange;
 }
 }
-
+ldapUserDNs = rewriteUserDnIfNeeded(ldapUserDNs);
 return ldapUserDNs;
 }
 
+public static Set rewriteUserDnIfNeeded(Set ldapUserDNs) {
+String ldapUserSearchBase = 
KylinConfig.getInstanceFromEnv().getLDAPUserSearchBase();
+return ldapUserDNs.stream().map(dn -> {
+String dnName = dn;
+if (!dn.contains(ldapUserSearchBase)) {
+dnName = "uid=" + dn + "," + ldapUserSearchBase;
+}
+return dnName;
+}).collect(Collectors.toSet());
+}
 }
diff --git 
a/src/tool/src/test/java/org/apache/kylin/tool/util/LdapUtilsTest.java 
b/src/tool/src/test/java/org/apache/kylin/tool/util/LdapUtilsTest.java
new file mode 100644
index 00..216d535a78
--- /dev/null
+++ b/src/tool/src/test/java/org/apache/kylin/tool/util/LdapUtilsTest.java
@@ -0,0 +1,57 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.kylin.tool.util;
+
+import java.util.HashSet;
+import java.util.Set;
+
+import org.apache.kylin.common.util.NLocalFileMetadataTestCase;
+import org.junit.After;
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.Test;
+
+public class LdapUtilsTest extends NLocalFileMetadataTestCase {
+
+@Before
+public void setup() throws Exception {
+createTestMetadata();
+}
+
+@After
+public void teardown() {
+cleanupTestMetadata();
+}
+
+@Test
+public void testRewriteUserDn() {
+getTestConfig().setProperty("kylin.security.ldap.user-search-base", 
"cn=Users,dc=example,dc=com");
+String ldapUserSearchBase = getTestConfig().getLDAPUserSearchBase();
+Set ldapUserDNs = new HashSet<>();
+ldapUserDNs.add("a");
+ldapUserDNs.add("b");
+ldapUserDNs = LdapUtils.rewriteUserDnIfNeeded(ldapUserDNs);
+Assert.assertTrue(ldapUserDNs.stream().allMatch(x -> 
x.contains(ldapUserSearchBase)));
+
+Set ldapUserDNs2 = new HashSet<>();
+ldapUserDNs2.add("uid=a,cn=Users,dc=example,dc=com");
+ldapUserDNs2.add("uid=b,cn=Users,dc=example,dc=com");
+ldapUserDNs2 = LdapUtils.rewriteUserDnIfNeeded(ldapUserDNs2);
+Assert.assertTrue(ldapUserDNs2.stream().allMatch(x -> 
x.contains(ldapUserSearchBase)));
+}
+}



(kylin) 28/35: KYLIN-5837 Support only reusing user defined computedColumns

2024-04-12 Thread liyang
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 148d8f61aaafbca0c207d76f0747a85ed0b11fbb
Author: Pengfei Zhan 
AuthorDate: Mon Sep 11 14:43:04 2023 +0800

KYLIN-5837 Support only reusing user defined computedColumns
---
 .../java/org/apache/kylin/common/KapConfig.java| 27 +++---
 .../org/apache/kylin/common/KylinConfigBase.java   | 25 ++---
 .../org/apache/kylin/common/KapConfigTest.java | 15 ++
 .../apache/kylin/common/KylinConfigBaseTest.java   |  8 +++
 .../kylin/query/util/ComputedColumnRewriter.java   | 17 +++---
 .../kylin/query/util/ConvertToComputedColumn.java  | 60 --
 .../query/util/RestoreFromComputedColumn.java  | 19 +++
 7 files changed, 79 insertions(+), 92 deletions(-)

diff --git 
a/src/core-common/src/main/java/org/apache/kylin/common/KapConfig.java 
b/src/core-common/src/main/java/org/apache/kylin/common/KapConfig.java
index c7c10c500d..c79a588c95 100644
--- a/src/core-common/src/main/java/org/apache/kylin/common/KapConfig.java
+++ b/src/core-common/src/main/java/org/apache/kylin/common/KapConfig.java
@@ -22,13 +22,14 @@ import java.io.File;
 import java.io.IOException;
 import java.util.Map;
 
-import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.hadoop.fs.Path;
 import org.apache.kylin.common.annotation.Clarification;
 import org.apache.kylin.common.util.EncryptUtil;
 import org.apache.kylin.common.util.FileUtils;
 
+import lombok.extern.slf4j.Slf4j;
+
 @Slf4j
 @Clarification(priority = Clarification.Priority.MAJOR, msg = "Enterprise")
 public class KapConfig {
@@ -233,21 +234,6 @@ public class KapConfig {
 return config.getOptional("kylin.smart.conf." + conf, null);
 }
 
-/**
- * Query
- */
-public boolean isImplicitComputedColumnConvertEnabled() {
-return 
Boolean.parseBoolean(config.getOptional("kylin.query.implicit-computed-column-convert",
 "true"));
-}
-
-public boolean isAggComputedColumnRewriteEnabled() {
-return 
Boolean.parseBoolean(config.getOptional("kylin.query.agg-computed-column-rewrite",
 "true"));
-}
-
-public int getComputedColumnMaxRecursionTimes() {
-return 
Integer.parseInt(config.getOptional("kylin.query.computed-column-max-recursion-times",
 "10"));
-}
-
 public boolean isJdbcEscapeEnabled() {
 return 
Boolean.parseBoolean(config.getOptional("kylin.query.jdbc-escape-enabled", 
"true"));
 }
@@ -266,7 +252,8 @@ public class KapConfig {
 }
 
 public Boolean isConstraintPropagationEnabled() {
-return 
Boolean.parseBoolean(config.getOptional("kylin.query.engine.spark-constraint-propagation-enabled",
 FALSE));
+return Boolean
+
.parseBoolean(config.getOptional("kylin.query.engine.spark-constraint-propagation-enabled",
 FALSE));
 }
 
 /**
@@ -716,11 +703,13 @@ public class KapConfig {
 }
 
 public boolean isApplyLimitInfoToSourceScanRowsEnabled() {
-return 
Boolean.parseBoolean(config.getOptional("kylin.query.apply-limit-info-to-source-scan-rows-enabled",
 FALSE));
+return Boolean
+
.parseBoolean(config.getOptional("kylin.query.apply-limit-info-to-source-scan-rows-enabled",
 FALSE));
 }
 
 public boolean isAutoAdjustBigQueryRowsThresholdEnabled() {
-return 
Boolean.parseBoolean(config.getOptional("kylin.query.auto-adjust-big-query-rows-threshold-enabled",
 FALSE));
+return Boolean
+
.parseBoolean(config.getOptional("kylin.query.auto-adjust-big-query-rows-threshold-enabled",
 FALSE));
 }
 
 public long getBigQuerySecond() {
diff --git 
a/src/core-common/src/main/java/org/apache/kylin/common/KylinConfigBase.java 
b/src/core-common/src/main/java/org/apache/kylin/common/KylinConfigBase.java
index a2518358a9..3042b23c58 100644
--- a/src/core-common/src/main/java/org/apache/kylin/common/KylinConfigBase.java
+++ b/src/core-common/src/main/java/org/apache/kylin/common/KylinConfigBase.java
@@ -793,6 +793,18 @@ public abstract class KylinConfigBase implements 
Serializable {
 return 
Boolean.parseBoolean(getOptional("kylin.metadata.only-reuse-user-defined-computed-column",
 FALSE));
 }
 
+public boolean isConvertExpressionToCcEnabled() {
+return 
Boolean.parseBoolean(getOptional("kylin.query.implicit-computed-column-convert",
 TRUE));
+}
+
+public boolean isAggComputedColumnRewriteEnabled() {
+return 
Boolean.parseBoolean(getOptional("kylin.query.agg-computed-column-rewrite", 
TRUE));
+}
+
+public int getConvertCcMaxIterations() {
+return 
Integer.parseInt(getOptional("kylin.quer

(kylin) 26/35: KYLIN-5833 Use TableIndex answer select * only works for query

2024-04-12 Thread liyang
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 412eff5c73908508e3967412a2dbffd76d171b30
Author: Pengfei Zhan 
AuthorDate: Tue Aug 29 16:24:25 2023 +0800

KYLIN-5833 Use TableIndex answer select * only works for query
---
 .../src/main/java/org/apache/kylin/common/QueryContext.java   | 4 
 .../main/java/org/apache/kylin/query/routing/RealizationChooser.java  | 4 +++-
 2 files changed, 7 insertions(+), 1 deletion(-)

diff --git 
a/src/core-common/src/main/java/org/apache/kylin/common/QueryContext.java 
b/src/core-common/src/main/java/org/apache/kylin/common/QueryContext.java
index b112591e27..b6ef63867e 100644
--- a/src/core-common/src/main/java/org/apache/kylin/common/QueryContext.java
+++ b/src/core-common/src/main/java/org/apache/kylin/common/QueryContext.java
@@ -107,6 +107,10 @@ public class QueryContext implements Closeable {
 @Setter
 private boolean partialMatchIndex = false;
 
+@Getter
+@Setter
+private boolean isForModeling;
+
 @Getter
 @Setter
 private ForceToTieredStorage forcedToTieredStorage;
diff --git 
a/src/query-common/src/main/java/org/apache/kylin/query/routing/RealizationChooser.java
 
b/src/query-common/src/main/java/org/apache/kylin/query/routing/RealizationChooser.java
index 768edd91ff..56bee577c9 100644
--- 
a/src/query-common/src/main/java/org/apache/kylin/query/routing/RealizationChooser.java
+++ 
b/src/query-common/src/main/java/org/apache/kylin/query/routing/RealizationChooser.java
@@ -255,7 +255,9 @@ public class RealizationChooser {
 buildDimensionsAndMetrics(context, dimensions, metrics);
 buildStorageContext(context, dimensions, metrics, candidate);
 buildSecondStorageEnabled(context.getSQLDigest());
-fixContextForTableIndexAnswerNonRawQuery(context);
+if (!QueryContext.current().isForModeling()) {
+fixContextForTableIndexAnswerNonRawQuery(context);
+}
 }
 }
 



(kylin) 09/35: KYLIN-5791 & KYLIN-5801 Fix computation of timestampdff & add_month

2024-04-12 Thread liyang
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 e33ef57cce3f3865ca9b4a6f132a170257d46be2
Author: liang.huang <83992752+lhuang09287...@users.noreply.github.com>
AuthorDate: Thu Aug 31 10:46:48 2023 +0800

KYLIN-5791 & KYLIN-5801 Fix computation of timestampdff & add_month

1. Add datetype for add_month function as required
2. Support string args for Timestampdiff constant computation
---
 pom.xml| 2 +-
 .../scala/org/apache/kylin/query/runtime/SparderRexVisitor.scala   | 7 ++-
 2 files changed, 7 insertions(+), 2 deletions(-)

diff --git a/pom.xml b/pom.xml
index ccbdfbae22..940eb93ff0 100644
--- a/pom.xml
+++ b/pom.xml
@@ -135,7 +135,7 @@
 0.3.0
 
 
-1.116.0-kylin-4.x-r035
+1.116.0-kylin-4.x-r036
 4.x_1.10-r01
 
 
diff --git 
a/src/spark-project/sparder/src/main/scala/org/apache/kylin/query/runtime/SparderRexVisitor.scala
 
b/src/spark-project/sparder/src/main/scala/org/apache/kylin/query/runtime/SparderRexVisitor.scala
index 0b7116a673..b8e34366b8 100644
--- 
a/src/spark-project/sparder/src/main/scala/org/apache/kylin/query/runtime/SparderRexVisitor.scala
+++ 
b/src/spark-project/sparder/src/main/scala/org/apache/kylin/query/runtime/SparderRexVisitor.scala
@@ -171,7 +171,12 @@ class SparderRexVisitor(val inputFieldNames: Seq[String],
 case num: MonthNum => {
   // both add_month and add_year case
   val ts = k_lit(children.head).cast(TimestampType)
-  return k_lit(k_add_months(k_lit(ts), num.num))
+  call.getType.getSqlTypeName match {
+case SqlTypeName.DATE =>
+  return k_lit(k_add_months(k_lit(ts), num.num)).cast(DateType)
+case _ =>
+  return k_lit(k_add_months(k_lit(ts), num.num))
+  }
 }
 case _ =>
   }



(kylin) 05/35: KYLIN-5797 Remove nacos jar

2024-04-12 Thread liyang
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 82ee25fdf1a66601a3cebcab4ca86c1664da57c4
Author: Zhimin Wu <596361...@qq.com>
AuthorDate: Wed Aug 30 14:00:26 2023 +0800

KYLIN-5797 Remove nacos jar
---
 src/server/pom.xml | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/src/server/pom.xml b/src/server/pom.xml
index deb02b3ade..5f96ac4bc7 100644
--- a/src/server/pom.xml
+++ b/src/server/pom.xml
@@ -420,6 +420,8 @@
 org.json4s,
 org.mortbay.jetty,
 org.scala-lang,
+com.alibaba.nacos,
+com.alibaba.cloud,
 com.google.flatbuffers,
 com.google.inject
 com.sun.jersey,



(kylin) 18/35: KYLIN-5814 Support lettuce sentinel mode

2024-04-12 Thread liyang
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 ebd2f3d6704a566896b60f7a3c67bf7226c67348
Author: haocheni 
AuthorDate: Thu Sep 14 10:00:44 2023 +0800

KYLIN-5814 Support lettuce sentinel mode
---
 pom.xml|   7 +
 src/common-service/pom.xml |   4 +
 .../kylin/rest/cache/AbstractKylinCache.java   |  78 +++
 .../org/apache/kylin/rest/cache/CacheConstant.java |  29 +++
 .../org/apache/kylin/rest/cache/RedisCache.java|  91 ++---
 .../org/apache/kylin/rest/cache/RedisCacheV2.java  | 224 +
 .../apache/kylin/rest/cache/CacheConstantTest.java |  30 +++
 .../apache/kylin/rest/cache/RedisCacheTest.java|  36 
 .../apache/kylin/rest/cache/RedisCacheV2Test.java  | 195 ++
 .../org/apache/kylin/common/KylinConfigBase.java   |   8 +
 .../kylin/common/exception/ServerErrorCode.java|   1 +
 .../resources/kylin_errorcode_conf_en.properties   |   1 +
 .../resources/kylin_errorcode_conf_zh.properties   |   1 +
 .../kylin/metadata/query/QueryMetricsContext.java  |   3 +-
 src/query-service/pom.xml  |   5 +
 .../kylin/rest/service/QueryCacheManager.java  | 113 +--
 .../kylin/rest/service/QueryCacheManagerTest.java  | 191 ++
 17 files changed, 923 insertions(+), 94 deletions(-)

diff --git a/pom.xml b/pom.xml
index 88261b4d28..07224bd0f1 100644
--- a/pom.xml
+++ b/pom.xml
@@ -188,6 +188,7 @@
 2.10.9.2
 2.12.3
 3.8.0
+6.1.8.RELEASE
 4.5.13
 1.9.4
 2.12.2
@@ -797,6 +798,12 @@
 ${redis.version}
 
 
+
+io.lettuce
+lettuce-core
+${lettuce.version}
+
+
 
 
 org.apache.kylin
diff --git a/src/common-service/pom.xml b/src/common-service/pom.xml
index 747735c9ea..7a0d6d3403 100644
--- a/src/common-service/pom.xml
+++ b/src/common-service/pom.xml
@@ -75,6 +75,10 @@
 redis.clients
 jedis
 
+
+io.lettuce
+lettuce-core
+
 
 net.sf.ehcache
 ehcache
diff --git 
a/src/common-service/src/main/java/org/apache/kylin/rest/cache/AbstractKylinCache.java
 
b/src/common-service/src/main/java/org/apache/kylin/rest/cache/AbstractKylinCache.java
new file mode 100644
index 00..9461a29f09
--- /dev/null
+++ 
b/src/common-service/src/main/java/org/apache/kylin/rest/cache/AbstractKylinCache.java
@@ -0,0 +1,78 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.kylin.rest.cache;
+
+import static org.apache.kylin.rest.cache.CacheConstant.PREFIX;
+
+import java.nio.charset.StandardCharsets;
+import java.util.Locale;
+
+import org.apache.kylin.common.util.CompressionUtils;
+import org.apache.kylin.rest.service.CommonQueryCacheSupporter;
+import org.apache.kylin.rest.util.SerializeUtil;
+
+import lombok.extern.slf4j.Slf4j;
+
+@Slf4j
+public abstract class AbstractKylinCache implements KylinCache {
+protected boolean isExceptionQuery(String type) {
+return 
type.equals(CommonQueryCacheSupporter.Type.EXCEPTION_QUERY_CACHE.rootCacheName);
+}
+
+protected String getTypeProjectPrefix(String type, String project) {
+return String.format(Locale.ROOT, "%s-%s", type, project);
+}
+
+protected byte[] convertKeyToByte(String type, Object key) {
+try {
+String prefixAndType = PREFIX + type;
+byte[] typeBytes = getBytesFromString(prefixAndType);
+byte[] keyBytes = SerializeUtil.serialize(key);
+byte[] trueKeyBytes = new byte[keyBytes.length + typeBytes.length];
+System.arraycopy(typeBytes, 0, trueKeyBytes, 0, typeBytes.length);
+System.arraycopy(keyBytes, 0, trueKeyBytes, typeBytes.length, 
keyBytes.length);
+return trueKeyBytes;
+} catch (Exception e) {
+log.error("serialize fail!&q

(kylin) 27/35: KYLIN-5836 Fix mapr env building error

2024-04-12 Thread liyang
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 e49c2f15a645cb33a0f04a0b894af8be24613bf5
Author: Yinghao Lin 
AuthorDate: Mon Sep 11 11:52:48 2023 +0800

KYLIN-5836 Fix mapr env building error
---
 .../org/apache/kylin/engine/spark/application/SparkApplication.java | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git 
a/src/spark-project/engine-spark/src/main/java/org/apache/kylin/engine/spark/application/SparkApplication.java
 
b/src/spark-project/engine-spark/src/main/java/org/apache/kylin/engine/spark/application/SparkApplication.java
index 1f1d359eb6..2c2dc08bed 100644
--- 
a/src/spark-project/engine-spark/src/main/java/org/apache/kylin/engine/spark/application/SparkApplication.java
+++ 
b/src/spark-project/engine-spark/src/main/java/org/apache/kylin/engine/spark/application/SparkApplication.java
@@ -294,7 +294,7 @@ public abstract class SparkApplication implements 
Application {
 
 monitorSparkMaster();
 
-
HadoopUtil.setCurrentConfiguration(HadoopUtil.getHadoopConfFromSparkEngine());
+
HadoopUtil.setCurrentConfiguration(HadoopUtil.getCurrentConfiguration());
 
 exchangeSparkConf(buildEnv.sparkConf());
 



(kylin) 25/35: KYLIN-5832 Support queryDetect api

2024-04-12 Thread liyang
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 d7f37675e2de44478da78d5ae7b4b70fd043b13f
Author: haocheni 
AuthorDate: Fri Sep 22 19:21:38 2023 +0800

KYLIN-5832 Support queryDetect api
---
 .../java/org/apache/kylin/common/QueryContext.java |   1 +
 .../kylin/rest/controller/NQueryController.java|   9 +
 .../kylin/rest/request/QueryDetectRequest.java |  33 +++
 .../kylin/rest/response/QueryDetectResponse.java   | 156 
 .../apache/kylin/rest/service/QueryService.java|  37 ++-
 .../kylin/rest/service/QueryServiceTest.java   | 278 -
 .../kylin/query/engine/QueryRoutingEngine.java |   7 +
 .../engine/exec/sparder/SparderQueryPlanExec.java  |   6 +
 .../kylin/query/engine/QueryRoutingEngineTest.java |  34 +++
 9 files changed, 557 insertions(+), 4 deletions(-)

diff --git 
a/src/core-common/src/main/java/org/apache/kylin/common/QueryContext.java 
b/src/core-common/src/main/java/org/apache/kylin/common/QueryContext.java
index 592df87f68..b112591e27 100644
--- a/src/core-common/src/main/java/org/apache/kylin/common/QueryContext.java
+++ b/src/core-common/src/main/java/org/apache/kylin/common/QueryContext.java
@@ -389,6 +389,7 @@ public class QueryContext implements Closeable {
 private boolean isRefused;
 private boolean includeHeader;
 private boolean isVacant;
+private boolean isQueryDetect;
 }
 
 @Getter
diff --git 
a/src/query-server/src/main/java/org/apache/kylin/rest/controller/NQueryController.java
 
b/src/query-server/src/main/java/org/apache/kylin/rest/controller/NQueryController.java
index 6d69ea475f..1f56073647 100644
--- 
a/src/query-server/src/main/java/org/apache/kylin/rest/controller/NQueryController.java
+++ 
b/src/query-server/src/main/java/org/apache/kylin/rest/controller/NQueryController.java
@@ -73,12 +73,14 @@ import org.apache.kylin.rest.exception.ForbiddenException;
 import org.apache.kylin.rest.exception.InternalErrorException;
 import org.apache.kylin.rest.model.Query;
 import org.apache.kylin.rest.request.PrepareSqlRequest;
+import org.apache.kylin.rest.request.QueryDetectRequest;
 import org.apache.kylin.rest.request.SQLFormatRequest;
 import org.apache.kylin.rest.request.SQLRequest;
 import org.apache.kylin.rest.request.SaveSqlRequest;
 import org.apache.kylin.rest.request.SyncFileSegmentsRequest;
 import org.apache.kylin.rest.response.DataResult;
 import org.apache.kylin.rest.response.EnvelopeResponse;
+import org.apache.kylin.rest.response.QueryDetectResponse;
 import org.apache.kylin.rest.response.QueryHistoryFiltersResponse;
 import org.apache.kylin.rest.response.QueryStatisticsResponse;
 import org.apache.kylin.rest.response.SQLResponse;
@@ -662,6 +664,13 @@ public class NQueryController extends NBasicController {
 return new EnvelopeResponse<>(KylinException.CODE_SUCCESS, 
queryService.format(request.getSqls()), "");
 }
 
+@ApiOperation(value = "queryDetect", tags = { "QE" })
+@PostMapping("/detection")
+public EnvelopeResponse queryDetect(@RequestBody 
QueryDetectRequest request) {
+checkProjectName(request.getProject());
+return new EnvelopeResponse<>(KylinException.CODE_SUCCESS, 
queryService.queryDetect(request), "");
+}
+
 private void checkQueryName(String queryName) {
 if (!queryNamePattern.matcher(queryName).matches()) {
 throw new KylinException(INVALID_NAME, 
MsgPicker.getMsg().getInvalidQueryName());
diff --git 
a/src/query-service/src/main/java/org/apache/kylin/rest/request/QueryDetectRequest.java
 
b/src/query-service/src/main/java/org/apache/kylin/rest/request/QueryDetectRequest.java
new file mode 100644
index 00..9ee03f4b3f
--- /dev/null
+++ 
b/src/query-service/src/main/java/org/apache/kylin/rest/request/QueryDetectRequest.java
@@ -0,0 +1,33 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.kylin.rest.request;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;

(kylin) 33/35: KYLIN-5844 & KYLIN-5843 Column ACL works for PushDown

2024-04-12 Thread liyang
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 e804eee81eff19424ea61c6899c226ba3d5fcf59
Author: Pengfei Zhan 
AuthorDate: Sun Oct 1 17:19:17 2023 +0800

KYLIN-5844 & KYLIN-5843 Column ACL works for PushDown

1. Column ACL works for PushDown
2. Flat-table sql should consider acl
---
 .../apache/kylin/metadata/model/ColumnDesc.java|   5 +-
 .../apache/kylin/rest/util/AclPermissionUtil.java  |   2 +-
 .../kylin/rest/response/ExecutableResponse.java|   4 +-
 .../routing/DataflowCapabilityCheckerTest.java |   3 +-
 .../kylin/query/rules/AggPushdownRuleTest.java |   4 +-
 .../kylin/query/rules/CalciteRuleTestBase.java |  12 +-
 .../rest/response/LayoutRecDetailResponse.java |   2 +-
 .../apache/kylin/rest/service/ModelService.java|  10 +-
 .../rest/service/params/BasicSegmentParams.java|   3 +-
 .../security/HackSelectStarWithColumnACL.java  | 259 +++--
 .../org/apache/kylin/query/util/PushDownUtil.java  |  32 +-
 .../security/HackSelectStarWithColumnACLTest.java  | 405 ++---
 .../apache/kylin/query/util/PushDownUtilTest.java  | 359 ++
 .../merger/AfterMergeOrRefreshResourceMerger.java  |   3 +-
 .../spark/source/NSparkMetadataExplorer.java   |   3 +-
 .../engine/spark/job/NSparkMergingJobTest.java |  10 +-
 16 files changed, 705 insertions(+), 411 deletions(-)

diff --git 
a/src/core-metadata/src/main/java/org/apache/kylin/metadata/model/ColumnDesc.java
 
b/src/core-metadata/src/main/java/org/apache/kylin/metadata/model/ColumnDesc.java
index c2efaccd4e..1754104ae4 100644
--- 
a/src/core-metadata/src/main/java/org/apache/kylin/metadata/model/ColumnDesc.java
+++ 
b/src/core-metadata/src/main/java/org/apache/kylin/metadata/model/ColumnDesc.java
@@ -23,6 +23,7 @@ import java.io.Serializable;
 import org.apache.calcite.avatica.util.Quoting;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.kylin.common.util.StringHelper;
+import org.apache.kylin.guava30.shaded.common.base.Preconditions;
 import org.apache.kylin.metadata.datatype.DataType;
 
 import com.fasterxml.jackson.annotation.JsonAutoDetect;
@@ -30,7 +31,6 @@ import 
com.fasterxml.jackson.annotation.JsonAutoDetect.Visibility;
 import com.fasterxml.jackson.annotation.JsonInclude;
 import com.fasterxml.jackson.annotation.JsonProperty;
 import com.fasterxml.jackson.annotation.JsonSetter;
-import org.apache.kylin.guava30.shaded.common.base.Preconditions;
 
 import lombok.Getter;
 import lombok.Setter;
@@ -231,8 +231,7 @@ public class ColumnDesc implements Serializable {
 // for test mainly
 public static ColumnDesc mockup(TableDesc table, int oneBasedColumnIndex, 
String name, String datatype) {
 ColumnDesc desc = new ColumnDesc();
-String id = "" + oneBasedColumnIndex;
-desc.setId(id);
+desc.setId(String.valueOf(oneBasedColumnIndex));
 desc.setName(name);
 desc.setDatatype(datatype);
 desc.init(table);
diff --git 
a/src/core-metadata/src/main/java/org/apache/kylin/rest/util/AclPermissionUtil.java
 
b/src/core-metadata/src/main/java/org/apache/kylin/rest/util/AclPermissionUtil.java
index 36360a0f12..82aaca58dc 100644
--- 
a/src/core-metadata/src/main/java/org/apache/kylin/rest/util/AclPermissionUtil.java
+++ 
b/src/core-metadata/src/main/java/org/apache/kylin/rest/util/AclPermissionUtil.java
@@ -235,7 +235,7 @@ public class AclPermissionUtil {
 }
 
 public static QueryContext.AclInfo createAclInfo(String project, 
Set groups) {
-return new QueryContext.AclInfo(getCurrentUsername(), groups, 
isAdminInProject(project, groups));
+return new QueryContext.AclInfo(getCurrentUsername(), groups, 
hasProjectAdminPermission(project, groups));
 }
 
 public static boolean hasExtPermission(Permission permission) {
diff --git 
a/src/data-loading-service/src/main/java/org/apache/kylin/rest/response/ExecutableResponse.java
 
b/src/data-loading-service/src/main/java/org/apache/kylin/rest/response/ExecutableResponse.java
index 70144b83a2..6736c2bb74 100644
--- 
a/src/data-loading-service/src/main/java/org/apache/kylin/rest/response/ExecutableResponse.java
+++ 
b/src/data-loading-service/src/main/java/org/apache/kylin/rest/response/ExecutableResponse.java
@@ -27,6 +27,8 @@ import org.apache.commons.collections.CollectionUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.kylin.common.KylinConfig;
 import org.apache.kylin.common.util.JsonUtil;
+import org.apache.kylin.guava30.shaded.common.collect.Lists;
+import org.apache.kylin.guava30.shaded.common.collect.Maps;
 import org.apache.kylin.engine.spark.job.NSparkSnapshotJob;
 import org.apache.kylin.engine.spark.job.NTableSamplingJob;
 import org.apache.kylin.job.SecondStorageCleanJobUtil;
@@ -43,11 +45,9 @@ import org.apache.kylin.metadata.model.NTableMetadataMa

(kylin) 19/35: KYLIN-5815 Failed to add primaryKey of table when upgrading concurrently

2024-04-12 Thread liyang
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 768a5ececcd855b0f796881d42b36b17088c61d5
Author: Jiawei Li <1019037...@qq.com>
AuthorDate: Thu Sep 21 14:20:24 2023 +0800

KYLIN-5815 Failed to add primaryKey of table when upgrading concurrently
---
 .../common/persistence/metadata/JdbcEpochStore.java  | 20 
 .../common/persistence/metadata/jdbc/JdbcUtil.java   | 10 ++
 .../persistence/metadata/jdbc/JdbcUtilTest.java  | 17 +
 3 files changed, 39 insertions(+), 8 deletions(-)

diff --git 
a/src/core-common/src/main/java/org/apache/kylin/common/persistence/metadata/JdbcEpochStore.java
 
b/src/core-common/src/main/java/org/apache/kylin/common/persistence/metadata/JdbcEpochStore.java
index 97b50d2969..2d510801b6 100644
--- 
a/src/core-common/src/main/java/org/apache/kylin/common/persistence/metadata/JdbcEpochStore.java
+++ 
b/src/core-common/src/main/java/org/apache/kylin/common/persistence/metadata/JdbcEpochStore.java
@@ -41,6 +41,7 @@ import org.apache.commons.dbcp2.BasicDataSource;
 import org.apache.kylin.common.KylinConfig;
 import org.apache.kylin.common.Singletons;
 import org.apache.kylin.common.exception.KylinException;
+import org.apache.kylin.common.persistence.metadata.jdbc.JdbcUtil;
 import org.springframework.jdbc.core.BatchPreparedStatementSetter;
 import org.springframework.jdbc.core.JdbcTemplate;
 import org.springframework.jdbc.datasource.DataSourceTransactionManager;
@@ -122,17 +123,20 @@ public class JdbcEpochStore extends EpochStore {
 }
 return dataSource.getConnection();
 }
-
+
 @Override
 public void createIfNotExist() throws Exception {
 if (isTableExists(getConnection(jdbcTemplate), table)) {
-if (!isPrimaryKeyExists(getConnection(jdbcTemplate), table)) {
-withTransaction(transactionManager, () -> {
-jdbcTemplate.execute(getAddPrimarykeySql(table));
-return 1;
-});
-log.info("Succeed to add table primary key: {}", table);
-}
+JdbcUtil.retry(() -> {
+if (!isPrimaryKeyExists(getConnection(jdbcTemplate), table)) {
+withTransaction(transactionManager, () -> {
+jdbcTemplate.execute(getAddPrimarykeySql(table));
+return 1;
+});
+log.info("Succeed to add table primary key: {}", table);
+}
+return 1;
+});
 return;
 }
 String fileName = "metadata-jdbc-default.properties";
diff --git 
a/src/core-common/src/main/java/org/apache/kylin/common/persistence/metadata/jdbc/JdbcUtil.java
 
b/src/core-common/src/main/java/org/apache/kylin/common/persistence/metadata/jdbc/JdbcUtil.java
index 51b61c348a..265777c1a3 100644
--- 
a/src/core-common/src/main/java/org/apache/kylin/common/persistence/metadata/jdbc/JdbcUtil.java
+++ 
b/src/core-common/src/main/java/org/apache/kylin/common/persistence/metadata/jdbc/JdbcUtil.java
@@ -260,4 +260,14 @@ public class JdbcUtil {
 val dataSource = BasicDataSourceFactory.createDataSource(props);
 return new JdbcTemplate(dataSource);
 }
+
+public static  T retry(Callback func) throws Exception {
+try {
+return func.handle();
+} catch (Exception e) {
+log.error("occur exception, retry", e);
+return func.handle();
+}
+}
+
 }
diff --git 
a/src/core-common/src/test/java/org/apache/kylin/common/persistence/metadata/jdbc/JdbcUtilTest.java
 
b/src/core-common/src/test/java/org/apache/kylin/common/persistence/metadata/jdbc/JdbcUtilTest.java
index ab0f7926c9..a3d05f453d 100644
--- 
a/src/core-common/src/test/java/org/apache/kylin/common/persistence/metadata/jdbc/JdbcUtilTest.java
+++ 
b/src/core-common/src/test/java/org/apache/kylin/common/persistence/metadata/jdbc/JdbcUtilTest.java
@@ -20,6 +20,8 @@ package org.apache.kylin.common.persistence.metadata.jdbc;
 import java.sql.Connection;
 import java.sql.DriverManager;
 import java.sql.SQLException;
+import java.util.HashSet;
+import java.util.Set;
 
 import org.junit.Assert;
 import org.junit.Before;
@@ -51,4 +53,19 @@ public class JdbcUtilTest {
 null);
 Assert.assertFalse(JdbcUtil.isColumnExists(connection, table, 
"not_exists"));
 }
+
+@Test
+public void testRetry() throws Exception {
+Set set = new HashSet();
+int result = JdbcUtil.retry(() -> {
+boolean shouldThrowException = set.isEmpty();
+set.add(true);
+if (shouldThrowException) {
+throw new Exception("test");
+}
+return 1;
+});
+Assert.assertEquals(1, result);
+
+}
 }



(kylin) 07/35: KYLIN-5799 Fix round, bround, lpad, rpad function

2024-04-12 Thread liyang
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 deb209f5319bc6d2dc0fe727d65202e3b834f55c
Author: Zhimin Wu <596361...@qq.com>
AuthorDate: Wed Aug 30 18:36:05 2023 +0800

KYLIN-5799 Fix round, bround, lpad, rpad function
---
 .../org/apache/kylin/query/udf/SparkMathUDF.java   |  7 +-
 .../org/apache/kylin/query/udf/SparkStringUDF.java | 15 +++--
 .../kylin/query/runtime/ExpressionConverter.scala  | 25 --
 .../kylin/query/runtime/SparderRexVisitor.scala|  1 -
 4 files changed, 23 insertions(+), 25 deletions(-)

diff --git 
a/src/query/src/main/java/org/apache/kylin/query/udf/SparkMathUDF.java 
b/src/query/src/main/java/org/apache/kylin/query/udf/SparkMathUDF.java
index ae20f7d1a3..38db80697d 100644
--- a/src/query/src/main/java/org/apache/kylin/query/udf/SparkMathUDF.java
+++ b/src/query/src/main/java/org/apache/kylin/query/udf/SparkMathUDF.java
@@ -24,7 +24,12 @@ import 
org.apache.kylin.common.exception.CalciteNotSupportException;
 
 public class SparkMathUDF implements NotConstant {
 
-public Object BROUND(@Parameter(name = "str1") Double exp1, 
@Parameter(name = "str2") Integer exp2)
+public Object BROUND(@Parameter(name = "str1") Object exp1, 
@Parameter(name = "str2") Object exp2)
+throws CalciteNotSupportException {
+throw new CalciteNotSupportException();
+}
+
+public Object BROUND(@Parameter(name = "str1") Object exp1)
 throws CalciteNotSupportException {
 throw new CalciteNotSupportException();
 }
diff --git 
a/src/query/src/main/java/org/apache/kylin/query/udf/SparkStringUDF.java 
b/src/query/src/main/java/org/apache/kylin/query/udf/SparkStringUDF.java
index 867ffbefe1..93c36e6af3 100644
--- a/src/query/src/main/java/org/apache/kylin/query/udf/SparkStringUDF.java
+++ b/src/query/src/main/java/org/apache/kylin/query/udf/SparkStringUDF.java
@@ -64,21 +64,32 @@ public class SparkStringUDF implements NotConstant {
 throw new CalciteNotSupportException();
 }
 
-public String LPAD(@Parameter(name = "str1") String exp1, @Parameter(name 
= "num2") Integer exp2,
+public String LPAD(@Parameter(name = "str1") String exp1, @Parameter(name 
= "num2") Object exp2,
 @Parameter(name = "str3") String exp3) throws 
CalciteNotSupportException {
 throw new CalciteNotSupportException();
 }
 
+public String LPAD(@Parameter(name = "str1") String exp1, @Parameter(name 
= "num2") Object exp2)
+throws CalciteNotSupportException {
+throw new CalciteNotSupportException();
+}
+
 public String REPLACE(@Parameter(name = "str1") String exp1, 
@Parameter(name = "str2") String exp2,
 @Parameter(name = "str3") String exp3) throws 
CalciteNotSupportException {
 throw new CalciteNotSupportException();
 }
 
-public String RPAD(@Parameter(name = "str1") String exp1, @Parameter(name 
= "num2") Integer exp2,
+public String RPAD(@Parameter(name = "str1") String exp1, @Parameter(name 
= "num2") Object exp2,
 @Parameter(name = "str3") String exp3) throws 
CalciteNotSupportException {
 throw new CalciteNotSupportException();
 }
 
+public String RPAD(@Parameter(name = "str1") String exp1, @Parameter(name 
= "num2") Object exp2)
+throws CalciteNotSupportException {
+throw new CalciteNotSupportException();
+}
+
+
 public String RTRIM(@Parameter(name = "str1") String exp1) throws 
CalciteNotSupportException {
 throw new CalciteNotSupportException();
 }
diff --git 
a/src/spark-project/sparder/src/main/scala/org/apache/kylin/query/runtime/ExpressionConverter.scala
 
b/src/spark-project/sparder/src/main/scala/org/apache/kylin/query/runtime/ExpressionConverter.scala
index 04afba3c94..53dc5b25a5 100644
--- 
a/src/spark-project/sparder/src/main/scala/org/apache/kylin/query/runtime/ExpressionConverter.scala
+++ 
b/src/spark-project/sparder/src/main/scala/org/apache/kylin/query/runtime/ExpressionConverter.scala
@@ -45,19 +45,20 @@ object ExpressionConverter {
 "explode"
   )
 
-  private val ternaryParameterFunc = mutable.HashSet("replace", 
"substring_index", "lpad", "rpad", "conv", "regexp_extract")
+  private val ternaryParameterFunc = mutable.HashSet("replace", 
"substring_index", "conv", "regexp_extract")
   private val binaryParameterFunc =
 mutable.HashSet("decode", "encode", "find_in_set", "levenshtein", "sha2",
   "trunc", "add_

(kylin) 04/35: KYLIN-5796 Support databinder auto grow collections limit

2024-04-12 Thread liyang
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 e824503ecaeca7f657de11bf12113ab5fd1eadb3
Author: haocheni 
AuthorDate: Tue Aug 29 14:59:55 2023 +0800

KYLIN-5796 Support databinder auto grow collections limit
---
 .../kylin/rest/controller/NBasicController.java| 14 
 .../kylin/rest/aspect/InsensitiveNameAspect.java   |  3 ++
 .../org/apache/kylin/common/KylinConfigBase.java   | 15 +
 .../kylin/common/exception/ServerErrorCode.java|  1 +
 .../org/apache/kylin/common/msg/CnMessage.java | 10 ++
 .../java/org/apache/kylin/common/msg/Message.java  |  9 +
 .../resources/kylin_errorcode_conf_en.properties   |  1 +
 .../resources/kylin_errorcode_conf_zh.properties   |  1 +
 src/metadata-server/pom.xml|  5 +++
 .../controller/NProjectControllerKylinTest.java| 17 --
 .../rest/controller/NProjectControllerV2Test.java  | 17 --
 .../rest/controller/NUserGroupControllerTest.java  | 38 ++
 .../controller/NUserGroupControllerV2Test.java | 22 +
 .../rest/controller/OpenAclTCRControllerTest.java  | 15 +++--
 .../controller/open/OpenAclTCRControllerTest.java  |  8 +++--
 .../open/OpenUserGroupControllerTest.java  | 14 
 .../rest/controller/NQueryMetaControllerTest.java  |  2 ++
 .../rest/controller/SparkSourceControllerTest.java | 12 ---
 18 files changed, 127 insertions(+), 77 deletions(-)

diff --git 
a/src/common-server/src/main/java/org/apache/kylin/rest/controller/NBasicController.java
 
b/src/common-server/src/main/java/org/apache/kylin/rest/controller/NBasicController.java
index e88ce19d72..61854b7436 100644
--- 
a/src/common-server/src/main/java/org/apache/kylin/rest/controller/NBasicController.java
+++ 
b/src/common-server/src/main/java/org/apache/kylin/rest/controller/NBasicController.java
@@ -24,6 +24,7 @@ import static 
org.apache.kylin.common.exception.ServerErrorCode.EMPTY_PROJECT_NA
 import static 
org.apache.kylin.common.exception.ServerErrorCode.FAILED_CONNECT_CATALOG;
 import static 
org.apache.kylin.common.exception.ServerErrorCode.FAILED_DOWNLOAD_FILE;
 import static 
org.apache.kylin.common.exception.ServerErrorCode.INCORRECT_PROJECT_MODE;
+import static 
org.apache.kylin.common.exception.ServerErrorCode.INVALID_DATA_BINDER_AUTO_GROW_COLLECTION_LIMIT;
 import static 
org.apache.kylin.common.exception.ServerErrorCode.INVALID_PARAMETER;
 import static 
org.apache.kylin.common.exception.ServerErrorCode.LOW_LEVEL_LICENSE;
 import static 
org.apache.kylin.common.exception.ServerErrorCode.UNSUPPORTED_STREAMING_OPERATION;
@@ -110,6 +111,7 @@ import org.apache.kylin.rest.util.PagingUtil;
 import org.apache.kylin.util.DataRangeUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import org.springframework.beans.InvalidPropertyException;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Qualifier;
 import org.springframework.http.HttpEntity;
@@ -128,7 +130,9 @@ import 
org.springframework.transaction.CannotCreateTransactionException;
 import org.springframework.util.StreamUtils;
 import org.springframework.web.bind.MethodArgumentNotValidException;
 import org.springframework.web.bind.MissingServletRequestParameterException;
+import org.springframework.web.bind.WebDataBinder;
 import org.springframework.web.bind.annotation.ExceptionHandler;
+import org.springframework.web.bind.annotation.InitBinder;
 import org.springframework.web.bind.annotation.ResponseBody;
 import org.springframework.web.bind.annotation.ResponseStatus;
 import org.springframework.web.client.RequestCallback;
@@ -184,6 +188,10 @@ public class NBasicController {
 if (cause instanceof CannotCreateTransactionException) {
 kylinException = new KylinException(FAILED_CONNECT_CATALOG, 
msg.getConnectDatabaseError(), false);
 }
+if (cause instanceof InvalidPropertyException && cause.getCause() 
instanceof IndexOutOfBoundsException) {
+kylinException = new 
KylinException(INVALID_DATA_BINDER_AUTO_GROW_COLLECTION_LIMIT,
+msg.getInvalidDataBinderAutoGrowCollectionLimit(), 
false);
+}
 if (cause instanceof KylinException) {
 kylinException = (KylinException) cause;
 }
@@ -679,4 +687,10 @@ public class NBasicController {
 }
 }
 }
+
+@InitBinder
+private void initBinder(WebDataBinder binder) {
+int autoGrowCollectionLimit = 
KylinConfig.getInstanceFromEnv().getDataBinderAutoGrowCollectionLimit();
+binder.setAutoGrowCollectionLimit(autoGrowCollectionLimit);
+}
 }
diff --git 
a/src/common-service/src/main/java/org/apache/kylin/rest/aspect/InsensitiveNameAspect.java
 
b/src/common-service/src/main/java/org/apac

(kylin) 34/35: KYLIN-5845 Avoid model initialization for multi-thread

2024-04-12 Thread liyang
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 0bbb74ee794beb17a8a501f5df5dfcc421bfd2a1
Author: Pengfei Zhan 
AuthorDate: Tue Oct 31 11:11:03 2023 +0800

KYLIN-5845 Avoid model initialization for multi-thread
---
 .../main/java/org/apache/kylin/common/util/AddressUtil.java |  4 
 .../java/org/apache/kylin/common/util/AddressUtilTest.java  |  1 +
 .../org/apache/kylin/metadata/model/ColExcludedChecker.java | 13 +++--
 .../java/org/apache/kylin/metadata/model/NDataModel.java|  4 
 .../org/apache/kylin/metadata/model/NDataModelManager.java  |  4 
 .../java/org/apache/kylin/tool/MetadataToolTestFixture.java |  2 +-
 6 files changed, 13 insertions(+), 15 deletions(-)

diff --git 
a/src/core-common/src/main/java/org/apache/kylin/common/util/AddressUtil.java 
b/src/core-common/src/main/java/org/apache/kylin/common/util/AddressUtil.java
index 71cd033143..bbb80a332f 100644
--- 
a/src/core-common/src/main/java/org/apache/kylin/common/util/AddressUtil.java
+++ 
b/src/core-common/src/main/java/org/apache/kylin/common/util/AddressUtil.java
@@ -107,4 +107,8 @@ public class AddressUtil {
 public static String concatInstanceName() {
 return AddressUtil.getLocalHostExactAddress() + ":" + 
KylinConfig.getInstanceFromEnv().getServerPort();
 }
+
+public static void clearLocalIpAddressCache() {
+localIpAddressCache = null;
+}
 }
diff --git 
a/src/core-common/src/test/java/org/apache/kylin/common/util/AddressUtilTest.java
 
b/src/core-common/src/test/java/org/apache/kylin/common/util/AddressUtilTest.java
index 5277bec0c6..0112d7b2ba 100644
--- 
a/src/core-common/src/test/java/org/apache/kylin/common/util/AddressUtilTest.java
+++ 
b/src/core-common/src/test/java/org/apache/kylin/common/util/AddressUtilTest.java
@@ -72,6 +72,7 @@ public class AddressUtilTest {
 val old = getTestConfig().getServerIpAddress();
 val mockIp = "192.168.1.101";
 getTestConfig().setProperty("kylin.env.ip-address", mockIp);
+AddressUtil.clearLocalIpAddressCache();
 val servIp = AddressUtil.getLocalHostExactAddress();
 Assert.assertEquals(servIp, mockIp);
 if (!StringUtils.isEmpty(old)) {
diff --git 
a/src/core-metadata/src/main/java/org/apache/kylin/metadata/model/ColExcludedChecker.java
 
b/src/core-metadata/src/main/java/org/apache/kylin/metadata/model/ColExcludedChecker.java
index 3f63975bc4..ab2ae1e877 100644
--- 
a/src/core-metadata/src/main/java/org/apache/kylin/metadata/model/ColExcludedChecker.java
+++ 
b/src/core-metadata/src/main/java/org/apache/kylin/metadata/model/ColExcludedChecker.java
@@ -29,12 +29,11 @@ import java.util.stream.Collectors;
 import org.apache.commons.collections.CollectionUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.kylin.common.KylinConfig;
-import org.apache.kylin.metadata.project.NProjectManager;
-import org.apache.kylin.metadata.project.ProjectInstance;
-
 import org.apache.kylin.guava30.shaded.common.collect.Lists;
 import org.apache.kylin.guava30.shaded.common.collect.Maps;
 import org.apache.kylin.guava30.shaded.common.collect.Sets;
+import org.apache.kylin.metadata.project.NProjectManager;
+import org.apache.kylin.metadata.project.ProjectInstance;
 
 import lombok.Getter;
 import lombok.NoArgsConstructor;
@@ -84,11 +83,13 @@ public class ColExcludedChecker {
 collectExcludedComputedColumns(config, project, model);
 }
 
-private void collectExcludedComputedColumns(KylinConfig config, String 
project, NDataModel model) {
-if (model == null || model.isBroken()) {
+private void collectExcludedComputedColumns(KylinConfig config, String 
project, NDataModel originModel) {
+if (originModel == null || originModel.isBroken()) {
 return;
 }
-if (!model.isInitAlready()) {
+NDataModel model = originModel;
+if (originModel.getAllTables().isEmpty() || 
originModel.getEffectiveCols() == null) {
+model = NDataModelManager.getInstance(config, 
project).copyForWrite(originModel);
 model.init(config, project, Lists.newArrayList());
 }
 model.getAllTables().stream().filter(Objects::nonNull) //
diff --git 
a/src/core-metadata/src/main/java/org/apache/kylin/metadata/model/NDataModel.java
 
b/src/core-metadata/src/main/java/org/apache/kylin/metadata/model/NDataModel.java
index 183b5ebc59..3e981ade03 100644
--- 
a/src/core-metadata/src/main/java/org/apache/kylin/metadata/model/NDataModel.java
+++ 
b/src/core-metadata/src/main/java/org/apache/kylin/metadata/model/NDataModel.java
@@ -286,9 +286,6 @@ public class NDataModel extends RootPersistentEntity {
 // mark this model as used for model save checking
 private boolean saveCheck = false;
 
-// mark this model has invoked init() function
-private boolean init

(kylin) 31/35: KYLIN-5840 Fix vulnerability, Upgrade org.xerial.snappy:snappy-java to version 1.1.10.4

2024-04-12 Thread liyang
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 1c05436a01d41e490c986ee32c0ca1d07c6e90e0
Author: huangsheng 
AuthorDate: Sat Oct 7 16:46:03 2023 +0800

KYLIN-5840 Fix vulnerability, Upgrade org.xerial.snappy:snappy-java to 
version 1.1.10.4
---
 pom.xml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/pom.xml b/pom.xml
index 07224bd0f1..04a01dc8a8 100644
--- a/pom.xml
+++ b/pom.xml
@@ -400,7 +400,7 @@
 2.13.4.2
 9.23
 1.2.1
-1.1.10.1
+1.1.10.4
 
 
 



(kylin) 16/35: KYLIN-5810 Add the spark.session.isDefined check in queryExec

2024-04-12 Thread liyang
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 dcfa26067ff19352e064801d191f27c98fe1e6d2
Author: Yinghao Lin <39019287+yhca...@users.noreply.github.com>
AuthorDate: Wed Sep 6 14:04:06 2023 +0800

KYLIN-5810 Add the spark.session.isDefined check in queryExec
---
 .../src/main/java/org/apache/kylin/query/engine/QueryExec.java   | 9 ++---
 1 file changed, 6 insertions(+), 3 deletions(-)

diff --git 
a/src/query/src/main/java/org/apache/kylin/query/engine/QueryExec.java 
b/src/query/src/main/java/org/apache/kylin/query/engine/QueryExec.java
index d9015fb340..442eea7faf 100644
--- a/src/query/src/main/java/org/apache/kylin/query/engine/QueryExec.java
+++ b/src/query/src/main/java/org/apache/kylin/query/engine/QueryExec.java
@@ -78,6 +78,7 @@ import org.apache.kylin.query.util.QueryContextCutter;
 import org.apache.kylin.query.util.QueryInterruptChecker;
 import org.apache.kylin.query.util.QueryUtil;
 import org.apache.kylin.query.util.RelAggPushDownUtil;
+import org.apache.spark.sql.SparkSession;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -273,7 +274,7 @@ public class QueryExec {
 postOptRules.addAll(HepUtils.AggPushDownRules);
 }
 
-if(kylinConfig.isScalarSubqueryJoinEnabled()) {
+if (kylinConfig.isScalarSubqueryJoinEnabled()) {
 postOptRules.addAll(HepUtils.ScalarSubqueryJoinRules);
 }
 
@@ -598,14 +599,16 @@ public class QueryExec {
 }
 
 private String processAcceptCacheTimeInSql(String sql) {
-if (kylinConfig.isKylinLocalCacheEnabled() && 
kylinConfig.isKylinFileStatusCacheEnabled()) {
+if (kylinConfig.isKylinLocalCacheEnabled() && 
kylinConfig.isKylinFileStatusCacheEnabled()
+&& SparkSession.getDefaultSession().isDefined()) {
 return KylinCacheFileSystem.processAcceptCacheTimeInSql(sql);
 }
 return sql;
 }
 
 private void clearAcceptCacheTimeLocally() {
-if (kylinConfig.isKylinLocalCacheEnabled() && 
kylinConfig.isKylinFileStatusCacheEnabled()) {
+if (kylinConfig.isKylinLocalCacheEnabled() && 
kylinConfig.isKylinFileStatusCacheEnabled()
+&& SparkSession.getDefaultSession().isDefined()) {
 KylinCacheFileSystem.clearAcceptCacheTimeLocally();
 }
 }



(kylin) 30/35: KYLIN-5839 Block agg-push-down for non-equal-join

2024-04-12 Thread liyang
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 be22ca0de7e512df5dc443b99ed6df63635f9dfe
Author: Pengfei Zhan 
AuthorDate: Mon Oct 2 17:48:57 2023 +0800

KYLIN-5839 Block agg-push-down for non-equal-join

KYLIN-5382 only deals with the equal-join conditions and gives the
corresponding test cases.
KYLIN-5831 fixed the problem where non-equiv-join conditions were
incorrectly converted to equivalent conditions. Due to the lack of test
cases, a regression bug occurs in ContextUtil.isJoinFromSameContext.

The related non-equiv-join sql is as follows.
If you want a corresponding equal-join sql, just remove the condition
content `or (t2.fcol_10 is null and t5.fcol_17 is null)`.

```sql
select t2.fcol_7 fcol_7, count(distinct t2.fcol_6) fcol_6
from (select t1.company_code fcol_6, t1.type_name fcol_7,
  case when t1.created_date = t0.fcol_1 then 'TRUE'
  else 'FALSE' end fcol_10
  from ( select company_code, created_date, type_name
from "DEFAULT"."TEST_AGG_PUSH_DOWN" ) t1
join ( select company_code, max(created_date) fcol_1
   from "DEFAULT"."TEST_AGG_PUSH_DOWN"
   group by company_code
) t0 on t1.company_code = t0.company_code
) t2 join ( select 'TRUE' fcol_17 ) t5
on  t2.fcol_10 = t5.fcol_17 or (t2.fcol_10 is null and t5.fcol_17 is 
null)
group by t2.fcol_7
```
---
 .../apache/kylin/query/relnode/ContextUtil.java| 24 ++
 .../kylin/query/relnode/KapNonEquiJoinRel.java |  3 +++
 2 files changed, 19 insertions(+), 8 deletions(-)

diff --git 
a/src/query-common/src/main/java/org/apache/kylin/query/relnode/ContextUtil.java
 
b/src/query-common/src/main/java/org/apache/kylin/query/relnode/ContextUtil.java
index d08d0d073d..4a063cf82f 100644
--- 
a/src/query-common/src/main/java/org/apache/kylin/query/relnode/ContextUtil.java
+++ 
b/src/query-common/src/main/java/org/apache/kylin/query/relnode/ContextUtil.java
@@ -36,15 +36,14 @@ import org.apache.calcite.rex.RexNode;
 import org.apache.calcite.rex.RexSlot;
 import org.apache.calcite.sql.fun.SqlCountAggFunction;
 import org.apache.commons.collections.CollectionUtils;
+import org.apache.kylin.guava30.shaded.common.collect.Lists;
+import org.apache.kylin.guava30.shaded.common.collect.Sets;
 import org.apache.kylin.common.QueryContext;
 import org.apache.kylin.metadata.model.TblColRef;
 import org.apache.kylin.query.util.RexUtils;
 import org.apache.kylin.util.CalciteSystemProperty;
 import org.slf4j.Logger;
 
-import org.apache.kylin.guava30.shaded.common.collect.Lists;
-import org.apache.kylin.guava30.shaded.common.collect.Sets;
-
 public class ContextUtil {
 private ContextUtil() {
 }
@@ -203,12 +202,21 @@ public class ContextUtil {
 return false;
 }
 if (potentialSubRel instanceof KapProjectRel) {
-((KapJoinRel) joinRel).leftKeys.forEach(leftKey -> {
-RexNode leftCol = ((KapProjectRel) 
potentialSubRel).getProjects().get(leftKey);
-if (leftCol instanceof RexCall) {
-indexOfInputCols.add(leftKey);
+if (joinRel instanceof KapJoinRel) {
+((KapJoinRel) joinRel).leftKeys.forEach(leftKey -> {
+RexNode leftCol = ((KapProjectRel) 
potentialSubRel).getProjects().get(leftKey);
+if (leftCol instanceof RexCall) {
+indexOfInputCols.add(leftKey);
+}
+});
+} else {
+// non-equiv-join rel: treat the left and right subtrees as a 
context,
+// and refuse to push agg down.
+KapNonEquiJoinRel nonEquivJoinRel = (KapNonEquiJoinRel) 
joinRel;
+if (!nonEquivJoinRel.isScd2Rel()) {
+return false;
 }
-});
+}
 }
 return derivedFromSameContext(indexOfInputCols, potentialSubRel, 
subContext, hasCountConstant);
 }
diff --git 
a/src/query-common/src/main/java/org/apache/kylin/query/relnode/KapNonEquiJoinRel.java
 
b/src/query-common/src/main/java/org/apache/kylin/query/relnode/KapNonEquiJoinRel.java
index d3cfda0c2c..0b9840cc1b 100644
--- 
a/src/query-common/src/main/java/org/apache/kylin/query/relnode/KapNonEquiJoinRel.java
+++ 
b/src/query-common/src/main/java/org/apache/kylin/query/relnode/KapNonEquiJoinRel.java
@@ -63,6 +63,8 @@ import org.apache.kylin.query.util.ICutContextStrategy;
 import org.apache.kylin.query.util.RexToTblColRefTranslator;
 import org.apache.kylin.query.util.RexUtils;
 
+import lombok.Getter;
+
 public class KapNonEquiJoinRel extends EnumerableThetaJoin implements KapRel {
 
 private OLAPC

(kylin) 15/35: KYLIN-5809 Add TableIndex suggestion control in open api

2024-04-12 Thread liyang
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 630a3aa7cef2e2c36653d2d92915b01c201d1ae6
Author: lixiang <447399...@qq.com>
AuthorDate: Sat Sep 2 11:24:20 2023 +0800

KYLIN-5809 Add TableIndex suggestion control in open api
---
 .../java/org/apache/kylin/rest/response/LayoutRecDetailResponse.java| 2 ++
 1 file changed, 2 insertions(+)

diff --git 
a/src/modeling-service/src/main/java/org/apache/kylin/rest/response/LayoutRecDetailResponse.java
 
b/src/modeling-service/src/main/java/org/apache/kylin/rest/response/LayoutRecDetailResponse.java
index 8ab786b427..7b8959e374 100644
--- 
a/src/modeling-service/src/main/java/org/apache/kylin/rest/response/LayoutRecDetailResponse.java
+++ 
b/src/modeling-service/src/main/java/org/apache/kylin/rest/response/LayoutRecDetailResponse.java
@@ -43,6 +43,8 @@ public class LayoutRecDetailResponse implements Serializable {
 private List measures = Lists.newArrayList();
 @JsonProperty("computed_columns")
 private List computedColumns = Lists.newArrayList();
+@JsonProperty("discarded")
+private boolean discarded;
 
 @Getter
 @Setter



(kylin) 08/35: KYLIN-5800 & KYLIN-5812 Support scalar subquery join aggregate pushdown

2024-04-12 Thread liyang
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 dc344ce2fff2b2ca1ece1955b98c4e4130fecbd3
Author: Yu Gan 
AuthorDate: Fri Aug 25 16:01:23 2023 +0800

KYLIN-5800 & KYLIN-5812 Support scalar subquery join aggregate pushdown
---
 .../org/apache/kylin/common/KylinConfigBase.java   |   4 +
 .../query/rules/ScalarSubqueryJoinRuleTest.java| 112 +++
 .../query/rules/ScalarSubqueryJoinRuleTest.xml | 778 
 .../query/sql_scalar_subquery/query01.sql  |  26 +
 .../query/sql_scalar_subquery/query02.sql  |  30 +
 .../query/sql_scalar_subquery/query03.sql  |  32 +
 .../query/sql_scalar_subquery/query04.sql  |  28 +
 .../query/sql_scalar_subquery/query05.sql  |  37 +
 .../query/sql_scalar_subquery/query06.sql  |  35 +
 .../query/sql_scalar_subquery/query07.sql  |  33 +
 .../query/sql_scalar_subquery/query08.sql  |  36 +
 .../query/sql_scalar_subquery/query09.sql  |  36 +
 .../query/sql_scalar_subquery/query10.sql  |  33 +
 .../query/sql_scalar_subquery/query11.sql  |  32 +
 .../query/sql_scalar_subquery/query12.sql  |  41 ++
 .../query/sql_scalar_subquery/query13.sql  |  36 +
 .../query/sql_scalar_subquery/query14.sql  |  32 +
 .../query/sql_scalar_subquery/query15.sql  |  27 +
 .../query/sql_scalar_subquery/query16.sql  |  33 +
 .../query/sql_scalar_subquery/query17.sql  |  31 +
 .../query/sql_scalar_subquery/query18.sql  |  65 ++
 .../query/sql_scalar_subquery/query19.sql  |  26 +
 .../apache/kylin/query/relnode/KapValuesRel.java   |  21 +-
 .../apache/kylin/query/relnode/OLAPValuesRel.java  |  13 +-
 .../kyligence/kap/query/optrule/KAPValuesRule.java |  11 +-
 .../kap/query/optrule/ScalarSubqueryJoinRule.java  | 799 +
 .../org/apache/kylin/query/engine/QueryExec.java   |   4 +
 .../java/org/apache/kylin/query/util/HepUtils.java |  20 +-
 28 files changed, 2393 insertions(+), 18 deletions(-)

diff --git 
a/src/core-common/src/main/java/org/apache/kylin/common/KylinConfigBase.java 
b/src/core-common/src/main/java/org/apache/kylin/common/KylinConfigBase.java
index 8b9a0308f7..64b4a775d4 100644
--- a/src/core-common/src/main/java/org/apache/kylin/common/KylinConfigBase.java
+++ b/src/core-common/src/main/java/org/apache/kylin/common/KylinConfigBase.java
@@ -2532,6 +2532,10 @@ public abstract class KylinConfigBase implements 
Serializable {
 return 
Boolean.parseBoolean(getOptional("kylin.query.calcite.aggregate-pushdown-enabled",
 FALSE));
 }
 
+public boolean isScalarSubqueryJoinEnabled() {
+return 
Boolean.parseBoolean(getOptional("kylin.query.scalar-subquery-join-enabled", 
FALSE));
+}
+
 public int getCalciteBindableCacheSize() {
 return 
Integer.parseInt(getOptional("kylin.query.calcite.bindable.cache.maxSize", 
"10"));
 }
diff --git 
a/src/kylin-it/src/test/java/org/apache/kylin/query/rules/ScalarSubqueryJoinRuleTest.java
 
b/src/kylin-it/src/test/java/org/apache/kylin/query/rules/ScalarSubqueryJoinRuleTest.java
new file mode 100644
index 00..0c8c75ac89
--- /dev/null
+++ 
b/src/kylin-it/src/test/java/org/apache/kylin/query/rules/ScalarSubqueryJoinRuleTest.java
@@ -0,0 +1,112 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.kylin.query.rules;
+
+import java.io.IOException;
+import java.util.List;
+
+import org.apache.calcite.plan.RelOptRule;
+import org.apache.calcite.rel.rules.AggregateProjectMergeRule;
+import org.apache.calcite.rel.rules.ProjectMergeRule;
+import org.apache.calcite.test.DiffRepository;
+import org.apache.kylin.common.KylinConfig;
+import org.apache.kylin.common.util.Pair;
+import org.apache.kylin.guava30.shaded.common.collect.ImmutableList;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Ignore;
+import org.junit.Test;
+
+import io.kyligence.kap.query.optrule.AggregateProjectReduceRule;
+import io.kyligence.kap.query.optrule.KapAggregateR

(kylin) 14/35: KYLIN-5808 Optimize performance when saving model/adding CC

2024-04-12 Thread liyang
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 c4aad6e78b24c36cad6ce18a2d00dfd86527be0d
Author: Yaguang Jia 
AuthorDate: Sat Sep 2 09:16:38 2023 +0800

KYLIN-5808 Optimize performance when saving model/adding CC
---
 .../engine/spark/utils/ComputedColumnEvalUtil.java | 20 +++-
 .../job/stage/build/FlatTableAndDictBase.scala | 57 
 .../spark/smarter/IndexDependencyParser.scala  | 60 +++---
 3 files changed, 106 insertions(+), 31 deletions(-)

diff --git 
a/src/spark-project/engine-spark/src/main/java/org/apache/kylin/engine/spark/utils/ComputedColumnEvalUtil.java
 
b/src/spark-project/engine-spark/src/main/java/org/apache/kylin/engine/spark/utils/ComputedColumnEvalUtil.java
index 603dbd7a5a..f7e9b7936e 100644
--- 
a/src/spark-project/engine-spark/src/main/java/org/apache/kylin/engine/spark/utils/ComputedColumnEvalUtil.java
+++ 
b/src/spark-project/engine-spark/src/main/java/org/apache/kylin/engine/spark/utils/ComputedColumnEvalUtil.java
@@ -26,6 +26,7 @@ import org.apache.kylin.common.exception.QueryErrorCode;
 import org.apache.kylin.common.msg.MsgPicker;
 import org.apache.kylin.engine.spark.job.NSparkCubingUtil;
 import org.apache.kylin.engine.spark.smarter.IndexDependencyParser;
+import org.apache.kylin.guava30.shaded.common.base.Preconditions;
 import org.apache.kylin.metadata.model.BadModelException;
 import org.apache.kylin.metadata.model.ComputedColumnDesc;
 import org.apache.kylin.metadata.model.NDataModel;
@@ -33,13 +34,9 @@ import 
org.apache.kylin.metadata.model.exception.IllegalCCExpressionException;
 import org.apache.kylin.metadata.model.util.ComputedColumnUtil;
 import org.apache.spark.sql.Dataset;
 import org.apache.spark.sql.Row;
-import org.apache.spark.sql.SparderEnv;
-import org.apache.spark.sql.SparkSession;
 import org.apache.spark.sql.util.SparderTypeUtil;
 import org.springframework.util.CollectionUtils;
 
-import org.apache.kylin.guava30.shaded.common.base.Preconditions;
-
 import lombok.extern.slf4j.Slf4j;
 
 @Slf4j
@@ -62,7 +59,7 @@ public class ComputedColumnEvalUtil {
 public static void evalDataTypeOfCCInAuto(List 
computedColumns, NDataModel nDataModel,
 int start, int end) {
 try {
-evalDataTypeOfCC(computedColumns, SparderEnv.getSparkSession(), 
nDataModel, start, end);
+evalDataTypeOfCC(computedColumns, nDataModel, start, end);
 } catch (Exception e) {
 if (end - start > 1) { //numbers of CC > 1
 evalDataTypeOfCCInAuto(computedColumns, nDataModel, start, 
start + (end - start) / 2);
@@ -80,7 +77,7 @@ public class ComputedColumnEvalUtil {
 return;
 }
 try {
-evalDataTypeOfCC(computedColumns, SparderEnv.getSparkSession(), 
nDataModel, 0, computedColumns.size());
+evalDataTypeOfCC(computedColumns, nDataModel, 0, 
computedColumns.size());
 } catch (Exception e) {
 evalDataTypeOfCCInManual(computedColumns, nDataModel, 0, 
computedColumns.size());
 }
@@ -90,7 +87,7 @@ public class ComputedColumnEvalUtil {
 int start, int end) {
 for (int i = start; i < end; i++) {
 try {
-evalDataTypeOfCC(computedColumns, 
SparderEnv.getSparkSession(), nDataModel, i, i + 1);
+evalDataTypeOfCC(computedColumns, nDataModel, i, i + 1);
 } catch (Exception e) {
 Preconditions.checkNotNull(computedColumns.get(i));
 throw new 
IllegalCCExpressionException(QueryErrorCode.CC_EXPRESSION_ILLEGAL,
@@ -101,15 +98,14 @@ public class ComputedColumnEvalUtil {
 }
 }
 
-private static void evalDataTypeOfCC(List 
computedColumns, SparkSession ss,
-NDataModel nDataModel, int start, int end) {
+private static void evalDataTypeOfCC(List 
computedColumns, NDataModel nDataModel, int start,
+int end) {
 IndexDependencyParser parser = new IndexDependencyParser(nDataModel);
-Dataset originDf = parser.generateFullFlatTableDF(ss, nDataModel);
-originDf.persist();
+Dataset df = parser.getFullFlatTableDataFrame(nDataModel);
 String[] ccExprArray = computedColumns.subList(start, end).stream() //
 .map(ComputedColumnDesc::getInnerExpression) //
 
.map(NSparkCubingUtil::convertFromDotWithBackTick).toArray(String[]::new);
-Dataset ds = originDf.selectExpr(ccExprArray);
+Dataset ds = df.selectExpr(ccExprArray);
 for (int i = start; i < end; i++) {
 String dataType = 
SparderTypeUtil.convertSparkTypeToSqlType(ds.schema().fields()[i - 
start].dataType());
 computedColumns.get(i).setDatatype(dataType);
diff --git 
a/src/spark-project/engine-spark/src/main/scala/org/apache/kylin/engine/spark/job

(kylin) 10/35: KYLIN-5802 Models with the same name exist when restore metadata

2024-04-12 Thread liyang
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 9b8050e00af23094104bf35439a5fd36470aa23a
Author: Hang Jia <754332...@qq.com>
AuthorDate: Thu Aug 31 11:13:06 2023 +0800

KYLIN-5802 Models with the same name exist when restore metadata
---
 .../kylin/common/exception/code/ErrorCodeTool.java |   3 +-
 .../resources/kylin_error_msg_conf_cn.properties   |   1 +
 .../resources/kylin_error_msg_conf_en.properties   |   1 +
 .../main/resources/kylin_errorcode_conf.properties |   1 +
 .../apache/kylin/helper/MetadataToolHelper.java| 118 +
 .../org/apache/kylin/tool/MetadataToolTest.java|  57 ++
 6 files changed, 180 insertions(+), 1 deletion(-)

diff --git 
a/src/core-common/src/main/java/org/apache/kylin/common/exception/code/ErrorCodeTool.java
 
b/src/core-common/src/main/java/org/apache/kylin/common/exception/code/ErrorCodeTool.java
index 61cf7d13cd..6a7a46bee4 100644
--- 
a/src/core-common/src/main/java/org/apache/kylin/common/exception/code/ErrorCodeTool.java
+++ 
b/src/core-common/src/main/java/org/apache/kylin/common/exception/code/ErrorCodeTool.java
@@ -24,7 +24,8 @@ public enum ErrorCodeTool implements ErrorCodeProducer {
 "KE-050040203"), PARAMETER_TIMESTAMP_COMPARE("KE-050040204"),
 
 // path & file
-PATH_NOT_EXISTS("KE-050041201"), FILE_ALREADY_EXISTS("KE-050041202");
+PATH_NOT_EXISTS("KE-050041201"), FILE_ALREADY_EXISTS("KE-050041202"),
+MODEL_DUPLICATE_UUID_FAILED("KE-050041203");
 
 private final ErrorCode errorCode;
 private final ErrorMsg errorMsg;
diff --git 
a/src/core-common/src/main/resources/kylin_error_msg_conf_cn.properties 
b/src/core-common/src/main/resources/kylin_error_msg_conf_cn.properties
index 010c2b10c3..2e19879659 100644
--- a/src/core-common/src/main/resources/kylin_error_msg_conf_cn.properties
+++ b/src/core-common/src/main/resources/kylin_error_msg_conf_cn.properties
@@ -226,6 +226,7 @@ KE-050040204=参数 “-endTime” <= 参数 “-startTime” 。
 ## 500412XX
 KE-050041201=该路径不存在:%s。
 KE-050041202=该路径已存在:%s。
+KE-050041203=请修改模型名称后再恢复:[project]:models: %s
 
 # Common
 ## KE-060100201
diff --git 
a/src/core-common/src/main/resources/kylin_error_msg_conf_en.properties 
b/src/core-common/src/main/resources/kylin_error_msg_conf_en.properties
index 75f05b384b..f9d66504ca 100644
--- a/src/core-common/src/main/resources/kylin_error_msg_conf_en.properties
+++ b/src/core-common/src/main/resources/kylin_error_msg_conf_en.properties
@@ -226,6 +226,7 @@ KE-050040204=Parameter "-endTime" <= Parameter "-startTime".
 ## 500412XX
 KE-050041201=The path does not exist: %s.
 KE-050041202=The path already exists: %s.
+KE-050041203=Please modify the model name and then restore:[project]:models: %s
 
 # Common
 ## KE-060100201
diff --git a/src/core-common/src/main/resources/kylin_errorcode_conf.properties 
b/src/core-common/src/main/resources/kylin_errorcode_conf.properties
index f8ed420188..f8dd010445 100644
--- a/src/core-common/src/main/resources/kylin_errorcode_conf.properties
+++ b/src/core-common/src/main/resources/kylin_errorcode_conf.properties
@@ -237,6 +237,7 @@ KE-050040204
 ## 500412XX
 KE-050041201
 KE-050041202
+KE-050041203
 
 # Common
 KE-060100201
diff --git 
a/src/tool/src/main/java/org/apache/kylin/helper/MetadataToolHelper.java 
b/src/tool/src/main/java/org/apache/kylin/helper/MetadataToolHelper.java
index f000e766a6..f3d920d918 100644
--- a/src/tool/src/main/java/org/apache/kylin/helper/MetadataToolHelper.java
+++ b/src/tool/src/main/java/org/apache/kylin/helper/MetadataToolHelper.java
@@ -19,6 +19,7 @@
 package org.apache.kylin.helper;
 
 import static 
org.apache.kylin.common.exception.code.ErrorCodeTool.FILE_ALREADY_EXISTS;
+import static 
org.apache.kylin.common.exception.code.ErrorCodeTool.MODEL_DUPLICATE_UUID_FAILED;
 
 import java.io.File;
 import java.io.IOException;
@@ -28,9 +29,12 @@ import java.nio.file.Paths;
 import java.time.Clock;
 import java.time.LocalDateTime;
 import java.time.format.DateTimeFormatter;
+import java.util.ArrayList;
 import java.util.Collections;
+import java.util.HashSet;
 import java.util.List;
 import java.util.Locale;
+import java.util.Map;
 import java.util.NavigableSet;
 import java.util.Objects;
 import java.util.Set;
@@ -58,8 +62,10 @@ import org.apache.kylin.common.util.JsonUtil;
 import org.apache.kylin.common.util.MetadataChecker;
 import org.apache.kylin.common.util.Pair;
 import org.apache.kylin.guava30.shaded.common.base.Preconditions;
+import org.apache.kylin.guava30.shaded.common.collect.Maps;
 import org.apache.kylin.guava30.shaded.common.collect.Sets;
 import org.apache.kylin.guava30.shaded.common.io.ByteSource;
+import org.apache.kylin.metadata.model.NDataModel;
 import org.apache.kylin.metadata.project.ProjectInstance;
 import org.a

(kylin) 06/35: KYLIN-5798 Add user-table access cache for table-loading

2024-04-12 Thread liyang
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 4d3418c237d4a839a85573712d0111d81086a477
Author: Yaguang Jia 
AuthorDate: Wed Aug 30 14:11:32 2023 +0800

KYLIN-5798 Add user-table access cache for table-loading
---
 .../org/apache/kylin/common/KylinConfigBase.java   | 13 +++
 .../apache/kylin/common/KylinConfigBaseTest.java   | 22 ++
 .../apache/kylin/rest/service/SparkDDLTest.java| 26 ++
 .../spark/source/NSparkMetadataExplorer.java   | 22 +++---
 .../spark/source/NSparkMetadataExplorerTest.java   | 14 +++-
 5 files changed, 79 insertions(+), 18 deletions(-)

diff --git 
a/src/core-common/src/main/java/org/apache/kylin/common/KylinConfigBase.java 
b/src/core-common/src/main/java/org/apache/kylin/common/KylinConfigBase.java
index 3de55bf84e..8b9a0308f7 100644
--- a/src/core-common/src/main/java/org/apache/kylin/common/KylinConfigBase.java
+++ b/src/core-common/src/main/java/org/apache/kylin/common/KylinConfigBase.java
@@ -2800,6 +2800,19 @@ public abstract class KylinConfigBase implements 
Serializable {
 return 
Boolean.parseBoolean(getOptional("kylin.source.hive.table-access-filter-enabled",
 FALSE));
 }
 
+public boolean getTableAccessCacheEnable() {
+return 
Boolean.parseBoolean(getOptional("kylin.source.hive.table-access-cache-enabled",
 TRUE));
+}
+
+public long getTableAccessCacheSize() {
+return 
Long.parseLong(getOptional("kylin.source.hive.table-access-cache-size", 
ONE_HUNDRED_THOUSAND));
+}
+
+public long getTableAccessCacheTTL() {
+return 
TimeUtil.timeStringAs(getOptional("kylin.source.hive.table-access-cache-ttl", 
"7d"),
+TimeUnit.MINUTES);
+}
+
 public String[] getHiveDatabases() {
 return getOptionalStringArray("kylin.source.hive.databases", new 
String[0]);
 }
diff --git 
a/src/core-common/src/test/java/org/apache/kylin/common/KylinConfigBaseTest.java
 
b/src/core-common/src/test/java/org/apache/kylin/common/KylinConfigBaseTest.java
index 6be4411004..59e4a3fc9b 100644
--- 
a/src/core-common/src/test/java/org/apache/kylin/common/KylinConfigBaseTest.java
+++ 
b/src/core-common/src/test/java/org/apache/kylin/common/KylinConfigBaseTest.java
@@ -36,6 +36,7 @@
 
 package org.apache.kylin.common;
 
+import static org.apache.kylin.common.KylinConfigBase.FALSE;
 import static org.apache.kylin.common.KylinConfigBase.PATH_DELIMITER;
 import static 
org.apache.kylin.common.KylinConfigBase.WRITING_CLUSTER_WORKING_DIR;
 import static 
org.apache.kylin.common.constant.Constants.KYLIN_SOURCE_JDBC_SOURCE_ENABLE_KEY;
@@ -1499,6 +1500,27 @@ class KylinConfigBaseTest {
 config.setProperty("kylin.metadata.audit-log.max-size", "300");
 assertEquals(300, config.getMetadataAuditLogMaxSize());
 }
+
+@Test
+void testGetTableAccessCache() {
+KylinConfig config = KylinConfig.getInstanceFromEnv();
+
+assertTrue(config.getTableAccessCacheEnable());
+config.setProperty("kylin.source.hive.table-access-cache-enabled", 
FALSE);
+assertFalse(config.getTableAccessCacheEnable());
+
+assertEquals(10, config.getTableAccessCacheSize());
+config.setProperty("kylin.source.hive.table-access-cache-size", 
"20");
+assertEquals(20, config.getTableAccessCacheSize());
+
+assertEquals(10080, config.getTableAccessCacheTTL());
+config.setProperty("kylin.source.hive.table-access-cache-ttl", "1m");
+assertEquals(1, config.getTableAccessCacheTTL());
+config.setProperty("kylin.source.hive.table-access-cache-ttl", "1h");
+assertEquals(60, config.getTableAccessCacheTTL());
+config.setProperty("kylin.source.hive.table-access-cache-ttl", "1d");
+assertEquals(1440, config.getTableAccessCacheTTL());
+}
 }
 
 class EnvironmentUpdateUtils {
diff --git 
a/src/datasource-service/src/test/java/org/apache/kylin/rest/service/SparkDDLTest.java
 
b/src/datasource-service/src/test/java/org/apache/kylin/rest/service/SparkDDLTest.java
index cf23d159aa..dc293e2b0c 100644
--- 
a/src/datasource-service/src/test/java/org/apache/kylin/rest/service/SparkDDLTest.java
+++ 
b/src/datasource-service/src/test/java/org/apache/kylin/rest/service/SparkDDLTest.java
@@ -32,6 +32,7 @@ import org.apache.kylin.common.msg.MsgPicker;
 import org.apache.kylin.common.util.JsonUtil;
 import org.apache.kylin.common.util.NLocalFileMetadataTestCase;
 import org.apache.kylin.common.util.Pair;
+import org.apache.kylin.guava30.shaded.common.collect.Lists;
 import org.apache.kylin.metadata.model.NTableMetadataManager;
 import org.apache.kylin.metadata.model.TableDesc;
 

(kylin) 03/35: KYLIN-5795 Remove the check of `hadoop.tmp.dir`

2024-04-12 Thread liyang
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 91383f54d5c70bf6ce0f3f641dcd186de193029b
Author: Yaguang Jia 
AuthorDate: Mon Aug 28 15:41:05 2023 +0800

KYLIN-5795 Remove the check of `hadoop.tmp.dir`
---
 .../src/main/java/org/apache/kylin/common/util/HadoopUtil.java| 4 
 1 file changed, 4 deletions(-)

diff --git 
a/src/core-common/src/main/java/org/apache/kylin/common/util/HadoopUtil.java 
b/src/core-common/src/main/java/org/apache/kylin/common/util/HadoopUtil.java
index 8e4250fc0f..0e3ac41ae5 100644
--- a/src/core-common/src/main/java/org/apache/kylin/common/util/HadoopUtil.java
+++ b/src/core-common/src/main/java/org/apache/kylin/common/util/HadoopUtil.java
@@ -98,10 +98,6 @@ public class HadoopUtil {
 }
 
 public static Configuration healSickConfig(Configuration conf) {
-// https://issues.apache.org/jira/browse/KYLIN-953
-if (StringUtils.isBlank(conf.get("hadoop.tmp.dir"))) {
-conf.set("hadoop.tmp.dir", "/tmp");
-}
 //  https://issues.apache.org/jira/browse/KYLIN-3064
 conf.set("yarn.timeline-service.enabled", "false");
 



(kylin) branch kylin5 updated (1d1ecbec63 -> 3f9b9c83be)

2024-04-12 Thread liyang
This is an automated email from the ASF dual-hosted git repository.

liyang pushed a change to branch kylin5
in repository https://gitbox.apache.org/repos/asf/kylin.git


from 1d1ecbec63 KYLIN-5823,fix text recognition bug
 new d6285db6ab KYLIN-5792 Support ldap memberid mode
 new 07354967d4 KYLIN-5793 Fix Chinese gibberish when Spring ${} attribute 
injection
 new 91383f54d5 KYLIN-5795 Remove the check of `hadoop.tmp.dir`
 new e824503eca KYLIN-5796 Support databinder auto grow collections limit
 new 82ee25fdf1 KYLIN-5797 Remove nacos jar
 new 4d3418c237 KYLIN-5798 Add user-table access cache for table-loading
 new deb209f531 KYLIN-5799 Fix round, bround, lpad, rpad function
 new dc344ce2ff KYLIN-5800 & KYLIN-5812 Support scalar subquery join 
aggregate pushdown
 new e33ef57cce KYLIN-5791 & KYLIN-5801 Fix computation of timestampdff & 
add_month
 new 9b8050e00a KYLIN-5802 Models with the same name exist when restore 
metadata
 new bfff6d002c KYLIN-5803 Add file segments and smart cache
 new 085d707216 KYLIN-5805 Refactor project lock
 new a212350a51 KYLIN-5807 Fix query execute as user without data query acl
 new c4aad6e78b KYLIN-5808 Optimize performance when saving model/adding CC
 new 630a3aa7ce KYLIN-5809 Add TableIndex suggestion control in open api
 new dcfa26067f KYLIN-5810 Add the spark.session.isDefined check in 
queryExec
 new 5092e7a239 KYLIN-5811 Enhancement of SCD2
 new ebd2f3d670 KYLIN-5814 Support lettuce sentinel mode
 new 768a5ececc KYLIN-5815 Failed to add primaryKey of table when upgrading 
concurrently
 new 2159699d8e KYLIN-5816 Add zk lock for dict v3
 new 00352e8c2d KYLIN-5817 Query scanRows and bytes are incorrect
 new c61dc41899 KYLIN-5828 Concurrently dict v2 jobs lead to abnormal 
encoding result
 new f9255a515d KYLIN-5829 Add a tool for generating sql from dumped 
metadata
 new 191d08c272 KYLIN-5830 Push columns of sortRel to subOlapContexts
 new d7f37675e2 KYLIN-5832 Support queryDetect api
 new 412eff5c73 KYLIN-5833 Use TableIndex answer select * only works for 
query
 new e49c2f15a6 KYLIN-5836 Fix mapr env building error
 new 148d8f61aa KYLIN-5837 Support only reusing user defined computedColumns
 new eacb62b8aa KYLIN-5838 Replace join expression with the name of 
computedColumn
 new be22ca0de7 KYLIN-5839 Block agg-push-down for non-equal-join
 new 1c05436a01 KYLIN-5840 Fix vulnerability, Upgrade 
org.xerial.snappy:snappy-java to version 1.1.10.4
 new 7d24ce642c KYLIN-5841 Fix vulnerability, Upgrade org.apache.avro:avro 
to version 1.11.3
 new e804eee81e KYLIN-5844 & KYLIN-5843 Column ACL works for PushDown
 new 0bbb74ee79 KYLIN-5845 Avoid model initialization for multi-thread
 new 3f9b9c83be KYLIN-5846 upgrade spark version to 3.2.0-kylin-4.6.16.0

The 35 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 build/bin/create-table.sh  |  32 +
 build/conf/kylin-tools-diag-log4j.xml  |   6 +
 build/conf/kylin-tools-log4j.xml   |   6 +
 .../kap/secondstorage/metadata/Manager.java|  23 +-
 .../kap/secondstorage/metadata/NodeGroup.java  |   5 +
 .../kap/secondstorage/metadata/TablePlan.java  |   5 +
 pom.xml|  48 +-
 .../kylin/rest/controller/NBasicController.java|  14 +
 .../kylin/rest/controller/NSystemController.java   |  33 +
 src/common-service/pom.xml |   4 +
 .../apache/kylin/rest/KylinPrepareEnvListener.java |   3 +-
 .../kylin/rest/aspect/InsensitiveNameAspect.java   |   3 +
 .../kylin/rest/cache/AbstractKylinCache.java   |  78 ++
 .../apache/kylin/rest/cache/CacheConstant.java}|  12 +-
 .../org/apache/kylin/rest/cache/RedisCache.java|  91 +--
 .../org/apache/kylin/rest/cache/RedisCacheV2.java  | 224 ++
 .../apache/kylin/rest/config/AppInitializer.java   |  21 +
 .../config/initialize/EpochChangedListener.java|  16 +-
 .../config/initialize/ModelBrokenListener.java |  12 +-
 .../rest/request/SyncFileSegmentsRequest.java} |  23 +-
 .../rest/response/SyncFileSegmentsResponse.java}   |  29 +-
 .../apache/kylin/rest/service/AccessService.java   |  14 +-
 .../kylin/rest/service/KylinUserService.java   |   8 +-
 .../apache/kylin/rest/service/ProjectService.java  |   5 +-
 .../apache/kylin/rest/service/SystemService.java   |  44 +-
 .../service/task/QueryHistoryTaskScheduler.java|  21 +-
 .../task/RecommendationTopNUpdateScheduler.java|  16 +-
 .../kylin/rest/cache/CacheConstantTest.java}   |  13 +-
 .../apache/kylin/rest/cache/RedisCacheTest.java}   |  20 +-
 .../apache/kylin/rest/cache/RedisCacheV2Test.java  | 195 +
 .../tas

(kylin) 02/35: KYLIN-5793 Fix Chinese gibberish when Spring ${} attribute injection

2024-04-12 Thread liyang
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 07354967d424f3ba76d87ea562948f8b5f69a3a5
Author: Liang.Hua <36814772+jacob...@users.noreply.github.com>
AuthorDate: Mon Aug 28 14:56:11 2023 +0800

KYLIN-5793 Fix Chinese gibberish when Spring ${} attribute injection
---
 .../org/apache/kylin/rest/security/PasswordPlaceholderConfigurer.java| 1 +
 1 file changed, 1 insertion(+)

diff --git 
a/src/core-metadata/src/main/java/org/apache/kylin/rest/security/PasswordPlaceholderConfigurer.java
 
b/src/core-metadata/src/main/java/org/apache/kylin/rest/security/PasswordPlaceholderConfigurer.java
index 3f30693497..1f715fb8bb 100644
--- 
a/src/core-metadata/src/main/java/org/apache/kylin/rest/security/PasswordPlaceholderConfigurer.java
+++ 
b/src/core-metadata/src/main/java/org/apache/kylin/rest/security/PasswordPlaceholderConfigurer.java
@@ -62,6 +62,7 @@ public class PasswordPlaceholderConfigurer extends 
PropertyPlaceholderConfigurer
 }
 InputStream is = IOUtils.toInputStream(propString, 
Charset.defaultCharset());
 resources[0] = new InputStreamResource(is);
+this.setFileEncoding(Charset.defaultCharset().toString());
 this.setLocations(resources);
 }
 



(kylin) branch kylin5 updated: KYLIN-5823,fix text recognition bug

2024-04-10 Thread liyang
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


The following commit(s) were added to refs/heads/kylin5 by this push:
 new 1d1ecbec63 KYLIN-5823,fix text recognition bug
1d1ecbec63 is described below

commit 1d1ecbec63e0b61251cff87ad06082fa84ac8289
Author: huangchunyan 
AuthorDate: Thu Apr 11 11:45:33 2024 +0800

KYLIN-5823,fix text recognition bug
---
 kystudio/src/components/common/RecognizeAggregateModal/store.js | 1 +
 1 file changed, 1 insertion(+)

diff --git a/kystudio/src/components/common/RecognizeAggregateModal/store.js 
b/kystudio/src/components/common/RecognizeAggregateModal/store.js
index d2d2009ab0..18e8b15a16 100644
--- a/kystudio/src/components/common/RecognizeAggregateModal/store.js
+++ b/kystudio/src/components/common/RecognizeAggregateModal/store.js
@@ -1,4 +1,5 @@
 import { AGGREGATE_TYPE } from '../../../config'
+import { objectClone } from '../../../util/index'
 
 const types = {
   SHOW_MODAL: 'SHOW_MODAL',



(kylin) branch kylin5 updated: KYLIN-5825,fix aggregate modal and table index modal ui and fix chrome 50 layout bug

2024-04-10 Thread liyang
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


The following commit(s) were added to refs/heads/kylin5 by this push:
 new 6adffadde7 KYLIN-5825,fix aggregate modal and table index modal ui and 
fix chrome 50 layout bug
6adffadde7 is described below

commit 6adffadde703a0ee7975301eff81766fb9fcbf6e
Author: huangchunyan 
AuthorDate: Fri Apr 5 17:45:25 2024 +0800

KYLIN-5825,fix aggregate modal and table index modal ui and fix chrome 50 
layout bug
---
 .../StudioModel/ModelList/AggregateModal/index.vue | 333 +
 .../ModelList/AggregateModal/locales.js|  21 +-
 .../ModelList/DataFeatures/dataFeatures.vue|   2 +-
 .../StudioModel/TableIndexEdit/tableindex_edit.vue |  32 +-
 4 files changed, 162 insertions(+), 226 deletions(-)

diff --git 
a/kystudio/src/components/studio/StudioModel/ModelList/AggregateModal/index.vue 
b/kystudio/src/components/studio/StudioModel/ModelList/AggregateModal/index.vue
index 129b426541..ef4b60475e 100644
--- 
a/kystudio/src/components/studio/StudioModel/ModelList/AggregateModal/index.vue
+++ 
b/kystudio/src/components/studio/StudioModel/ModelList/AggregateModal/index.vue
@@ -71,13 +71,16 @@
   
 
   
-*
 {{$t('indexTimeRange')}}
-
+*
   
   
 
-  {{$t('kylinLang.common.HYBRID')}}
+  
+{{$t('kylinLang.common.HYBRID')}}
+  
+
+  
 
 {{$t('kylinLang.common.BATCH')}}
 
@@ -98,7 +101,7 @@
   :disabled="!(model.model_type === 'HYBRID' && 
!form.aggregateArray[aggregateIdx].index_range) || (!indexUpdateEnabled && 
['HYBRID', 'STREAMING'].includes(aggregate.index_range))">
   
   {{$t('clearAll')}}
 
@@ -122,7 +125,7 @@
 plain
 size="mini"
 icon="el-ksd-icon-edit_22"
-class="add-all-item"
+class="add-all-item ksd-ml-8"
 type="primary"
 :disabled="(model.model_type === 'HYBRID' && 
!form.aggregateArray[aggregateIdx].index_range) || (!indexUpdateEnabled && 
['HYBRID', 'STREAMING'].includes(aggregate.index_range))"
 @click="handleEditIncludes(aggregateIdx, 
aggregate.id)">{{$t('edit')}}
@@ -152,8 +155,8 @@
 
   
 
-
-  
+  
 
   
+  
+{{$t('clearAll')}}
+  
 
   
   
 
-  {{$t('clearAll')}}
 
 
-  {{$t('edit')}}
 
@@ -458,7 +471,7 @@
 
   {{$t('kylinLang.common.cancel')}}
   
-{{$t('kylinLang.common.save')}}
+{{$t('kylinLang.common.save')}}
   
   
 {{$t('saveAndBuild')}}
@@ -470,7 +483,7 @@
 
-  
-{{$t('editIncludeDimensionTip')}}
-
-
-
-  
-
-  
-  
-
-  
-  {{$t('th_name')}}
-
-  
-  {{$t('th_column')}}
-
-  
-  {{$t('th_dataType')}}
-  {{$t('cardinality')}}
-  {{$t('th_info')}}
-  {{$t('th_order')}}
-
-
-  
-
-{{item.name}}
-{{item.column}}
-{{item.type}}
-
-  NULL
-  {{ item.cardinality }}
-
-{{item.comment}}
-
-  
-
-
-
-  
-
-  
-
-  
+  
+
+  
+{{$t('excludeTableCheckbox')}}
+
+  
+{{ $t('excludeTableCheckb

(kylin) branch kylin5 updated: KYLIN-5822,support history table adds left-closed and right-closed time interval

2024-04-10 Thread liyang
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


The following commit(s) were added to refs/heads/kylin5 by this push:
 new 16f8da9071 KYLIN-5822,support history table adds left-closed and 
right-closed time interval
16f8da9071 is described below

commit 16f8da90718a2104729fb2a0c8d3cf61b1f8617f
Author: huangchunyan 
AuthorDate: Sat Apr 6 16:31:37 2024 +0800

KYLIN-5822,support history table adds left-closed and right-closed time 
interval
---
 .../components/setting/SettingAdvanced/locales.js  |   6 +-
 .../ModelList/Components/ModelTitleDescription.vue | 118 ++---
 .../studio/StudioModel/ModelList/locales.js|   2 +-
 .../studio/StudioModel/TableJoinModal/index.vue|  75 ++---
 .../studio/StudioModel/TableJoinModal/locales.js   |   2 +-
 5 files changed, 95 insertions(+), 108 deletions(-)

diff --git a/kystudio/src/components/setting/SettingAdvanced/locales.js 
b/kystudio/src/components/setting/SettingAdvanced/locales.js
index 121517fd63..1c38df5169 100644
--- a/kystudio/src/components/setting/SettingAdvanced/locales.js
+++ b/kystudio/src/components/setting/SettingAdvanced/locales.js
@@ -51,9 +51,9 @@ export default {
 confirmOpenTip: 'Do you want to continue?',
 SCD2Settings: 'Support History table',
 nonEqualJoin: 'Show non-equal join conditions for History table',
-noEqualDecription: 'With this switch ON, you may use the history table for 
slowly changing dimension (as was): Non-equal join conditions (≥, <) could be 
used for modeling, building and queries. ',
+noEqualDecription: 'With this switch ON, you may use the history table for 
slowly changing dimension (as was): Non-equal join conditions could be used for 
modeling, building and queries. ',
 confirmOpen: 'Turn On',
-closeSCDTip: 'With this switch OFF, non-equal join conditions (≥, <) 
couldn\'t be used when editing model. The following models will go offline 
automatically as they include non-equal join conditions:',
+closeSCDTip: 'With this switch OFF, non-equal join conditions couldn\'t be 
used when editing model. The following models will go offline automatically as 
they include non-equal join conditions:',
 closeSCDTip1: 'To make these models online, please delete the non-equal 
join conditions, or turn this switch ON. Do you want to continue?',
 confirmClose: 'Turn Off',
 mulPartitionSettings: 'Multilevel Partitioning',
@@ -63,7 +63,7 @@ export default {
 openMulPartitionTip: 'Please note that this feature is still in BETA 
phase. Potential risks or known limitations might exist. Check ',
 openMulPartitionTip1: ' for details.',
 closeMulPartitionSetting: 'Turn Off Multilevel Partitioning',
-closeMulPartitionTip: 'With this switch OFF,  multilevel partitioning 
couldn’t be used. The following models would go offline automatically as they 
used multilevel partitioning:',
+closeMulPartitionTip: 'With this switch OFF, multilevel partitioning 
couldn\'t be used. The following models would go offline automatically as they 
used multilevel partitioning:',
 closeMulPartitionTip1: 'To make these models online, please delete all 
subpartitions, or turn this switch ON. Do you want to continue?',
 snapshotTitle: 'Snapshot Management',
 snapshotManagment: 'Support Snapshot Management',
diff --git 
a/kystudio/src/components/studio/StudioModel/ModelList/Components/ModelTitleDescription.vue
 
b/kystudio/src/components/studio/StudioModel/ModelList/Components/ModelTitleDescription.vue
index b66af1b080..71390cda59 100644
--- 
a/kystudio/src/components/studio/StudioModel/ModelList/Components/ModelTitleDescription.vue
+++ 
b/kystudio/src/components/studio/StudioModel/ModelList/Components/ModelTitleDescription.vue
@@ -1,64 +1,64 @@
 
-
-  
-
-  
-  {{modelData.status}}
-  {{$t('emptyIndexTips')}}
-  
-{{modelData.model_type === 'HYBRID' ? 
$t('modelSegmentHoleTips1') : $t('modelSegmentHoleTips')}}{{$t('seeDetail')}}
+  
+
+  
+
+{{modelData.status}}
+{{$t('emptyIndexTips')}}
+
+  {{modelData.model_type === 'HYBRID' ? 
$t('modelSegmentHoleTips1') : $t('modelSegmentHoleTips')}}{{$t('seeDetail')}}
+
+
+  {{$t('modelSegmentHoleTips2')}}
+
+
+  {{$t('modelMetadataChangedTips')}}{{$t('seeDetail')}}
+
+
+  {{$t('SCD2ModalOfflineTip')}}
+
+
+  {{$t('noSegmentOnlineTip')}}
+
+
+  {{$t('multilParTip')}}
+
+  
+  
+
+  {{modelData.alias || modelData.name}}
+  
+{{$t('kylinLang.model.ownerGrid')}}{{modelData.owner}}
+{{$t('description')}}{{modelData.description || '-'}}
   
-  
-{{$t('modelSegmentHol

(kylin) branch kylin5 updated: KYLIN-5826,fix table index select all issue and fix load user or usergroup list filter issue

2024-04-10 Thread liyang
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


The following commit(s) were added to refs/heads/kylin5 by this push:
 new 458bddf09f KYLIN-5826,fix table index select all issue and fix load 
user or usergroup list filter issue
458bddf09f is described below

commit 458bddf09f85989bcac1874d3beea6d3791d3129
Author: huangchunyan 
AuthorDate: Sat Apr 6 15:07:20 2024 +0800

KYLIN-5826,fix table index select all issue and fix load user or usergroup 
list filter issue
---
 kystudio/src/components/admin/Group/index.vue  |   6 +-
 kystudio/src/components/admin/User/index.vue   |  10 +-
 .../common/CustomTransferData/TransferData.vue | 335 +++--
 3 files changed, 177 insertions(+), 174 deletions(-)

diff --git a/kystudio/src/components/admin/Group/index.vue 
b/kystudio/src/components/admin/Group/index.vue
index 36cc253bf3..72b49f8d9e 100644
--- a/kystudio/src/components/admin/Group/index.vue
+++ b/kystudio/src/components/admin/Group/index.vue
@@ -135,7 +135,7 @@ export default class SecurityGroup extends Vue {
   inputFilter (value) {
 this.pagination.page_offset = 0
 this.filterName = value
-this.loadGroupUsers(value)
+this.loadGroupUsers()
   }
 
   get emptyText () {
@@ -163,11 +163,11 @@ export default class SecurityGroup extends Vue {
 }
   }
 
-  loadGroupUsers (filterGroupName) {
+  loadGroupUsers () {
 this.isLoadingUserGroups = true
 this.loadGroupUsersList({
   ...this.pagination,
-  user_group_name: filterGroupName
+  user_group_name: this.filterName
 }).then(() => {
   this.isLoadingUserGroups = false
 }, (res) => {
diff --git a/kystudio/src/components/admin/User/index.vue 
b/kystudio/src/components/admin/User/index.vue
index eb323de881..83a89cf888 100644
--- a/kystudio/src/components/admin/User/index.vue
+++ b/kystudio/src/components/admin/User/index.vue
@@ -211,7 +211,7 @@ export default class SecurityUser extends Vue {
   inputFilter (value) {
 this.pagination.page_offset = 0
 this.filterName = value
-this.loadUsers(value)
+this.loadUsers()
   }
 
   get emptyText () {
@@ -221,16 +221,16 @@ export default class SecurityUser extends Vue {
   handleCurrentChange (pager, pageSize) {
 this.pagination.page_offset = pager
 this.pagination.page_size = pageSize
-this.loadUsers(this.filterName)
+this.loadUsers()
   }
 
-  async loadUsers (name) {
+  async loadUsers () {
 this.isLoadingUsers = true
 try {
   const parameter = {
 ...this.pagination,
 // project: this.currentSelectedProject, // 处理资源组时,发现这个接口不用传 project 参数
-name: name || '',
+name: this.filterName,
 group_uuid: this.currentGroup && this.currentGroup.uuid
   }
   const res = !this.currentGroup
@@ -254,7 +254,7 @@ export default class SecurityUser extends Vue {
   async editUser (editType, userDetail) {
 if (!this.isTestingSecurityProfile) return
 const isSubmit = await this.callUserEditModal({ editType, userDetail })
-isSubmit && this.loadUsers(this.filterName)
+isSubmit && this.loadUsers()
   }
 
   async editUserDataPermission (row) {
diff --git a/kystudio/src/components/common/CustomTransferData/TransferData.vue 
b/kystudio/src/components/common/CustomTransferData/TransferData.vue
index 848658f500..2305331ba8 100644
--- a/kystudio/src/components/common/CustomTransferData/TransferData.vue
+++ b/kystudio/src/components/common/CustomTransferData/TransferData.vue
@@ -1,186 +1,186 @@
 
-
-  
-  
-
-  
-
-  
-  
-
-  
-
-  {{$t('kylinLang.common.selectAll')}}
-
-
-  
-{{$t('column')}}{{columnSort ? `: ${$t(columnSort)}` : 
''}}
-  
-  
-{{$t('type')}}{{typeOptions.length ? `: 
${typeOptions.length}` : ''}}
-  
-
-
-  
-{{$t('column')}}{{columnSort ? `: ${$t(columnSort)}` : 
''}}
-
-  {{$t('ascending')}}
-  {{$t('descending')}}
-
-  
-  
-{{$t('type')}}{{typeOptions.length ? `: 
${typeOptions.length}` : ''}}
-
-  
-{{item}}
-  
-
-  
-
-
-  |
-  
-{{ 
$t('textRecognition') }}
-  
-
-  
-  
-
-
-  
-
-  
-
-  

(kylin) branch kylin5 updated: KYLIN-5824,refine handel error for export models

2024-04-10 Thread liyang
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


The following commit(s) were added to refs/heads/kylin5 by this push:
 new 9e8ca1a953 KYLIN-5824,refine handel error for export models
9e8ca1a953 is described below

commit 9e8ca1a9536c9ecf0eafca048c8733e3668f2c76
Author: huangchunyan 
AuthorDate: Fri Apr 5 17:31:28 2024 +0800

KYLIN-5824,refine handel error for export models
---
 .../common/ModelsExportModal/ModelsExportModal.vue |  2 +-
 .../ModelList/AggregateModal/locales.js|  4 ++--
 kystudio/src/util/business.js  |  2 +-
 kystudio/src/util/domHelper.js | 28 ++
 4 files changed, 28 insertions(+), 8 deletions(-)

diff --git 
a/kystudio/src/components/common/ModelsExportModal/ModelsExportModal.vue 
b/kystudio/src/components/common/ModelsExportModal/ModelsExportModal.vue
index 3b3b701b39..49f8931d8d 100644
--- a/kystudio/src/components/common/ModelsExportModal/ModelsExportModal.vue
+++ b/kystudio/src/components/common/ModelsExportModal/ModelsExportModal.vue
@@ -270,7 +270,7 @@ export default class ModelsExportModal extends Vue {
   this.handleClose(true)
   this.$message.success(this.$t('exportSuccess'))
 } catch (e) {
-  this.$message.error(this.$t('exportFailed'))
+  // this.$message.error(this.$t('exportFailed'))
 }
 this.isSubmiting = false
   }
diff --git 
a/kystudio/src/components/studio/StudioModel/ModelList/AggregateModal/locales.js
 
b/kystudio/src/components/studio/StudioModel/ModelList/AggregateModal/locales.js
index 272a94d5ff..56905e9e0b 100644
--- 
a/kystudio/src/components/studio/StudioModel/ModelList/AggregateModal/locales.js
+++ 
b/kystudio/src/components/studio/StudioModel/ModelList/AggregateModal/locales.js
@@ -113,11 +113,11 @@ export default {
 excludeTableCheckbox: 'Display columns excluded from recommendations',
 excludeTableCheckboxTip: 'If an excluded column is added to indexes, this 
column will store "historical truth"(SCD Type2, As Was).',
 excludedTableIconTip: 'Excluded from recommendations',
-indexTimeRange: 'Index’s Data Range',
+indexTimeRange: 'Real-time Index Types',
 manyToManyAntiTableTip: 'For the tables excluded from recommendations, if 
the join relationship of a table is One-to-Many or Many-to-Many, dimensions 
from this table can\'t be used in indexes. ',
 indexTimeRangeTips: 'The data range that the indexes will be built in. 
With “Batch and Streaming“ selected, there will be generated batch indexes and 
streaming indexes with same content respectively. ',
 refuseAddIndexTip: 'Can\'t add streaming indexes. Please stop the 
streaming job and then delete all the streaming segments.',
-disableAddDim: 'Select index\'s data range',
+disableAddDim: 'Please select the real-time index type',
 textRecognition: 'Text Recognition'
   }
 }
diff --git a/kystudio/src/util/business.js b/kystudio/src/util/business.js
index 5aa4d387df..d170361201 100644
--- a/kystudio/src/util/business.js
+++ b/kystudio/src/util/business.js
@@ -30,7 +30,7 @@ export function handleError (res, errorcallback) {
 if (window.kylinVm.$store.state.config.platform === 'iframe') {
   window.kylinVm.$store.state.config.errorMsgBox.msg = res.message || 
window.kylinVm.$t('kylinLang.common.notConnectServerIframe')
 } else {
-  window.kylinVm.$store.state.config.errorMsgBox.msg = res.message || 
window.kylinVm.$t('kylinLang.common.notConnectServer')
+  window.kylinVm.$store.state.config.errorMsgBox.msg = res.message || 
(responseData && responseData.msg) || 
window.kylinVm.$t('kylinLang.common.notConnectServer')
 }
 window.kylinVm.$store.state.config.errorMsgBox.detail = responseData && 
responseData.stacktrace || res.stack || JSON.stringify(res)
   } else {
diff --git a/kystudio/src/util/domHelper.js b/kystudio/src/util/domHelper.js
index ddec46a24e..40b8146435 100644
--- a/kystudio/src/util/domHelper.js
+++ b/kystudio/src/util/domHelper.js
@@ -1,5 +1,7 @@
 import Vue from 'vue'
 import ElementUI from 'kyligence-kylin-ui'
+import $ from 'jquery'
+import { handleError } from './business'
 
 export const download = {
   post (url, data) {
@@ -32,11 +34,29 @@ export const download = {
 }
 
 document.body.appendChild($form)
-$form.submit()
-
-setTimeout(() => {
-  document.body.removeChild($form)
+return $.ajax({
+  headers: {
+'Accept-Language': localStorage.getItem('kystudio_lang') === 'en' ? 
'en' : 'cn'
+  },
+  url: $($form).attr('action'), // 获取表单的提交地址
+  method: $($form).attr('method'), // 获取表单的提交方法
+  data: $($form).serialize(), // 序列化表单数据
+  success: (res) => {
+// 当服务器响应成功时的处理逻辑
+$form.submit()
+setTimeout(() => {
+  document.body.removeChild($form)
+})
+  }

(kylin) branch kylin5 updated: KYLIN-5823,improve text recognition dialog of add batch dimensions

2024-04-10 Thread liyang
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


The following commit(s) were added to refs/heads/kylin5 by this push:
 new 93fee73901 KYLIN-5823,improve text recognition dialog of add batch 
dimensions
93fee73901 is described below

commit 93fee7390113733c4b0c367734b953c0cc271b16
Author: huangchunyan 
AuthorDate: Fri Apr 5 17:16:33 2024 +0800

KYLIN-5823,improve text recognition dialog of add batch dimensions
---
 .../RecognizeAggregateModal.vue| 208 -
 .../common/RecognizeAggregateModal/handler.js  |   3 +-
 .../common/RecognizeAggregateModal/locales.js  |  10 +-
 .../common/RecognizeAggregateModal/store.js|  24 ++-
 .../studio/StudioModel/DimensionsModal/index.vue   |  71 +--
 .../studio/StudioModel/DimensionsModal/locales.js  |   4 +-
 6 files changed, 203 insertions(+), 117 deletions(-)

diff --git 
a/kystudio/src/components/common/RecognizeAggregateModal/RecognizeAggregateModal.vue
 
b/kystudio/src/components/common/RecognizeAggregateModal/RecognizeAggregateModal.vue
index 7ca329cbbf..4ca6f00b91 100644
--- 
a/kystudio/src/components/common/RecognizeAggregateModal/RecognizeAggregateModal.vue
+++ 
b/kystudio/src/components/common/RecognizeAggregateModal/RecognizeAggregateModal.vue
@@ -1,83 +1,83 @@
 
-
-  
-
-  
-
-  {{$tc('errorCount', errorCount, { count: 
errorCount })}}
-  
-{{$tc('repeatCount', repeatCount, { 
count: repeatCount })}}
-  
-
-
-  
-
-  
-  
-  
-
-  {{$t('dexecute')}}{{$t('acceleratorKey')}}
-  
+  
+
+  
+
+  
+{{$tc('errorCount', errorCount, { count: 
errorCount })}}
+
+  {{$tc('repeatCount', repeatCount, { count: 
repeatCount })}}
 
   
-
-
-  
-
-  {{$tc('selectedDimensionCount', selectedDimensionCount, { count: 
selectedDimensionCount })}}
-  
-|{{$t('usedDimensionCount', {count: 
usedDimensionCount})}}
-  
-
-
-  
-  {{$t('dimensionName')}}
-  {{$t('dataType')}}
-
-
-  
-
-  
-  {{ item.label }}
-  {{ item.dataType }}
-  
-
-  
-
-  
-  
-
-{{$t('recognizeFailed')}}
+  
+
   
-  
+
+
+
+  
+{{$t('dexecute')}}{{$t('acceleratorKey')}}
+
+  
 
   
-  
-
-  {{$t('kylinLang.common.cancel')}}
-
-
-  {{$t('kylinLang.common.save')}}
-
+  
+
+  
+{{$tc('selectedDimensionCount', selectedDimensionCount, { count: 
selectedDimensionCount })}}
+
+  |{{$t('usedDimensionCount', {count: 
usedDimensionCount})}}
+
+  
+  
+
+{{$t('dimensionName')}}
+{{$t('dataType')}}
+  
+  
+
+  
+
+{{ item.label }}
+{{ item.dataType }}
+
+  
+
+  
+
+
+  
+  {{$t('recognizeFailed')}}
+
+
   
-
-  
+
+
+  
+{{$t('kylinLang.common.cancel')}}
+  
+  
+{{$t('kylinLang.common.save')}}
+  
+
+  
+
   
-  
+<script>
   import Vue from 'vue'
   import AceEditor from 'vue2-ace-editor'
   import { Component, Watch } from 'vue-property-decorator'
@@ -92,6 +92,7 @@
   vuex.registerModule(['modals', 'RecognizeAggregateModal'], store)
 
   const TABLE_INDEX = 'TABLE_INDEX'
+  const DIMENSION = 'DIMENSION'
 
   @Component({
 components: {
@@ -105,6 +106,7 @@
 type: state => state.type,
 status: state => state.status,
 form: state => state.form,
+usedColumns: state => state.usedColumns,
 errors: state => state.errors,
 errorLines: state => state.errorLines,
 errorInEditor: state => state.errorInEditor,
@@ -119,7 +121,7 @@
 'hierarchyItems',
 'joints',
 'jointItems',
-'tableIndexCols'
+'allColumns'
   ])
 },
 methods: {
@@ -181,16 +183,17 @@
 }
 get isIndeterminate () {
   const { selectedDimensionCount, isSelectAll } = this
-  return selectedDimensionCount && !isSelectAll
+  return selectedDimensionCount > 0 && !isSelectAll
 }
 isColu

(kylin) branch kylin5 updated (e734e6e31b -> 0d742c639c)

2024-04-10 Thread liyang
This is an automated email from the ASF dual-hosted git repository.

liyang pushed a change to branch kylin5
in repository https://gitbox.apache.org/repos/asf/kylin.git


from e734e6e31b KYLIN-5819,optimize the warning message on the dialog for 
editing computed column
 add 0d742c639c KYLIN-5821,fix model edit page pfk flag bug and enhance 
model canvas window position

No new revisions were added by this update.

Summary of changes:
 .../studio/StudioModel/ModelEdit/config.js |  2 +-
 .../studio/StudioModel/ModelEdit/model.js  | 32 --
 2 files changed, 24 insertions(+), 10 deletions(-)



(kylin) branch kylin5 updated: KYLIN-5819,optimize the warning message on the dialog for editing computed column

2024-04-10 Thread liyang
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


The following commit(s) were added to refs/heads/kylin5 by this push:
 new e734e6e31b KYLIN-5819,optimize the warning message on the dialog for 
editing computed column
e734e6e31b is described below

commit e734e6e31bd035c59c945ecfa99b136d2f6380b4
Author: huangchunyan 
AuthorDate: Fri Apr 5 15:25:32 2024 +0800

KYLIN-5819,optimize the warning message on the dialog for editing computed 
column
---
 kystudio/src/components/common/GlobalDialog/dialog/detail_dialog.vue  | 2 +-
 kystudio/src/components/studio/StudioModel/AddCCModal/locales.js  | 2 +-
 .../components/studio/StudioModel/ModelList/ModelSaveConfig/index.vue | 4 ++--
 .../studio/StudioModel/ModelList/ModelSaveConfig/locales.js   | 3 ++-
 4 files changed, 6 insertions(+), 5 deletions(-)

diff --git 
a/kystudio/src/components/common/GlobalDialog/dialog/detail_dialog.vue 
b/kystudio/src/components/common/GlobalDialog/dialog/detail_dialog.vue
index 1307c2f737..ec1f04335c 100644
--- a/kystudio/src/components/common/GlobalDialog/dialog/detail_dialog.vue
+++ b/kystudio/src/components/common/GlobalDialog/dialog/detail_dialog.vue
@@ -91,7 +91,7 @@
   
 {{cancelT}}
 {{cancelT}}
-{{submitSubText}}
+{{submitSubText}}
 {{submitT}}
   
 
diff --git a/kystudio/src/components/studio/StudioModel/AddCCModal/locales.js 
b/kystudio/src/components/studio/StudioModel/AddCCModal/locales.js
index e437f7077b..87988ac338 100644
--- a/kystudio/src/components/studio/StudioModel/AddCCModal/locales.js
+++ b/kystudio/src/components/studio/StudioModel/AddCCModal/locales.js
@@ -1,5 +1,5 @@
 export default {
   en: {
-editCCTip: 'Please be aware that the modified expression would be 
effective until all the related indexes have been built.'
+editCCTip: 'Modify with caution, it may cause query performance 
degradation! If the edited computed column is used as a dimension or metric, 
the system will delete the relevant index and generate new index. The query 
performance will not be restored until the build index job is done.'
   }
 }
diff --git 
a/kystudio/src/components/studio/StudioModel/ModelList/ModelSaveConfig/index.vue
 
b/kystudio/src/components/studio/StudioModel/ModelList/ModelSaveConfig/index.vue
index 13839e9a1c..d8ded0cc7b 100644
--- 
a/kystudio/src/components/studio/StudioModel/ModelList/ModelSaveConfig/index.vue
+++ 
b/kystudio/src/components/studio/StudioModel/ModelList/ModelSaveConfig/index.vue
@@ -785,13 +785,13 @@ export default class ModelPartitionModal extends Vue {
 try {
   const res = await this.callGlobalDetailDialog({
 msg: this.$t('editCCBuildTip'),
-title: this.$t('kylinLang.common.tip'),
+title: this.$t('editCCBuildTipTitle'),
 dialogType: 'warning',
 showDetailBtn: false,
 isSubSubmit: true,
+isHideSubmit: true,
 wid: '600px',
 submitSubText: this.$t('kylinLang.common.save'),
-submitText: this.$t('saveAndLoad'),
 needConcelReject: true
   })
   this.handleClose(true, res.isOnlySave)
diff --git 
a/kystudio/src/components/studio/StudioModel/ModelList/ModelSaveConfig/locales.js
 
b/kystudio/src/components/studio/StudioModel/ModelList/ModelSaveConfig/locales.js
index 441fb30e54..1bd439fbde 100644
--- 
a/kystudio/src/components/studio/StudioModel/ModelList/ModelSaveConfig/locales.js
+++ 
b/kystudio/src/components/studio/StudioModel/ModelList/ModelSaveConfig/locales.js
@@ -38,7 +38,8 @@ export default {
 incrementalTips: 'It will load data incrementally based on the selected 
partition column, which is more resource-efficient.',
 fullLoadTips: 'The system will load all data',
 changeBuildTypeTips: 'With partition setting changed, all segments and 
data would be deleted. The model couldn\'t serve queries. Meanwhile, the 
related ongoing jobs for building index would be discarded.',
-editCCBuildTip: 'The modified expression of computed column would be 
effective until all the related indexes have been built. Do you want to save 
and build index now? ',
+editCCBuildTipTitle: 'Will delete and generate new indexes, continue to 
save model?',
+editCCBuildTip: 'Query performance will degrade until the new index are 
built! Modification of a computed column as a dimension or metric in the 
current model will cause the system to delete the relevant index and generate 
new index. The query performance will not be restored until the build index job 
is done.',
 saveAndBuild: 'Save and Build',
 purgeSegmentDataTips: 'Model definition has changed. Once saving the 
model, all data in the segments will be deleted. As a result, this model CAN\'T 
be used to serve queries. We

(kylin) 12/18: KYLIN-5787 Use t-digest as spark percentile_approx function

2024-04-09 Thread liyang
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 dd16079c42e4f6eb446945ec42980891934a20c6
Author: Zhiting Guo <35057824+fre...@users.noreply.github.com>
AuthorDate: Fri Aug 11 13:15:12 2023 +0800

KYLIN-5787 Use t-digest as spark percentile_approx function
---
 .../org/apache/kylin/common/KylinConfigBase.java   |  6 
 .../measure/percentile/PercentileCounter.java  |  1 +
 .../java/org/apache/kylin/util/ExecAndComp.java| 42 +-
 .../kylin/query/engine/AsyncQueryApplication.java  |  5 +++
 .../query/engine/AsyncQueryApplicationTest.java|  3 ++
 .../kylin/query/runtime/plan/AggregatePlan.scala   | 11 --
 .../scala/org/apache/spark/sql/KapFunctions.scala  |  8 +++--
 .../scala/org/apache/spark/sql/SparderEnv.scala|  3 ++
 .../org/apache/spark/sql/udf/UdfManager.scala  |  9 ++---
 .../org/apache/spark/sql/udaf/Percentile.scala |  5 +++
 10 files changed, 67 insertions(+), 26 deletions(-)

diff --git 
a/src/core-common/src/main/java/org/apache/kylin/common/KylinConfigBase.java 
b/src/core-common/src/main/java/org/apache/kylin/common/KylinConfigBase.java
index ff7bd4c7c3..5bfe8c262a 100644
--- a/src/core-common/src/main/java/org/apache/kylin/common/KylinConfigBase.java
+++ b/src/core-common/src/main/java/org/apache/kylin/common/KylinConfigBase.java
@@ -1914,6 +1914,12 @@ public abstract class KylinConfigBase implements 
Serializable {
 return 
Boolean.parseBoolean(this.getOptional("kylin.query.replace-dynamic-params-enabled",
 FALSE));
 }
 
+
+public String getPercentileApproxAlgorithm() {
+// Valid values: t-digest
+return this.getOptional("kylin.query.percentile-approx-algorithm", "");
+}
+
 public boolean isCollectUnionInOrder() {
 return 
Boolean.parseBoolean(this.getOptional("kylin.query.collect-union-in-order", 
TRUE));
 }
diff --git 
a/src/core-metadata/src/main/java/org/apache/kylin/measure/percentile/PercentileCounter.java
 
b/src/core-metadata/src/main/java/org/apache/kylin/measure/percentile/PercentileCounter.java
index 823b47ba38..11851d48c6 100644
--- 
a/src/core-metadata/src/main/java/org/apache/kylin/measure/percentile/PercentileCounter.java
+++ 
b/src/core-metadata/src/main/java/org/apache/kylin/measure/percentile/PercentileCounter.java
@@ -25,6 +25,7 @@ import com.tdunning.math.stats.AVLTreeDigest;
 import com.tdunning.math.stats.TDigest;
 
 public class PercentileCounter implements Serializable {
+public static final int DEFAULT_PERCENTILE_ACCURACY = 100;
 private static final double INVALID_QUANTILE_RATIO = -1;
 
 double compression;
diff --git a/src/kylin-it/src/test/java/org/apache/kylin/util/ExecAndComp.java 
b/src/kylin-it/src/test/java/org/apache/kylin/util/ExecAndComp.java
index 34126ab7f4..d089e9e34a 100644
--- a/src/kylin-it/src/test/java/org/apache/kylin/util/ExecAndComp.java
+++ b/src/kylin-it/src/test/java/org/apache/kylin/util/ExecAndComp.java
@@ -135,27 +135,37 @@ public class ExecAndComp {
 
 @SneakyThrows
 public static QueryResult queryWithSpark(String prj, String originSql, 
String joinType, String sqlPath) {
+return queryWithSpark(prj, originSql, joinType, sqlPath, true);
+}
+
+@SneakyThrows
+public static QueryResult queryWithSpark(String prj, String originSql, 
String joinType, String sqlPath,
+boolean withCache) {
 int index = sqlPath.lastIndexOf('/');
 String resultFilePath = "";
 String schemaFilePath = "";
-if (index > 0) {
-resultFilePath = sqlPath.substring(0, index) + "/result-" + 
joinType + sqlPath.substring(index) + ".json";
-schemaFilePath = sqlPath.substring(0, index) + "/result-" + 
joinType + sqlPath.substring(index) + ".schema";
-}
+if (withCache) {
+if (index > 0) {
+resultFilePath = sqlPath.substring(0, index) + "/result-" + 
joinType + sqlPath.substring(index)
++ ".json";
+schemaFilePath = sqlPath.substring(0, index) + "/result-" + 
joinType + sqlPath.substring(index)
++ ".schema";
+}
 
-// query with cache
-try {
-if (index > 0 && Files.exists(Paths.get(resultFilePath)) && 
Files.exists(Paths.get(schemaFilePath))) {
-StructType schema = StructType.fromDDL(new 
String(Files.readAllBytes(Paths.get(schemaFilePath;
-List structs = Arrays.stream(schema.fields())
-
.map(SparderTypeUtil::convertSparkFieldToJavaField).collect(Collectors.toList());
-Dataset ds = 
SparderEnv.getSparkSession().read().schema(schema).json(resultFilePath);

(kylin) 11/18: KYLIN-5785 Support implicit query of split function

2024-04-09 Thread liyang
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 d7d80985987a344c0a49909cd8d8584829015082
Author: Pengfei Zhan 
AuthorDate: Wed Aug 9 19:33:45 2023 +0800

KYLIN-5785 Support implicit query of split function

1. support split('aaa-bbb-ccc', '-')[0] implicit query
2. support simplify not(true/false) to false/true
---
 pom.xml  |  2 +-
 .../org/apache/kylin/query/engine/QueryRoutingEngine.java| 12 
 .../main/java/org/apache/kylin/query/udf/SparkStringUDF.java |  6 --
 .../org/apache/kylin/query/runtime/ExpressionConverter.scala |  2 ++
 4 files changed, 7 insertions(+), 15 deletions(-)

diff --git a/pom.xml b/pom.xml
index 2138ca85f8..71763ea249 100644
--- a/pom.xml
+++ b/pom.xml
@@ -135,7 +135,7 @@
 0.3.0
 
 
-1.116.0-kylin-4.x-r034
+1.116.0-kylin-4.x-r035
 4.x_1.10-r01
 
 
diff --git 
a/src/query/src/main/java/org/apache/kylin/query/engine/QueryRoutingEngine.java 
b/src/query/src/main/java/org/apache/kylin/query/engine/QueryRoutingEngine.java
index 081edc0d0a..0e3f86b399 100644
--- 
a/src/query/src/main/java/org/apache/kylin/query/engine/QueryRoutingEngine.java
+++ 
b/src/query/src/main/java/org/apache/kylin/query/engine/QueryRoutingEngine.java
@@ -40,7 +40,6 @@ import org.apache.kylin.common.KylinConfig;
 import org.apache.kylin.common.QueryContext;
 import org.apache.kylin.common.QueryTrace;
 import org.apache.kylin.common.debug.BackdoorToggles;
-import org.apache.kylin.common.exception.CalciteNotSupportException;
 import org.apache.kylin.common.exception.KylinException;
 import org.apache.kylin.common.exception.NewQueryRefuseException;
 import org.apache.kylin.common.exception.TargetSegmentNotFoundException;
@@ -141,8 +140,6 @@ public class QueryRoutingEngine {
 return handleTransactionException(queryParams, e);
 } catch (SQLException e) {
 return handleSqlException(queryParams, e);
-} catch (AssertionError e) {
-return handleAssertionError(queryParams, e);
 } finally {
 QueryResultMasks.remove();
 }
@@ -183,15 +180,6 @@ public class QueryRoutingEngine {
 throw e;
 }
 
-private QueryResult handleAssertionError(QueryParams queryParams, 
AssertionError e) throws SQLException {
-// for example: split('abc', 'b') will jump into this AssertionError
-if (e.getMessage().equals("OTHER")) {
-SQLException ex = new SQLException(e.getMessage(), new 
CalciteNotSupportException());
-return pushDownQuery(ex, queryParams);
-}
-throw e;
-}
-
 public boolean checkIfRetryQuery(Throwable cause) {
 if (TargetSegmentNotFoundException.causedBySegmentNotFound(cause)
 && QueryContext.current().getMetrics().getRetryTimes() == 0) {
diff --git 
a/src/query/src/main/java/org/apache/kylin/query/udf/SparkStringUDF.java 
b/src/query/src/main/java/org/apache/kylin/query/udf/SparkStringUDF.java
index 5ce28e9851..867ffbefe1 100644
--- a/src/query/src/main/java/org/apache/kylin/query/udf/SparkStringUDF.java
+++ b/src/query/src/main/java/org/apache/kylin/query/udf/SparkStringUDF.java
@@ -18,6 +18,8 @@
 
 package org.apache.kylin.query.udf;
 
+import java.util.List;
+
 import org.apache.calcite.linq4j.function.Parameter;
 import org.apache.calcite.sql.type.NotConstant;
 import org.apache.kylin.common.exception.CalciteNotSupportException;
@@ -90,12 +92,12 @@ public class SparkStringUDF implements NotConstant {
 throw new CalciteNotSupportException();
 }
 
-public String[] SPLIT(@Parameter(name = "str") Object str, @Parameter(name 
= "regex") Object regex)
+public List SPLIT(@Parameter(name = "str") Object str, 
@Parameter(name = "regex") Object regex)
 throws CalciteNotSupportException {
 throw new CalciteNotSupportException();
 }
 
-public String[] SPLIT(@Parameter(name = "str") Object str, @Parameter(name 
= "regex") Object regex,
+public List SPLIT(@Parameter(name = "str") Object str, 
@Parameter(name = "regex") Object regex,
 @Parameter(name = "limit") Object limit) throws 
CalciteNotSupportException {
 throw new CalciteNotSupportException();
 }
diff --git 
a/src/spark-project/sparder/src/main/scala/org/apache/kylin/query/runtime/ExpressionConverter.scala
 
b/src/spark-project/sparder/src/main/scala/org/apache/kylin/query/runtime/ExpressionConverter.scala
index d08a37d450..04afba3c94 100644
--- 
a/src/spark-project/sparder/src/main/scala/org/apache/kylin/query/runtime/ExpressionConverter.scala
+++ 
b/src/spark-project/sparder/src/main/scala/org/apache/kylin/query/runtime/ExpressionConverter.scala
@@ -42

(kylin) 16/18: KYLIN-5790 Security of kafka-clients

2024-04-09 Thread liyang
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 2695c5da83d9ccfb2a3177b9947e6eda4e6c1715
Author: sibingzhang <74443791+sibingzh...@users.noreply.github.com>
AuthorDate: Fri Aug 25 15:18:08 2023 +0800

KYLIN-5790 Security of kafka-clients

Co-authored-by: sibing.zhang 
---
 .../java/org/apache/kylin/rest/KafkaCondition.java | 32 ++
 .../apache/kylin/rest/service/KafkaService.java|  8 --
 .../apache/kylin/rest/service/TableService.java|  2 +-
 .../kylin/rest/controller/KafkaController.java |  2 +-
 4 files changed, 39 insertions(+), 5 deletions(-)

diff --git 
a/src/datasource-service/src/main/java/org/apache/kylin/rest/KafkaCondition.java
 
b/src/datasource-service/src/main/java/org/apache/kylin/rest/KafkaCondition.java
new file mode 100644
index 00..c4388b8cd4
--- /dev/null
+++ 
b/src/datasource-service/src/main/java/org/apache/kylin/rest/KafkaCondition.java
@@ -0,0 +1,32 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.kylin.rest;
+
+import org.apache.kylin.common.KylinConfig;
+import org.springframework.context.annotation.Condition;
+import org.springframework.context.annotation.ConditionContext;
+import org.springframework.core.type.AnnotatedTypeMetadata;
+
+public class KafkaCondition implements Condition {
+@Override
+public boolean matches(ConditionContext context, AnnotatedTypeMetadata 
metadata) {
+KylinConfig config = KylinConfig.getInstanceFromEnv();
+return config.streamingEnabled();
+}
+}
diff --git 
a/src/datasource-service/src/main/java/org/apache/kylin/rest/service/KafkaService.java
 
b/src/datasource-service/src/main/java/org/apache/kylin/rest/service/KafkaService.java
index 2fec7df8cc..496f2f90ad 100644
--- 
a/src/datasource-service/src/main/java/org/apache/kylin/rest/service/KafkaService.java
+++ 
b/src/datasource-service/src/main/java/org/apache/kylin/rest/service/KafkaService.java
@@ -40,26 +40,28 @@ import org.apache.kafka.common.errors.TimeoutException;
 import org.apache.kylin.common.exception.KylinException;
 import org.apache.kylin.common.msg.MsgPicker;
 import org.apache.kylin.common.util.HadoopUtil;
+import org.apache.kylin.guava30.shaded.common.collect.Maps;
+import org.apache.kylin.guava30.shaded.common.collect.Sets;
 import org.apache.kylin.loader.ParserClassLoaderState;
 import org.apache.kylin.metadata.jar.JarInfoManager;
 import org.apache.kylin.metadata.project.EnhancedUnitOfWork;
 import org.apache.kylin.metadata.streaming.DataParserInfo;
 import org.apache.kylin.metadata.streaming.DataParserManager;
 import org.apache.kylin.metadata.streaming.KafkaConfig;
+import org.apache.kylin.rest.KafkaCondition;
 import org.apache.kylin.rest.util.AclEvaluate;
 import org.apache.kylin.sample.KafkaSourceHandler;
 import org.apache.kylin.sample.StreamingSourceHandler;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Conditional;
 import org.springframework.stereotype.Component;
 
-import org.apache.kylin.guava30.shaded.common.collect.Maps;
-
-import org.apache.kylin.guava30.shaded.common.collect.Sets;
 import lombok.SneakyThrows;
 import lombok.extern.slf4j.Slf4j;
 
 @Slf4j
 @Component("kafkaService")
+@Conditional(KafkaCondition.class)
 public class KafkaService extends BasicService {
 
 @Autowired
diff --git 
a/src/datasource-service/src/main/java/org/apache/kylin/rest/service/TableService.java
 
b/src/datasource-service/src/main/java/org/apache/kylin/rest/service/TableService.java
index b6498f1a6f..b2ae72706b 100644
--- 
a/src/datasource-service/src/main/java/org/apache/kylin/rest/service/TableService.java
+++ 
b/src/datasource-service/src/main/java/org/apache/kylin/rest/service/TableService.java
@@ -217,7 +217,7 @@ public class TableService extends BasicService {
 @Autowired
 private AccessService accessService;
 
-@Autowired
+@Autowired(required = false)
 @Qualifier("kafkaService")
 private KafkaService kafkaService;
 
diff --git 
a/src/metadata-server/

(kylin) 06/18: KYLIN-5781 Adjust the query result order of sql with union

2024-04-09 Thread liyang
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 cb2a11d503f4d857b236ea62152d606d5c8d5fe7
Author: Zhiting Guo <35057824+fre...@users.noreply.github.com>
AuthorDate: Fri Aug 11 11:29:19 2023 +0800

KYLIN-5781 Adjust the query result order of sql with union

Co-authored-by: Zhiting Guo 
---
 .../main/java/org/apache/kylin/common/KylinConfigBase.java|  4 
 .../org/apache/kylin/query/runtime/CalciteToSparkPlaner.scala | 11 +++
 2 files changed, 11 insertions(+), 4 deletions(-)

diff --git 
a/src/core-common/src/main/java/org/apache/kylin/common/KylinConfigBase.java 
b/src/core-common/src/main/java/org/apache/kylin/common/KylinConfigBase.java
index f48c808cdc..eddb15bffa 100644
--- a/src/core-common/src/main/java/org/apache/kylin/common/KylinConfigBase.java
+++ b/src/core-common/src/main/java/org/apache/kylin/common/KylinConfigBase.java
@@ -1914,6 +1914,10 @@ public abstract class KylinConfigBase implements 
Serializable {
 return 
Boolean.parseBoolean(this.getOptional("kylin.query.replace-dynamic-params-enabled",
 FALSE));
 }
 
+public boolean isCollectUnionInOrder() {
+return 
Boolean.parseBoolean(this.getOptional("kylin.query.collect-union-in-order", 
TRUE));
+}
+
 // 

 // Cache
 // 

diff --git 
a/src/spark-project/sparder/src/main/scala/org/apache/kylin/query/runtime/CalciteToSparkPlaner.scala
 
b/src/spark-project/sparder/src/main/scala/org/apache/kylin/query/runtime/CalciteToSparkPlaner.scala
index bab69339b4..76e9940270 100644
--- 
a/src/spark-project/sparder/src/main/scala/org/apache/kylin/query/runtime/CalciteToSparkPlaner.scala
+++ 
b/src/spark-project/sparder/src/main/scala/org/apache/kylin/query/runtime/CalciteToSparkPlaner.scala
@@ -19,13 +19,13 @@
 package org.apache.kylin.query.runtime
 
 import java.util
+import java.util.Collections
 
-import org.apache.kylin.guava30.shaded.common.collect.Lists
-import org.apache.kylin.engine.spark.utils.LogEx
 import org.apache.calcite.DataContext
 import org.apache.calcite.rel.{RelNode, RelVisitor}
 import org.apache.kylin.common.KylinConfig
 import org.apache.kylin.engine.spark.utils.LogEx
+import org.apache.kylin.guava30.shaded.common.collect.Lists
 import org.apache.kylin.query.relnode.{KapAggregateRel, KapFilterRel, 
KapJoinRel, KapLimitRel, KapMinusRel, KapModelViewRel, KapNonEquiJoinRel, 
KapProjectRel, KapRel, KapSortRel, KapTableScan, KapUnionRel, KapValuesRel, 
KapWindowRel}
 import org.apache.kylin.query.runtime.plan.{AggregatePlan, FilterPlan, 
LimitPlan, ProjectPlan, SortPlan, TableScanPlan, ValuesPlan, WindowPlan}
 import org.apache.kylin.query.util.KapRelUtil
@@ -84,8 +84,11 @@ class CalciteToSparkPlaner(dataContext: DataContext) extends 
RelVisitor with Log
   case rel: KapNonEquiJoinRel => convertNonEquiJoinRel(rel)
   case rel: KapUnionRel =>
 val size = setOpStack.pop()
-val java = Range(0, stack.size() - size).map(a => stack.pop()).asJava
-logTime("union") { plan.UnionPlan.union(Lists.newArrayList(java), rel, 
dataContext) }
+var unionBlocks = Range(0, stack.size() - size).map(a => stack.pop())
+if (KylinConfig.getInstanceFromEnv.isCollectUnionInOrder) {
+  unionBlocks = unionBlocks.reverse
+}
+logTime("union") { plan.UnionPlan.union(unionBlocks.asJava, rel, 
dataContext) }
   case rel: KapMinusRel =>
 val size = setOpStack.pop()
 logTime("minus") { plan.MinusPlan.minus(Range(0, stack.size() - 
size).map(a => stack.pop()).reverse, rel, dataContext) }



(kylin) 03/18: KYLIN-5777 Change spark.yarn.submit.file.replication from 1 to 3

2024-04-09 Thread liyang
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 a67e854a1d598eead4d39c10ae4295c70a94e74d
Author: Yaguang Jia 
AuthorDate: Tue Aug 8 17:18:25 2023 +0800

KYLIN-5777 Change spark.yarn.submit.file.replication from 1 to 3
---
 src/common-booter/src/main/resources/config/init.properties   | 2 +-
 src/core-common/src/main/resources/kylin-defaults0.properties | 2 +-
 src/data-loading-booter/src/main/resources/config/init.properties | 2 +-
 src/query-booter/src/main/resources/config/init.properties| 2 +-
 src/server/src/main/resources/config/init.properties  | 2 +-
 5 files changed, 5 insertions(+), 5 deletions(-)

diff --git a/src/common-booter/src/main/resources/config/init.properties 
b/src/common-booter/src/main/resources/config/init.properties
index 14ad876715..f0ce35de8e 100644
--- a/src/common-booter/src/main/resources/config/init.properties
+++ b/src/common-booter/src/main/resources/config/init.properties
@@ -56,7 +56,7 @@ kylin.server.cors.allow-all=false
 #  JOB EXECUTION 
 
 ### Spark conf overwrite for build engine
-kylin.engine.spark-conf.spark.yarn.submit.file.replication=1
+kylin.engine.spark-conf.spark.yarn.submit.file.replication=3
 kylin.engine.spark-conf.spark.yarn.queue=default
 kylin.engine.spark-conf.spark.driver.host=${HOST_IP}
 kylin.engine.spark-conf.spark.driver.memoryOverhead=256
diff --git a/src/core-common/src/main/resources/kylin-defaults0.properties 
b/src/core-common/src/main/resources/kylin-defaults0.properties
index 61412133ec..b10ef59365 100644
--- a/src/core-common/src/main/resources/kylin-defaults0.properties
+++ b/src/core-common/src/main/resources/kylin-defaults0.properties
@@ -61,7 +61,7 @@ kylin.server.cors.allow-all=false
 #  JOB EXECUTION 
 
 ### Spark conf overwrite for build engine
-kylin.engine.spark-conf.spark.yarn.submit.file.replication=1
+kylin.engine.spark-conf.spark.yarn.submit.file.replication=3
 kylin.engine.spark-conf.spark.yarn.queue=default
 kylin.engine.spark-conf.spark.driver.memoryOverhead=256
 #kylin.engine.spark-conf.spark.driver.memory=512m
diff --git a/src/data-loading-booter/src/main/resources/config/init.properties 
b/src/data-loading-booter/src/main/resources/config/init.properties
index 14ad876715..f0ce35de8e 100644
--- a/src/data-loading-booter/src/main/resources/config/init.properties
+++ b/src/data-loading-booter/src/main/resources/config/init.properties
@@ -56,7 +56,7 @@ kylin.server.cors.allow-all=false
 #  JOB EXECUTION 
 
 ### Spark conf overwrite for build engine
-kylin.engine.spark-conf.spark.yarn.submit.file.replication=1
+kylin.engine.spark-conf.spark.yarn.submit.file.replication=3
 kylin.engine.spark-conf.spark.yarn.queue=default
 kylin.engine.spark-conf.spark.driver.host=${HOST_IP}
 kylin.engine.spark-conf.spark.driver.memoryOverhead=256
diff --git a/src/query-booter/src/main/resources/config/init.properties 
b/src/query-booter/src/main/resources/config/init.properties
index 14ad876715..f0ce35de8e 100644
--- a/src/query-booter/src/main/resources/config/init.properties
+++ b/src/query-booter/src/main/resources/config/init.properties
@@ -56,7 +56,7 @@ kylin.server.cors.allow-all=false
 #  JOB EXECUTION 
 
 ### Spark conf overwrite for build engine
-kylin.engine.spark-conf.spark.yarn.submit.file.replication=1
+kylin.engine.spark-conf.spark.yarn.submit.file.replication=3
 kylin.engine.spark-conf.spark.yarn.queue=default
 kylin.engine.spark-conf.spark.driver.host=${HOST_IP}
 kylin.engine.spark-conf.spark.driver.memoryOverhead=256
diff --git a/src/server/src/main/resources/config/init.properties 
b/src/server/src/main/resources/config/init.properties
index e705611a5a..ff253daebb 100644
--- a/src/server/src/main/resources/config/init.properties
+++ b/src/server/src/main/resources/config/init.properties
@@ -56,7 +56,7 @@ kylin.server.cors.allow-all=false
 #  JOB EXECUTION 
 
 ### Spark conf overwrite for build engine
-kylin.engine.spark-conf.spark.yarn.submit.file.replication=1
+kylin.engine.spark-conf.spark.yarn.submit.file.replication=3
 kylin.engine.spark-conf.spark.yarn.queue=default
 kylin.engine.spark-conf.spark.driver.host=${HOST_IP}
 kylin.engine.spark-conf.spark.driver.memoryOverhead=256



(kylin) 01/18: KYLIN-5775 upgrade testcontainers to 1.16.2

2024-04-09 Thread liyang
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 8ab87c93b9d6e2208bffa71845270841313faf1e
Author: liang.huang <83992752+lhuang09287...@users.noreply.github.com>
AuthorDate: Thu Jul 27 16:53:19 2023 +0800

KYLIN-5775 upgrade testcontainers to 1.16.2
---
 pom.xml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/pom.xml b/pom.xml
index 8f969b9a14..645b569fcc 100644
--- a/pom.xml
+++ b/pom.xml
@@ -232,7 +232,7 @@
 
 
 
3.1.1
-1.15.3
+1.16.2
 
 2.4.21
 1.7.26



(kylin) 02/18: KYLIN-5776 Support parameter type is string for timestampadd function

2024-04-09 Thread liyang
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 5d781d1917ec261a95971086f8d8540afc8434fb
Author: liang.huang <83992752+lhuang09287...@users.noreply.github.com>
AuthorDate: Thu Aug 3 15:03:42 2023 +0800

KYLIN-5776 Support parameter type is string for timestampadd function
---
 pom.xml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/pom.xml b/pom.xml
index 645b569fcc..2138ca85f8 100644
--- a/pom.xml
+++ b/pom.xml
@@ -135,7 +135,7 @@
 0.3.0
 
 
-1.116.0-kylin-4.x-r033
+1.116.0-kylin-4.x-r034
 4.x_1.10-r01
 
 



(kylin) 13/18: KYLIN-5774 Optimize Calcite plan to convert spark logical plan

2024-04-09 Thread liyang
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 9db3502f80265753b38b4ecbb0ee57f7871b6466
Author: Mingming Ge <7mmi...@gmail.com>
AuthorDate: Mon Aug 7 19:02:02 2023 +0800

KYLIN-5774 Optimize Calcite plan to convert spark logical plan
---
 pom.xml|   4 +
 .../org/apache/kylin/common/KylinConfigBase.java   |   4 -
 .../src/main/resources/kylin-defaults0.properties  |   1 -
 .../kylin/newten/EnhancedAggPushDownTest.java  |   2 +-
 .../kylin/newten/SpecialColumnNamesTest.java   | 104 ++
 .../apache/kylin/query/engine/QueryExecTest.java   |  59 +---
 .../_global/project/special_column_names.json  |  35 +
 .../c41390c5-b35d-4db3-b167-029874b85a2c.json  |  13 ++
 .../c41390c5-b35d-4db3-b167-029874b85a2c.json  |  63 
 .../c41390c5-b35d-4db3-b167-029874b85a2c.json  | 158 +
 .../special_column_names/table/SSB.CUSTOMER.json   |  68 +
 .../table/SSB.P_LINEORDER.json | 118 +++
 .../kylin/query/runtime/CalciteToSparkPlaner.scala | 121 +---
 .../kylin/query/runtime/SparderRexVisitor.scala|  37 ++---
 .../apache/kylin/query/runtime/SparkEngine.java|   8 +-
 .../kylin/query/runtime/plan/AggregatePlan.scala   |  87 +++-
 .../kylin/query/runtime/plan/FilterPlan.scala  |  25 ++--
 .../apache/kylin/query/runtime/plan/JoinPlan.scala |  58 
 .../kylin/query/runtime/plan/LimitPlan.scala   |  25 ++--
 .../kylin/query/runtime/plan/MinusPlan.scala   |  14 +-
 .../kylin/query/runtime/plan/ProjectPlan.scala |  19 +--
 .../kylin/query/runtime/plan/ResultPlan.scala  |   3 +-
 .../apache/kylin/query/runtime/plan/SortPlan.scala |  52 ---
 .../kylin/query/runtime/plan/TableScanPlan.scala   | 118 +++
 .../kylin/query/runtime/plan/UnionPlan.scala   |  30 ++--
 .../kylin/query/runtime/plan/ValuesPlan.scala  |  15 +-
 .../kylin/query/runtime/plan/WindowPlan.scala  |  29 ++--
 .../apache/kylin/query/util/RuntimeHelper.scala|  31 ++--
 .../kylin/query/util/SparderDerivedUtil.scala  |  52 ---
 .../apache/spark/sql/KylinDataFrameManager.scala   |  19 ++-
 .../org/apache/spark/sql/SparkOperation.scala  |  64 ++---
 .../sql/execution/utils/SchemaProcessor.scala  |  36 ++---
 .../spark/sql/manager/SparderLookupManager.scala   |  69 -
 .../kylin/query/sql/KylinDataFrameManagerTest.java |  32 +++--
 .../query/runtime/plan/SegmentEmptyTest.scala  |  38 ++---
 .../org/apache/spark/sql/SparkInternalAgent.scala  |   0
 .../sql/datasource/storage/StorageStore.scala  |  73 +-
 .../scala/org/apache/kylin/common/JobSupport.scala |   7 +-
 38 files changed, 1104 insertions(+), 587 deletions(-)

diff --git a/pom.xml b/pom.xml
index 71763ea249..dac240b005 100644
--- a/pom.xml
+++ b/pom.xml
@@ -1509,6 +1509,10 @@
 org.codehaus.jackson
 jackson-mapper-asl
 
+
+org.apache.calcite
+calcite
+
 
 provided
 
diff --git 
a/src/core-common/src/main/java/org/apache/kylin/common/KylinConfigBase.java 
b/src/core-common/src/main/java/org/apache/kylin/common/KylinConfigBase.java
index 5bfe8c262a..c1dd5379e3 100644
--- a/src/core-common/src/main/java/org/apache/kylin/common/KylinConfigBase.java
+++ b/src/core-common/src/main/java/org/apache/kylin/common/KylinConfigBase.java
@@ -1906,10 +1906,6 @@ public abstract class KylinConfigBase implements 
Serializable {
 return 
Boolean.parseBoolean(this.getOptional("kylin.query.schema-cache-enabled", 
FALSE));
 }
 
-public boolean isDataFrameCacheEnabled() {
-return 
Boolean.parseBoolean(this.getOptional("kylin.query.dataframe-cache-enabled", 
TRUE));
-}
-
 public boolean enableReplaceDynamicParams() {
 return 
Boolean.parseBoolean(this.getOptional("kylin.query.replace-dynamic-params-enabled",
 FALSE));
 }
diff --git a/src/core-common/src/main/resources/kylin-defaults0.properties 
b/src/core-common/src/main/resources/kylin-defaults0.properties
index b10ef59365..56cd346578 100644
--- a/src/core-common/src/main/resources/kylin-defaults0.properties
+++ b/src/core-common/src/main/resources/kylin-defaults0.properties
@@ -232,7 +232,6 @@ kylin.query.join-match-optimization-enabled=false
 kylin.query.convert-count-distinct-expression-enabled=false
 kylin.query.memory-limit-during-collect-mb=5400
 kylin.query.cartesian-partition-num-threshold-factor=100
-kylin.query.dataframe-cache-enabled=true
 
 # spark context canary to monitor spark
 kylin.canary.sqlcontext-enabled=false
diff --git 
a/src/kylin-it/src/test/java/org/apache/kylin/newten/EnhancedAggPu

(kylin) 18/18: KYLIN-5778 Upgrade spark to 3.2.0-kylin-4.6.14.0

2024-04-09 Thread liyang
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 4ed37293122dc700483fceafdd085b8058a436bf
Author: Yaguang Jia 
AuthorDate: Thu Aug 10 10:09:33 2023 +0800

KYLIN-5778 Upgrade spark to 3.2.0-kylin-4.6.14.0

Add parquet footer read cache
---
 pom.xml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/pom.xml b/pom.xml
index dac240b005..ccbdfbae22 100644
--- a/pom.xml
+++ b/pom.xml
@@ -126,7 +126,7 @@
 
 2.0.2
 
-3.2.0-kylin-4.6.13.0
+3.2.0-kylin-4.6.14.0
 
 0.9.2-kylin-r4
 



(kylin) 09/18: Add some code to compatible with the enterprise version

2024-04-09 Thread liyang
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 40a10818a045b1ec5e909df12f7365f7679eae9a
Author: lixiang <447399...@qq.com>
AuthorDate: Fri Aug 11 11:48:41 2023 +0800

Add some code to compatible with the enterprise version

-
Co-authored-by: Zhiting Guo 
---
 .../common/exception/code/ErrorCodeServer.java |   3 +
 .../resources/kylin_error_msg_conf_cn.properties   |   3 +
 .../resources/kylin_error_msg_conf_en.properties   |   3 +
 .../kylin_error_suggestion_conf_cn.properties  |   3 +
 .../kylin_error_suggestion_conf_en.properties  |   3 +
 .../main/resources/kylin_errorcode_conf.properties |   3 +
 .../apache/kylin/metadata/model/NDataModel.java|   9 ++
 .../recommendation/entity/DimensionRecItemV2.java  |  17 +++-
 .../kylin/rest/controller/SegmentController.java   |   6 +-
 .../rest/controller/SegmentControllerTest.java |  43 -
 .../kylin/rest/controller/NModelController.java|  11 ++-
 .../rest/controller/NModelControllerTest.java  | 107 -
 .../org/apache/kylin/rest/util/ModelUtils.java |  36 ++-
 13 files changed, 234 insertions(+), 13 deletions(-)

diff --git 
a/src/core-common/src/main/java/org/apache/kylin/common/exception/code/ErrorCodeServer.java
 
b/src/core-common/src/main/java/org/apache/kylin/common/exception/code/ErrorCodeServer.java
index 26f558be38..f2562e3a9f 100644
--- 
a/src/core-common/src/main/java/org/apache/kylin/common/exception/code/ErrorCodeServer.java
+++ 
b/src/core-common/src/main/java/org/apache/kylin/common/exception/code/ErrorCodeServer.java
@@ -37,6 +37,8 @@ public enum ErrorCodeServer implements ErrorCodeProducer {
 MODEL_SUM_LC_INVALID_DATA_TYPE("KE-010002303"),
 MODEL_SUM_LC_INVALID_TIMESTAMP_TYPE("KE-010002304"),
 MODEL_NAME_TOO_LONG("KE-010002305"),
+MODEL_SECOND_STORAGE_PARTITION_INVALID("KE-010002306"),
+PARTITION_SECOND_STORAGE_PARTITION_INVALID("KE-010002307"),
 
 // 100252XX Cube
 CUBE_NOT_EXIST("KE-010025201"),
@@ -64,6 +66,7 @@ public enum ErrorCodeServer implements ErrorCodeProducer {
 SEGMENT_INDEX_CONFLICT_PARAMETER("KE-01000"),
 SEGMENT_INDEX_STATUS_INVALID("KE-01001"),
 SEGMENT_SINGLE_JOB_THRESHOLD("KE-01002"),
+SEGMENT_SECOND_STORAGE_PARTITION_INVALID("KE-01003"),
 
 // 100072XX table
 TABLE_RELOAD_MODEL_RETRY("KE-010007204"),
diff --git 
a/src/core-common/src/main/resources/kylin_error_msg_conf_cn.properties 
b/src/core-common/src/main/resources/kylin_error_msg_conf_cn.properties
index ffb3f55714..010c2b10c3 100644
--- a/src/core-common/src/main/resources/kylin_error_msg_conf_cn.properties
+++ b/src/core-common/src/main/resources/kylin_error_msg_conf_cn.properties
@@ -37,6 +37,8 @@ KE-010002302=模型中的列名 %s 与度量名 %s 重复,无法导出 TDS。
 KE-010002303=SUM_LC度量的返回类型 '%s' 不合法。返回类型必须是这其中的一个:%s。
 KE-010002304=SUM_LC度量的时间类型 '%s' 不合法。
 KE-010002305=模型名称最长 127 字符,请修改后重试。
+KE-010002306=无法保存模型。当增量加载的模型开启分层存储时,必须将时间分区列加入维度。
+KE-010002307=无法保存分区设置。当增量加载的模型开启分层存储时,必须将时间分区列加入维度。
 
 ## 100252XX Cube
 KE-010025201=无法找到相关 Cube。
@@ -64,6 +66,7 @@ KE-010022219=当前 Segments 所包含的分区不一致,请先构建分区并
 KE-01000=index_ids或index_status不能同时设置,请修改后重试。
 KE-01001=索引状态错误,请输入正确的索引状态(NO_BUILD, ONLINE, BUILDING)后重试。
 KE-01002=单个任务中最多包含100个Segments,请修改后重试。
+KE-01003=无法构建索引。当增量加载的模型开启分层存储时,必须将时间分区列加入维度。
 
 ## 100072XX table
 KE-010007204=源表 %1$s 中列 %2$s 的数据类型发生变更。请从模型 %3$s 中删除该列,或修改该列的数据类型。
diff --git 
a/src/core-common/src/main/resources/kylin_error_msg_conf_en.properties 
b/src/core-common/src/main/resources/kylin_error_msg_conf_en.properties
index b2bcbac2bd..75f05b384b 100644
--- a/src/core-common/src/main/resources/kylin_error_msg_conf_en.properties
+++ b/src/core-common/src/main/resources/kylin_error_msg_conf_en.properties
@@ -37,6 +37,8 @@ KE-010002302=There are duplicated names among model column %s 
and measure name %
 KE-010002303=SUM_LC Measure's return type '%s' is illegal. It must be one of 
%s.
 KE-010002304=SUM_LC Measure's time column type '%s' is illegal.
 KE-010002305=The maximum length of the model name is 127 characters, please 
modify and try again.
+KE-010002306=Can't save the model. When the model uses incremental load method 
and the tiered storage is ON, the time partition column must be added as a 
dimension.
+KE-010002307=Can't save the model partition. When the model uses incremental 
load method and the tiered storage is ON, the time partition column must be 
added as a dimension.
 
 ## 100252XX Cube
 KE-010025201=Can't find the cube.
@@ -64,6 +66,7 @@ KE-010022219=The partitions included in the selected segments 
are not consistent
 KE-01000=Index_ids or index_status can not be set at the same time, please 
modify and try again.
 KE-01001=The index status is

(kylin) 10/18: KYLIN-5784 Optimization for query history filters

2024-04-09 Thread liyang
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 1367e9ccff65ece51e57c654380d526c472ed2fb
Author: lixiang <447399...@qq.com>
AuthorDate: Fri Aug 11 11:48:59 2023 +0800

KYLIN-5784 Optimization for query history filters
---
 .../kylin/rest/service/QueryHistoryService.java| 27 --
 .../rest/service/QueryHistoryServiceTest.java  |  6 ++---
 2 files changed, 18 insertions(+), 15 deletions(-)

diff --git 
a/src/query-service/src/main/java/org/apache/kylin/rest/service/QueryHistoryService.java
 
b/src/query-service/src/main/java/org/apache/kylin/rest/service/QueryHistoryService.java
index 0200c2f080..0c947c8de1 100644
--- 
a/src/query-service/src/main/java/org/apache/kylin/rest/service/QueryHistoryService.java
+++ 
b/src/query-service/src/main/java/org/apache/kylin/rest/service/QueryHistoryService.java
@@ -18,7 +18,11 @@
 
 package org.apache.kylin.rest.service;
 
+import static org.apache.kylin.common.QueryContext.PUSHDOWN_OBJECT_STORAGE;
 import static 
org.apache.kylin.common.exception.code.ErrorCodeServer.PROJECT_NOT_EXIST;
+import static 
org.apache.kylin.metadata.query.QueryHistory.EngineType.CONSTANTS;
+import static org.apache.kylin.metadata.query.QueryHistory.EngineType.HIVE;
+import static org.apache.kylin.metadata.query.QueryHistory.EngineType.RDBMS;
 import static 
org.apache.kylin.metadata.query.RDBMSQueryHistoryDAO.fillZeroForQueryStatistics;
 
 import java.lang.reflect.Field;
@@ -35,6 +39,7 @@ import java.util.Map;
 import java.util.TimeZone;
 import java.util.concurrent.Future;
 import java.util.concurrent.TimeUnit;
+import java.util.function.Predicate;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 import java.util.stream.Collectors;
@@ -269,26 +274,24 @@ public class QueryHistoryService extends BasicService 
implements AsyncTaskQueryH
 }
 
 public QueryHistoryFiltersResponse 
getQueryHistoryModels(QueryHistoryRequest request, int size) {
-QueryHistoryDAO queryHistoryDAO = getQueryHistoryDao();
-List queryStatistics = 
queryHistoryDAO.getQueryHistoriesModelIds(request);
 val dataFlowManager = 
NDataflowManager.getInstance(KylinConfig.getInstanceFromEnv(), 
request.getProject());
-Stream engineStream = 
queryStatistics.stream().map(QueryStatistics::getEngineType);
 List models = dataFlowManager.listAllDataflows();
-Stream modelStream = models.stream()
+List modelList = models.stream()
 .sorted(Comparator.comparing(NDataflow::getQueryHitCount, 
Comparator.reverseOrder()))
-.map(NDataflow::getModel).map(NDataModel::getAlias);
-List engineList = filterByName(engineStream, 
request.getFilterModelName());
-List modelList = filterByName(modelStream, 
request.getFilterModelName());
+
.map(NDataflow::getModel).map(NDataModel::getAlias).filter(filterByName(request.getFilterModelName()))
+.collect(Collectors.toList());
+
+List engineList = Stream.of(HIVE.name(), RDBMS.name(), 
CONSTANTS.name(), PUSHDOWN_OBJECT_STORAGE)
+
.filter(filterByName(request.getFilterModelName())).collect(Collectors.toList());
+
 Integer count = engineList.size() + modelList.size();
 return new QueryHistoryFiltersResponse(count, models.size(), 
engineList,
 modelList.stream().limit(size).collect(Collectors.toList()));
 }
 
-private List filterByName(Stream stream, String name) {
-return stream
-.filter(alias -> !StringUtils.isEmpty(alias) && 
(StringUtils.isEmpty(name)
-|| 
alias.toLowerCase(Locale.ROOT).contains(name.toLowerCase(Locale.ROOT
-.collect(Collectors.toList());
+private Predicate filterByName(String name) {
+return alias -> !StringUtils.isEmpty(alias) && 
(StringUtils.isEmpty(name)
+|| 
alias.toLowerCase(Locale.ROOT).contains(name.toLowerCase(Locale.ROOT)));
 }
 
 private boolean haveSpaces(String text) {
diff --git 
a/src/query-service/src/test/java/org/apache/kylin/rest/service/QueryHistoryServiceTest.java
 
b/src/query-service/src/test/java/org/apache/kylin/rest/service/QueryHistoryServiceTest.java
index e93b35dcce..ddc67f464c 100644
--- 
a/src/query-service/src/test/java/org/apache/kylin/rest/service/QueryHistoryServiceTest.java
+++ 
b/src/query-service/src/test/java/org/apache/kylin/rest/service/QueryHistoryServiceTest.java
@@ -721,11 +721,11 @@ public class QueryHistoryServiceTest extends 
NLocalFileMetadataTestCase {
 
Mockito.doReturn(queryHistoryDAO).when(queryHistoryService).getQueryHistoryDao();
 
 QueryHistoryFiltersResponse response = 
queryHistoryService.getQueryHistoryModels(request, 10);
-assertEquals(10, (int) response.getSearchCount());
+assertEquals(12, (

(kylin) 05/18: KYLIN-5780 Dimension capacity of aggGroup does not work

2024-04-09 Thread liyang
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 8929bb820c881e7172eddbc5f6606d04f62a0dd3
Author: Hang Jia <754332...@qq.com>
AuthorDate: Fri Aug 11 11:24:39 2023 +0800

KYLIN-5780 Dimension capacity of aggGroup does not work
---
 .../kylin/rest/service/FusionIndexService.java | 10 ++
 .../kylin/rest/service/IndexPlanService.java   |  2 ++
 .../kylin/rest/service/FusionIndexServiceTest.java | 23 ++
 3 files changed, 35 insertions(+)

diff --git 
a/src/modeling-service/src/main/java/org/apache/kylin/rest/service/FusionIndexService.java
 
b/src/modeling-service/src/main/java/org/apache/kylin/rest/service/FusionIndexService.java
index a7f2c67d68..ee11aa8d83 100644
--- 
a/src/modeling-service/src/main/java/org/apache/kylin/rest/service/FusionIndexService.java
+++ 
b/src/modeling-service/src/main/java/org/apache/kylin/rest/service/FusionIndexService.java
@@ -117,6 +117,7 @@ public class FusionIndexService extends BasicService {
 
 if (modelRule != null) {
 
newRuleBasedIndex.getAggregationGroups().addAll(modelRule.getAggregationGroups());
+newRuleBasedIndex.setGlobalDimCap(modelRule.getGlobalDimCap());
 }
 
 if (model.fusionModelStreamingPart()) {
@@ -126,11 +127,20 @@ public class FusionIndexService extends BasicService {
 if (batchRule != null) {
 
newRuleBasedIndex.getAggregationGroups().addAll(batchRule.getAggregationGroups().stream()
 .filter(agg -> agg.getIndexRange() == 
IndexEntity.Range.BATCH).collect(Collectors.toList()));
+
newRuleBasedIndex.setGlobalDimCap(lastModifiedTimeGlobalDimCap(batchRule, 
modelRule));
 }
 }
 return newRuleBasedIndex;
 }
 
+private int lastModifiedTimeGlobalDimCap(RuleBasedIndex batchRule, 
RuleBasedIndex modelRule) {
+if (modelRule == null || (modelRule.getLastModifiedTime() < 
batchRule.getLastModifiedTime())) {
+return batchRule.getGlobalDimCap();
+} else {
+return modelRule.getGlobalDimCap();
+}
+}
+
 @Transaction(project = 0)
 public BuildIndexResponse createTableIndex(String project, 
CreateTableIndexRequest request) {
 NDataModel model = getManager(NDataModelManager.class, 
project).getDataModelDesc(request.getModelId());
diff --git 
a/src/modeling-service/src/main/java/org/apache/kylin/rest/service/IndexPlanService.java
 
b/src/modeling-service/src/main/java/org/apache/kylin/rest/service/IndexPlanService.java
index 9a50ab5b75..d5acd58ca5 100644
--- 
a/src/modeling-service/src/main/java/org/apache/kylin/rest/service/IndexPlanService.java
+++ 
b/src/modeling-service/src/main/java/org/apache/kylin/rest/service/IndexPlanService.java
@@ -798,6 +798,8 @@ public class IndexPlanService extends BasicService 
implements TableIndexPlanSupp
 
 newRuleBasedIndex.setIndexUpdateEnabled(index.getIndexUpdateEnabled());
 newRuleBasedIndex.setAggregationGroups(new LinkedList<>());
+newRuleBasedIndex.setGlobalDimCap(index.getGlobalDimCap());
+newRuleBasedIndex.setLastModifiedTime(index.getLastModifiedTime());
 
 for (NAggregationGroup aggGrp : index.getAggregationGroups()) {
 val aggGrpCopy = new NAggregationGroup();
diff --git 
a/src/modeling-service/src/test/java/org/apache/kylin/rest/service/FusionIndexServiceTest.java
 
b/src/modeling-service/src/test/java/org/apache/kylin/rest/service/FusionIndexServiceTest.java
index 52435701a5..9f5efe8296 100644
--- 
a/src/modeling-service/src/test/java/org/apache/kylin/rest/service/FusionIndexServiceTest.java
+++ 
b/src/modeling-service/src/test/java/org/apache/kylin/rest/service/FusionIndexServiceTest.java
@@ -202,6 +202,29 @@ public class FusionIndexServiceTest extends SourceTestCase 
{
 Assert.assertEquals(false, rule1.getIndexUpdateEnabled());
 }
 
+@Test
+public void testGetRuleWithGlobalDimCap() {
+val modelId = "b05034a8-c037-416b-aa26-9e6b4a41ee40";
+val fusionModelId = "334671fd-e383-4fc9-b5c2-94fce832f77a";
+
+val indePlanManager = NIndexPlanManager.getInstance(getTestConfig(), 
"streaming_test");
+indePlanManager.updateIndexPlan(modelId, copy -> 
copy.getRuleBasedIndex().setGlobalDimCap(1));
+indePlanManager.updateIndexPlan(fusionModelId, copy -> 
copy.getRuleBasedIndex().setGlobalDimCap(2));
+
+val rule = fusionIndexService.getRule("streaming_test", modelId);
+Assert.assertEquals(1, rule.getGlobalDimCap());
+
+indePlanManager.updateIndexPlan(fusionModelId,
+copy -> 
copy.getRuleBasedIndex().setLastModifiedTime(System.currentTimeMillis() - 
1000));
+val rule2 = fusionIndexService.getRule("streamin

(kylin) 14/18: KYLIN-5788 Enhance global dict on flat table encoding stage logging & retry

2024-04-09 Thread liyang
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 775efe62b525a7f9188c2c478c44e57ed4b8dc48
Author: Yinghao Lin <39019287+yhca...@users.noreply.github.com>
AuthorDate: Sun Aug 13 10:56:53 2023 +0800

KYLIN-5788 Enhance global dict on flat table encoding stage logging & retry
---
 .../org/apache/kylin/common/KylinConfigBase.java   |  1 +
 .../sql/catalyst/expressions/KapExpresssions.scala |  2 +-
 .../org/apache/spark/sql/udf/DictEncodeImpl.scala  |  6 +-
 .../org/apache/spark/dict/NBucketDictionary.java   |  7 +-
 .../apache/spark/dict/NGlobalDictHDFSStore.java| 92 +-
 .../org/apache/spark/dict/NGlobalDictMetaInfo.java |  6 +-
 .../org/apache/spark/dict/NGlobalDictStore.java|  2 +-
 .../org/apache/spark/dict/NGlobalDictionaryV2.java |  6 +-
 8 files changed, 111 insertions(+), 11 deletions(-)

diff --git 
a/src/core-common/src/main/java/org/apache/kylin/common/KylinConfigBase.java 
b/src/core-common/src/main/java/org/apache/kylin/common/KylinConfigBase.java
index c1dd5379e3..9bce3f735a 100644
--- a/src/core-common/src/main/java/org/apache/kylin/common/KylinConfigBase.java
+++ b/src/core-common/src/main/java/org/apache/kylin/common/KylinConfigBase.java
@@ -4035,4 +4035,5 @@ public abstract class KylinConfigBase implements 
Serializable {
 public boolean isRoundDecimalZero() {
 return 
Boolean.parseBoolean(getOptional("kylin.query.round-decimal-zero", FALSE));
 }
+
 }
diff --git 
a/src/spark-project/sparder/src/main/scala/org/apache/spark/sql/catalyst/expressions/KapExpresssions.scala
 
b/src/spark-project/sparder/src/main/scala/org/apache/spark/sql/catalyst/expressions/KapExpresssions.scala
index 2233e201ba..74beffaae3 100644
--- 
a/src/spark-project/sparder/src/main/scala/org/apache/spark/sql/catalyst/expressions/KapExpresssions.scala
+++ 
b/src/spark-project/sparder/src/main/scala/org/apache/spark/sql/catalyst/expressions/KapExpresssions.scala
@@ -402,7 +402,7 @@ case class DictEncode(left: Expression, mid: Expression, 
right: Expression) exte
  |   try {
  | int bucketId = idx % $bucketSizeTerm;
  | $globalDictTerm = new 
org.apache.spark.dict.NGlobalDictionaryV2("$dictParamsTerm");
- | $bucketDictTerm = 
$globalDictTerm.loadBucketDictionary(bucketId);
+ | $bucketDictTerm = 
$globalDictTerm.loadBucketDictionary(bucketId, true);
  |   } catch (Exception e) {
  | throw new RuntimeException(e);
  |   }
diff --git 
a/src/spark-project/sparder/src/main/scala/org/apache/spark/sql/udf/DictEncodeImpl.scala
 
b/src/spark-project/sparder/src/main/scala/org/apache/spark/sql/udf/DictEncodeImpl.scala
index 8cc6e1a825..a33f29d736 100644
--- 
a/src/spark-project/sparder/src/main/scala/org/apache/spark/sql/udf/DictEncodeImpl.scala
+++ 
b/src/spark-project/sparder/src/main/scala/org/apache/spark/sql/udf/DictEncodeImpl.scala
@@ -17,12 +17,12 @@
  */
 package org.apache.spark.sql.udf
 
-import java.util
-
 import org.apache.spark.TaskContext
 import org.apache.spark.dict.{NBucketDictionary, NGlobalDictionaryV2}
 import org.apache.spark.util.TaskCompletionListener
 
+import java.util
+
 object DictEncodeImpl {
 
   @transient val cacheBucketDict: ThreadLocal[java.util.HashMap[String, 
NBucketDictionary]] =
@@ -43,7 +43,7 @@ object DictEncodeImpl {
 val encodeBucketId = partitionID % bucketSize.toInt
 val globalDict = new NGlobalDictionaryV2(dictParams)
 
-val cachedBucketDict = globalDict.loadBucketDictionary(encodeBucketId)
+val cachedBucketDict = globalDict.loadBucketDictionary(encodeBucketId, 
true)
 DictEncodeImpl.cacheBucketDict.get.put(dictParams, cachedBucketDict)
 TaskContext.get().addTaskCompletionListener(new TaskCompletionListener {
   override def onTaskCompletion(context: TaskContext): Unit = {
diff --git 
a/src/spark-project/spark-common/src/main/scala/org/apache/spark/dict/NBucketDictionary.java
 
b/src/spark-project/spark-common/src/main/scala/org/apache/spark/dict/NBucketDictionary.java
index 2d2522b252..e7fb062c1d 100644
--- 
a/src/spark-project/spark-common/src/main/scala/org/apache/spark/dict/NBucketDictionary.java
+++ 
b/src/spark-project/spark-common/src/main/scala/org/apache/spark/dict/NBucketDictionary.java
@@ -39,6 +39,11 @@ public class NBucketDictionary {
 
 NBucketDictionary(String baseDir, String workingDir, int bucketId, 
NGlobalDictMetaInfo metainfo)
 throws IOException {
+this(baseDir, workingDir, bucketId, metainfo, false);
+}
+
+NBucketDictionary(String baseDir, String workingDir, int bucketId, 
NGlobalDictMetaInfo metainfo, boolean isForColumnEncoding)
+throws IOException {
 this.workingDir = workingDir;
 this.bucketId = bucketId;
 final NGlobalDictStore globalDictStore = 
NGlobalDictStoreFactory.getResource

(kylin) 15/18: KYLIN-5789 Clean sparder history and spark history automatically

2024-04-09 Thread liyang
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 ca370d2dad5855941ebb699c1ff3d3eb343414f6
Author: sibingzhang <74443791+sibingzh...@users.noreply.github.com>
AuthorDate: Sun Aug 13 19:57:05 2023 +0800

KYLIN-5789 Clean sparder history and spark history automatically
---
 .../src/main/resources/kylinSecurity.xml   |   1 +
 .../kylin/rest/controller/NSystemController.java   |  18 +-
 .../src/main/resources/kylinSecurity.xml   |   1 +
 .../apache/kylin/rest/service/ProjectService.java  |   6 +-
 .../apache/kylin/rest/service/SystemService.java   |   9 +
 .../src/test/resources/kylinSecurity.xml   |   1 +
 .../metadata/query/JdbcQueryHistoryStore.java  |  19 ++-
 .../kylin/metadata/query/QueryHistoryDAO.java  |   2 +
 .../kylin/metadata/query/RDBMSQueryHistoryDAO.java |   5 +
 .../metadata/query/util/QueryHisStoreUtil.java |   5 +
 .../metadata/query/RDBMSQueryHistoryDaoTest.java   |  17 +-
 .../src/main/resources/kylinSecurity.xml   |   1 +
 .../apache/kylin/rest/service/ScheduleService.java |  60 +--
 .../kylin/rest/service/ScheduleServiceTest.java|  25 ++-
 .../src/main/resources/kylinSecurity.xml   |   1 +
 .../org/apache/kylin/rest/QueryNodeFilter.java |   2 +
 .../apache/kylin/helper/MetadataToolHelper.java|   7 +-
 .../org/apache/kylin/helper/RoutineToolHelper.java |  41 -
 .../java/org/apache/kylin/tool/AuditLogTool.java   |  18 +-
 .../org/apache/kylin/tool/MaintainModeTool.java|  21 +--
 .../constant/StringConstant.java}  |  16 +-
 .../tool/garbage/CleanTaskExecutorService.java |  14 +-
 .../kylin/tool/garbage/ExecutableCleaner.java  |   6 +-
 .../apache/kylin/tool/garbage/GarbageCleaner.java  |  49 +-
 .../apache/kylin/tool/garbage/IndexCleaner.java|   6 +-
 .../apache/kylin/tool/garbage/MetadataCleaner.java |  47 -
 .../apache/kylin/tool/garbage/SnapshotCleaner.java |   6 +-
 .../kylin/tool/garbage/SourceUsageCleaner.java |   7 +-
 .../apache/kylin/tool/garbage/StorageCleaner.java  | 190 ++---
 .../apache/kylin/tool/routine/FastRoutineTool.java |   1 +
 .../org/apache/kylin/tool/routine/RoutineTool.java |  31 +++-
 .../kylin/tool/security/AdminUserInitCLI.java  |  18 +-
 .../kylin/tool/security/KylinPasswordResetCLI.java |  18 +-
 .../org/apache/kylin/tool/StorageCleanerTest.java  | 126 +-
 .../garbage/CleanTaskExecutorServiceTests.java |   2 +-
 .../kylin/tool/garbage/ExecutableCleanerTest.java  |   8 +-
 .../kylin/tool/garbage/SnapshotCleanerTest.java|   2 +-
 .../kylin/tool/garbage/SourceUsageCleanerTest.java |   8 +-
 .../kylin/tool/security/AdminUserInitCLITest.java  |   8 +-
 .../tool/security/KylinPasswordResetCLITest.java   |  10 +-
 .../appstatus_application_1677899901295_8490   |   0
 ..._1_application_1677899901295_8490_1690953331329 |   0
 ..._2_application_1677899901295_8490_1690953331329 |   0
 ..._1_application_1677899901295_5936_1690235831577 |   0
 .../spark-history/application_1677899901295_0989   |   0
 .../spark-history/application_1677899901295_8243   |   0
 46 files changed, 619 insertions(+), 214 deletions(-)

diff --git a/src/common-booter/src/main/resources/kylinSecurity.xml 
b/src/common-booter/src/main/resources/kylinSecurity.xml
index 37dcfc2214..bf3f7aae8e 100644
--- a/src/common-booter/src/main/resources/kylinSecurity.xml
+++ b/src/common-booter/src/main/resources/kylinSecurity.xml
@@ -269,6 +269,7 @@
 
 
 
+
 
 
 
diff --git 
a/src/common-server/src/main/java/org/apache/kylin/rest/controller/NSystemController.java
 
b/src/common-server/src/main/java/org/apache/kylin/rest/controller/NSystemController.java
index a8cdcda4c2..b29d4a4eaf 100644
--- 
a/src/common-server/src/main/java/org/apache/kylin/rest/controller/NSystemController.java
+++ 
b/src/common-server/src/main/java/org/apache/kylin/rest/controller/NSystemController.java
@@ -43,6 +43,7 @@ import 
org.apache.kylin.common.persistence.transaction.UnitOfWork;
 import org.apache.kylin.common.persistence.transaction.UnitOfWorkParams;
 import org.apache.kylin.common.scheduler.EventBusFactory;
 import org.apache.kylin.common.util.AddressUtil;
+import org.apache.kylin.guava30.shaded.common.annotations.VisibleForTesting;
 import org.apache.kylin.helper.MetadataToolHelper;
 import org.apache.kylin.metadata.project.EnhancedUnitOfWork;
 import org.apache.kylin.metadata.project.ProjectInstance;
@@ -79,8 +80,6 @@ import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.ResponseBody;
 
-import org.apache.kylin.guava30.shaded.common.annotations.VisibleForTesting;
-
 import io.swagger.annotations.ApiOperation;
 import lombok.val;
 

(kylin) 08/18: KYLIN-5783 Round query result of decimal zero by config

2024-04-09 Thread liyang
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 8aaa87cbb3f6b9e247ced8ac34d72fb1365a39f1
Author: lixiang <447399...@qq.com>
AuthorDate: Fri Aug 11 11:48:18 2023 +0800

KYLIN-5783 Round query result of decimal zero by config
---
 .../java/org/apache/kylin/common/KylinConfigBase.java|  4 
 .../org/apache/kylin/query/pushdown/SparkSqlClient.scala |  2 ++
 .../apache/kylin/query/pushdown/SparderTypeUtilTest.java | 16 
 .../scala/org/apache/spark/sql/SparderTypeUtil.scala | 11 ++-
 4 files changed, 32 insertions(+), 1 deletion(-)

diff --git 
a/src/core-common/src/main/java/org/apache/kylin/common/KylinConfigBase.java 
b/src/core-common/src/main/java/org/apache/kylin/common/KylinConfigBase.java
index eddb15bffa..ff7bd4c7c3 100644
--- a/src/core-common/src/main/java/org/apache/kylin/common/KylinConfigBase.java
+++ b/src/core-common/src/main/java/org/apache/kylin/common/KylinConfigBase.java
@@ -4029,4 +4029,8 @@ public abstract class KylinConfigBase implements 
Serializable {
 public int getExpectedIndexSizeOptimized() {
 return 
Integer.parseInt(getOptional("kylin.index.expected-size-after-optimization", 
"0"));
 }
+
+public boolean isRoundDecimalZero() {
+return 
Boolean.parseBoolean(getOptional("kylin.query.round-decimal-zero", FALSE));
+}
 }
diff --git 
a/src/spark-project/sparder/src/main/scala/org/apache/kylin/query/pushdown/SparkSqlClient.scala
 
b/src/spark-project/sparder/src/main/scala/org/apache/kylin/query/pushdown/SparkSqlClient.scala
index d2ba4fca42..a015f6d2c3 100644
--- 
a/src/spark-project/sparder/src/main/scala/org/apache/kylin/query/pushdown/SparkSqlClient.scala
+++ 
b/src/spark-project/sparder/src/main/scala/org/apache/kylin/query/pushdown/SparkSqlClient.scala
@@ -18,6 +18,7 @@
 
 package org.apache.kylin.query.pushdown
 
+import java.math.BigDecimal
 import java.sql.Timestamp
 import java.util
 import java.util.concurrent.{Callable, Executors, TimeUnit, TimeoutException}
@@ -213,6 +214,7 @@ object SparkSqlClient {
 case value: immutable.Map[Any, Any] =>
   value.map(p => rawValueToString(p._1, true) + ":" + 
rawValueToString(p._2, true)).mkString("{", ",", "}")
 case value: Array[Byte] => new String(value)
+case value: BigDecimal => SparderTypeUtil.adjustDecimal(value)
 case value: Any => value.toString
   }
 }
diff --git 
a/src/spark-project/sparder/src/test/java/org/apache/kylin/query/pushdown/SparderTypeUtilTest.java
 
b/src/spark-project/sparder/src/test/java/org/apache/kylin/query/pushdown/SparderTypeUtilTest.java
index ea055a98ef..0626a96c3e 100644
--- 
a/src/spark-project/sparder/src/test/java/org/apache/kylin/query/pushdown/SparderTypeUtilTest.java
+++ 
b/src/spark-project/sparder/src/test/java/org/apache/kylin/query/pushdown/SparderTypeUtilTest.java
@@ -28,6 +28,8 @@ import org.apache.calcite.rel.type.RelDataType;
 import org.apache.calcite.rel.type.RelDataTypeSystem;
 import org.apache.calcite.sql.type.BasicSqlType;
 import org.apache.calcite.sql.type.SqlTypeName;
+import org.apache.kylin.common.KylinConfig;
+import org.apache.kylin.common.util.TempMetadataBuilder;
 import org.apache.spark.sql.util.SparderTypeUtil;
 import org.junit.Assert;
 import org.junit.Test;
@@ -140,4 +142,18 @@ public class SparderTypeUtilTest {
 Assert.assertEquals(Long.class, convert_value.getClass());
 Assert.assertEquals(0L, convert_value);
 }
+
+@Test
+public void testBigDecimalRoundZero() {
+String tempMetadataDir = 
TempMetadataBuilder.prepareLocalTempMetadata();
+KylinConfig.setKylinConfigForLocalTest(tempMetadataDir);
+KylinConfig config = KylinConfig.getInstanceFromEnv();
+Assert.assertEquals("0.000", convertToStringWithDecimalType(new 
BigDecimal("0.000"), 29, 3));
+config.setProperty("kylin.query.round-decimal-zero", "true");
+Assert.assertEquals("0", convertToStringWithDecimalType(new 
BigDecimal("0.000"), 29, 3));
+Assert.assertEquals("0", convertToStringWithDecimalType(new 
BigDecimal("0."), 29, 4));
+Assert.assertEquals("0.001", convertToStringWithDecimalType(new 
BigDecimal("0.001"), 29, 3));
+
+}
+
 }
diff --git 
a/src/spark-project/spark-common/src/main/scala/org/apache/spark/sql/SparderTypeUtil.scala
 
b/src/spark-project/spark-common/src/main/scala/org/apache/spark/sql/SparderTypeUtil.scala
index 83499cda60..acce92b76a 100644
--- 
a/src/spark-project/spark-common/src/main/scala/org/apache/spark/sql/SparderTypeUtil.scala
+++ 
b/src/spark-project/spark-common/src/main/scala/org/apache/spark/sql/SparderTypeUtil.scala
@@ -252,6 +252,15 @@ object SparderTypeUtil extends Logging {
 ret

(kylin) 07/18: KYLIN-5782 Duplicated join keys result empty query result

2024-04-09 Thread liyang
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 1b63eefbc92e570572b5e7d92ff3d9130a5dec63
Author: Zhiting Guo <35057824+fre...@users.noreply.github.com>
AuthorDate: Fri Aug 11 11:29:39 2023 +0800

KYLIN-5782 Duplicated join keys result empty query result

-
Co-authored-by: Zhiting Guo 
---
 .../org/apache/kylin/query/relnode/KapJoinRel.java | 17 
 .../apache/kylin/query/relnode/OLAPJoinRel.java| 48 +-
 2 files changed, 37 insertions(+), 28 deletions(-)

diff --git 
a/src/query-common/src/main/java/org/apache/kylin/query/relnode/KapJoinRel.java 
b/src/query-common/src/main/java/org/apache/kylin/query/relnode/KapJoinRel.java
index a98ea03827..4a5145d64b 100644
--- 
a/src/query-common/src/main/java/org/apache/kylin/query/relnode/KapJoinRel.java
+++ 
b/src/query-common/src/main/java/org/apache/kylin/query/relnode/KapJoinRel.java
@@ -44,15 +44,14 @@ import org.apache.calcite.rel.type.RelDataTypeFieldImpl;
 import org.apache.calcite.rex.RexCall;
 import org.apache.calcite.rex.RexNode;
 import org.apache.calcite.util.ImmutableIntList;
+import org.apache.kylin.guava30.shaded.common.base.Preconditions;
+import org.apache.kylin.guava30.shaded.common.collect.Lists;
+import org.apache.kylin.guava30.shaded.common.collect.Sets;
 import org.apache.kylin.metadata.model.JoinDesc;
 import org.apache.kylin.metadata.model.TblColRef;
 import org.apache.kylin.query.util.ICutContextStrategy;
 import org.apache.kylin.query.util.RexUtils;
 
-import org.apache.kylin.guava30.shaded.common.base.Preconditions;
-import org.apache.kylin.guava30.shaded.common.collect.Lists;
-import org.apache.kylin.guava30.shaded.common.collect.Sets;
-
 import lombok.val;
 
 public class KapJoinRel extends OLAPJoinRel implements KapRel {
@@ -232,9 +231,10 @@ public class KapJoinRel extends OLAPJoinRel implements 
KapRel {
 if (context != null) {
 collectCtxOlapInfoIfExist();
 } else {
-Map joinColumns = 
translateJoinColumn(this.getCondition());
+Map> joinColumns = 
translateJoinColumn(this.getCondition());
 pushDownJoinColsToSubContexts(joinColumns.entrySet().stream()
-.flatMap(e -> Stream.of(e.getKey(), 
e.getValue())).collect(Collectors.toSet()));
+.flatMap(e -> Stream.concat(Stream.of(e.getKey()), 
e.getValue().stream()))
+.collect(Collectors.toSet()));
 }
 }
 
@@ -251,9 +251,10 @@ public class KapJoinRel extends OLAPJoinRel implements 
KapRel {
 this.context.joins.add(join);
 
 } else {
-Map joinColumnsMap = 
translateJoinColumn(this.getCondition());
+Map> joinColumnsMap = 
translateJoinColumn(this.getCondition());
 Collection joinCols = joinColumnsMap.entrySet().stream()
-.flatMap(e -> Stream.of(e.getKey(), 
e.getValue())).collect(Collectors.toSet());
+.flatMap(e -> Stream.concat(Stream.of(e.getKey()), 
e.getValue().stream()))
+.collect(Collectors.toSet());
 joinCols.stream().flatMap(e -> 
e.getSourceColumns().stream()).filter(context::belongToContextTables)
 .forEach(colRef -> {
 context.getSubqueryJoinParticipants().add(colRef);
diff --git 
a/src/query-common/src/main/java/org/apache/kylin/query/relnode/OLAPJoinRel.java
 
b/src/query-common/src/main/java/org/apache/kylin/query/relnode/OLAPJoinRel.java
index c62ba3e4ab..1c88f275c9 100644
--- 
a/src/query-common/src/main/java/org/apache/kylin/query/relnode/OLAPJoinRel.java
+++ 
b/src/query-common/src/main/java/org/apache/kylin/query/relnode/OLAPJoinRel.java
@@ -20,6 +20,7 @@ package org.apache.kylin.query.relnode;
 
 import java.util.ArrayList;
 import java.util.HashMap;
+import java.util.HashSet;
 import java.util.LinkedList;
 import java.util.List;
 import java.util.Map;
@@ -55,12 +56,11 @@ import org.apache.calcite.rex.RexInputRef;
 import org.apache.calcite.rex.RexNode;
 import org.apache.calcite.sql.SqlKind;
 import org.apache.calcite.util.ImmutableIntList;
+import org.apache.kylin.guava30.shaded.common.base.Preconditions;
 import org.apache.kylin.metadata.model.JoinDesc;
 import org.apache.kylin.metadata.model.TblColRef;
 import org.apache.kylin.query.schema.OLAPTable;
 
-import org.apache.kylin.guava30.shaded.common.base.Preconditions;
-
 /**
  *
  */
@@ -192,11 +192,14 @@ public class OLAPJoinRel extends EnumerableJoin 
implements OLAPRel {
 this.context.joins.add(join);
 } else {
 //When join contains subquery, the join-condition fields of 
fact_table will add into context.
-Map joinCol = 
translateJoinColumn(this.getCondition());
+Map> joinCol = 
translateJoinColumn(this.getCondition());
 
-for (Map.Ent

(kylin) 04/18: KYLIN-5779 Without project permission,API "/access/acls" throws NPE

2024-04-09 Thread liyang
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 9f269b527f33911dbad4395f7e8395dc9fdbec96
Author: Liang.Hua <36814772+jacob...@users.noreply.github.com>
AuthorDate: Thu Aug 10 13:46:10 2023 +0800

KYLIN-5779 Without project permission,API "/access/acls" throws NPE

Co-authored-by: liang.hua 
---
 .../src/main/java/org/apache/kylin/rest/service/AccessService.java  | 6 --
 .../test/java/org/apache/kylin/rest/service/AclTCRServiceTest.java  | 4 
 2 files changed, 8 insertions(+), 2 deletions(-)

diff --git 
a/src/common-service/src/main/java/org/apache/kylin/rest/service/AccessService.java
 
b/src/common-service/src/main/java/org/apache/kylin/rest/service/AccessService.java
index 9e8da0d29b..54dcf242c8 100644
--- 
a/src/common-service/src/main/java/org/apache/kylin/rest/service/AccessService.java
+++ 
b/src/common-service/src/main/java/org/apache/kylin/rest/service/AccessService.java
@@ -804,7 +804,7 @@ public class AccessService extends BasicService {
 return AclConstants.ADMINISTRATION;
 }
 Map projectPermissions = getProjectPermission(project);
-int mask = projectPermissions.get(getSid(groupName, false));
+int mask = projectPermissions.getOrDefault(getSid(groupName, false), 
0);
 return ExternalAclProvider.convertToExternalPermission(mask);
 }
 
@@ -877,7 +877,9 @@ public class AccessService extends BasicService {
 SidPermissionWithAclResponse permissionWithAclResponse = principal
 ? getUserPermissionWithAclResponse(project, 
userOrGroupName)
 : getGroupPermissionWithAclResponse(project, 
userOrGroupName);
-sidPermissionWithAclResponse.add(permissionWithAclResponse);
+if 
(!AclConstants.EMPTY.equals(permissionWithAclResponse.getProjectPermission())) {
+sidPermissionWithAclResponse.add(permissionWithAclResponse);
+}
 }
 return sidPermissionWithAclResponse;
 }
diff --git 
a/src/common-service/src/test/java/org/apache/kylin/rest/service/AclTCRServiceTest.java
 
b/src/common-service/src/test/java/org/apache/kylin/rest/service/AclTCRServiceTest.java
index 9af9f92b14..ca41c60de0 100644
--- 
a/src/common-service/src/test/java/org/apache/kylin/rest/service/AclTCRServiceTest.java
+++ 
b/src/common-service/src/test/java/org/apache/kylin/rest/service/AclTCRServiceTest.java
@@ -1334,6 +1334,10 @@ public class AclTCRServiceTest extends 
NLocalFileMetadataTestCase {
 responses = accessService.getUserOrGroupAclPermissions(projects, 
"ANALYST", true);
 Assert.assertEquals(1, responses.size());
 Assert.assertEquals("OPERATION", 
responses.get(0).getProjectPermission());
+
+// test user have not project permission
+responses = 
accessService.getUserOrGroupAclPermissions(Lists.newArrayList("ssb"), 
"ANALYST", true);
+Assert.assertEquals(0, responses.size());
 }
 
 @Test



(kylin) 17/18: KYLIN-5786 Add a write lock when merging v3 dict

2024-04-09 Thread liyang
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 30c4f28a1616dc80e674c4c4f7017b6cc63114b4
Author: Yaguang Jia 
AuthorDate: Fri Aug 11 13:10:02 2023 +0800

KYLIN-5786 Add a write lock when merging v3 dict
---
 .../spark/builder/v3dict/DictionaryBuilder.scala   | 63 +++---
 .../builder/v3dict/GlobalDictionarySuite.scala | 12 +++--
 2 files changed, 51 insertions(+), 24 deletions(-)

diff --git 
a/src/spark-project/engine-spark/src/main/scala/org/apache/kylin/engine/spark/builder/v3dict/DictionaryBuilder.scala
 
b/src/spark-project/engine-spark/src/main/scala/org/apache/kylin/engine/spark/builder/v3dict/DictionaryBuilder.scala
index e47dc7107e..5fd9ae1673 100644
--- 
a/src/spark-project/engine-spark/src/main/scala/org/apache/kylin/engine/spark/builder/v3dict/DictionaryBuilder.scala
+++ 
b/src/spark-project/engine-spark/src/main/scala/org/apache/kylin/engine/spark/builder/v3dict/DictionaryBuilder.scala
@@ -40,6 +40,7 @@ import util.retry.blocking.RetryStrategy.RetryStrategyProducer
 import util.retry.blocking.{Failure, Retry, RetryStrategy, Success}
 
 import java.nio.file.Paths
+import java.util.concurrent.locks.ReentrantReadWriteLock
 import scala.collection.mutable.ListBuffer
 import scala.concurrent.duration.DurationInt
 import scala.util.control.NonFatal
@@ -48,6 +49,7 @@ object DictionaryBuilder extends Logging {
 
   implicit val retryStrategy: RetryStrategyProducer =
 RetryStrategy.randomBackOff(5.seconds, 15.seconds, maxAttempts = 20)
+  lazy val v3dictMergeLock = new ReentrantReadWriteLock(true)
 
   def buildGlobalDict(
project: String,
@@ -86,11 +88,12 @@ object DictionaryBuilder extends Logging {
   private def transformerDictPlan(
spark: SparkSession,
context: DictionaryContext,
-   plan: LogicalPlan): LogicalPlan = {
+   plan: LogicalPlan): DictPlanVersion = {
 
 val dictPath = getDictionaryPathAndCheck(context)
-val dictTable: DeltaTable = DeltaTable.forPath(dictPath)
-val maxOffset = dictTable.toDF.count()
+val dictVersion = DeltaLog.forTable(spark, dictPath).snapshot.version
+val dictTableDF = spark.read.format("delta").option("versionAsOf", 
dictVersion).load(dictPath);
+val maxOffset = dictTableDF.count()
 logInfo(s"Dict $dictPath item count $maxOffset")
 
 plan match {
@@ -99,19 +102,19 @@ object DictionaryBuilder extends Logging {
 val windowSpec = 
org.apache.spark.sql.expressions.Window.orderBy(col(column))
 val joinCondition = createColumn(
   EqualTo(col(column).cast(StringType).expr,
-getLogicalPlan(dictTable.toDF).output.head))
-val filterKey = getLogicalPlan(dictTable.toDF).output.head.name
+getLogicalPlan(dictTableDF).output.head))
+val filterKey = getLogicalPlan(dictTableDF).output.head.name
 val antiJoinDF = getDataFrame(spark, windowChild)
   .filter(col(filterKey).isNotNull)
-  .join(dictTable.toDF,
+  .join(dictTableDF,
 joinCondition,
 "left_anti")
   .select(col(column).cast(StringType) as "dict_key",
 (row_number().over(windowSpec) + lit(maxOffset)).cast(LongType) as 
"dict_value")
 logInfo(s"Dict logical plan : 
${antiJoinDF.queryExecution.logical.treeString}")
-getLogicalPlan(antiJoinDF)
+DictPlanVersion(getLogicalPlan(antiJoinDF), dictVersion)
 
-  case _ => plan
+  case _ => DictPlanVersion(plan, dictVersion)
 }
   }
 
@@ -166,32 +169,52 @@ object DictionaryBuilder extends Logging {
 val dictPath = getDictionaryPath(context)
 logInfo(s"Save dict values into path $dictPath.")
 try {
-  dictDF.write.mode(SaveMode.Overwrite).format("delta").save(dictPath)
+  dictDF.write.mode(SaveMode.ErrorIfExists).format("delta").save(dictPath)
 } catch {
   case e: DeltaConcurrentModificationException =>
 logWarning(s"Concurrent modifications occurred: $dictPath", e)
 throw e
   case NonFatal(e) =>
+logWarning(s"A NoFatal exception occurs when initializing the 
dictionary, and will be retried", e)
 if (!DeltaTable.isDeltaTable(dictPath)) {
   logWarning(s"Try to delete v3dict: $dictPath", e)
   HadoopUtil.deletePath(HadoopUtil.getCurrentConfiguration, new 
Path(dictPath))
 }
 throw e
+  case e: Throwable => throw e
 }
   }
 
   private def mergeIncrementDict(spark: SparkSession, context: 
DictionaryContext, plan: LogicalPlan): Unit = {
-val dictPlan = transformerDictPlan(spark, context, plan)
-val incrementDictDF 

(kylin) branch kylin5 updated (f6cc0ce32c -> 4ed3729312)

2024-04-09 Thread liyang
This is an automated email from the ASF dual-hosted git repository.

liyang pushed a change to branch kylin5
in repository https://gitbox.apache.org/repos/asf/kylin.git


from f6cc0ce32c KYLIN-5820,added pagination and add count distinct  
function in batch measure dialog
 new 8ab87c93b9 KYLIN-5775 upgrade testcontainers to 1.16.2
 new 5d781d1917 KYLIN-5776 Support parameter type is string for 
timestampadd function
 new a67e854a1d KYLIN-5777 Change spark.yarn.submit.file.replication from 1 
to 3
 new 9f269b527f KYLIN-5779 Without project permission,API "/access/acls" 
throws NPE
 new 8929bb820c KYLIN-5780 Dimension capacity of aggGroup does not work
 new cb2a11d503 KYLIN-5781 Adjust the query result order of sql with union
 new 1b63eefbc9 KYLIN-5782 Duplicated join keys result empty query result
 new 8aaa87cbb3 KYLIN-5783 Round query result of decimal zero by config
 new 40a10818a0 Add some code to compatible with the enterprise version
 new 1367e9ccff KYLIN-5784 Optimization for query history filters
 new d7d8098598 KYLIN-5785 Support implicit query of split function
 new dd16079c42 KYLIN-5787 Use t-digest as spark percentile_approx function
 new 9db3502f80 KYLIN-5774 Optimize Calcite plan to convert spark logical 
plan
 new 775efe62b5 KYLIN-5788 Enhance global dict on flat table encoding stage 
logging & retry
 new ca370d2dad KYLIN-5789 Clean sparder history and spark history 
automatically
 new 2695c5da83 KYLIN-5790 Security of kafka-clients
 new 30c4f28a16 KYLIN-5786 Add a write lock when merging v3 dict
 new 4ed3729312 KYLIN-5778 Upgrade spark to 3.2.0-kylin-4.6.14.0

The 18 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 pom.xml|  10 +-
 .../src/main/resources/config/init.properties  |   2 +-
 .../src/main/resources/kylinSecurity.xml   |   1 +
 .../kylin/rest/controller/NSystemController.java   |  18 +-
 .../src/main/resources/kylinSecurity.xml   |   1 +
 .../apache/kylin/rest/service/AccessService.java   |   6 +-
 .../apache/kylin/rest/service/ProjectService.java  |   6 +-
 .../apache/kylin/rest/service/SystemService.java   |   9 +
 .../kylin/rest/service/AclTCRServiceTest.java  |   4 +
 .../src/test/resources/kylinSecurity.xml   |   1 +
 .../org/apache/kylin/common/KylinConfigBase.java   |  19 ++-
 .../common/exception/code/ErrorCodeServer.java |   3 +
 .../src/main/resources/kylin-defaults0.properties  |   3 +-
 .../resources/kylin_error_msg_conf_cn.properties   |   3 +
 .../resources/kylin_error_msg_conf_en.properties   |   3 +
 .../kylin_error_suggestion_conf_cn.properties  |   3 +
 .../kylin_error_suggestion_conf_en.properties  |   3 +
 .../main/resources/kylin_errorcode_conf.properties |   3 +
 .../measure/percentile/PercentileCounter.java  |   1 +
 .../apache/kylin/metadata/model/NDataModel.java|   9 +
 .../metadata/query/JdbcQueryHistoryStore.java  |  19 ++-
 .../kylin/metadata/query/QueryHistoryDAO.java  |   2 +
 .../kylin/metadata/query/RDBMSQueryHistoryDAO.java |   5 +
 .../metadata/query/util/QueryHisStoreUtil.java |   5 +
 .../recommendation/entity/DimensionRecItemV2.java  |  17 +-
 .../metadata/query/RDBMSQueryHistoryDaoTest.java   |  17 +-
 .../src/main/resources/config/init.properties  |   2 +-
 .../src/main/resources/kylinSecurity.xml   |   1 +
 .../kylin/rest/controller/SegmentController.java   |   6 +-
 .../rest/controller/SegmentControllerTest.java |  43 -
 .../org/apache/kylin/rest/KafkaCondition.java} |  20 +--
 .../apache/kylin/rest/service/KafkaService.java|   8 +-
 .../apache/kylin/rest/service/TableService.java|   2 +-
 .../apache/kylin/rest/service/ScheduleService.java |  60 +--
 .../kylin/rest/service/ScheduleServiceTest.java|  25 ++-
 .../kylin/newten/EnhancedAggPushDownTest.java  |   2 +-
 ...itInfoTest.java => SpecialColumnNamesTest.java} |  68 +++-
 .../apache/kylin/query/engine/QueryExecTest.java   |  59 +--
 .../java/org/apache/kylin/util/ExecAndComp.java|  42 +++--
 .../_global/project/special_column_names.json} |   2 +-
 .../c41390c5-b35d-4db3-b167-029874b85a2c.json} |   2 +-
 .../c41390c5-b35d-4db3-b167-029874b85a2c.json} |   2 +-
 .../c41390c5-b35d-4db3-b167-029874b85a2c.json} |  10 +-
 .../special_column_names}/table/SSB.CUSTOMER.json  |   6 +-
 .../table/SSB.P_LINEORDER.json |  10 +-
 .../kylin/rest/controller/KafkaController.java |   2 +-
 .../kylin/rest/controller/NModelController.java|  11 +-
 .../rest/controller/NModelControllerTest.java  | 107 +++-
 .../kylin/rest/service/FusionIndexService.java |  10 ++
 .../kylin/rest/serv

(kylin) branch kylin5 updated: KYLIN-5820,added pagination and add count distinct function in batch measure dialog

2024-04-08 Thread liyang
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


The following commit(s) were added to refs/heads/kylin5 by this push:
 new f6cc0ce32c KYLIN-5820,added pagination and add count distinct  
function in batch measure dialog
f6cc0ce32c is described below

commit f6cc0ce32c82e3102a2fe27db9c3b9a99f43bd47
Author: huangchunyan 
AuthorDate: Fri Apr 5 16:02:27 2024 +0800

KYLIN-5820,added pagination and add count distinct  function in batch 
measure dialog
---
 kystudio/src/components/common/pager.vue   |   8 +-
 .../studio/StudioModel/AddMeasure/index.vue|   2 +-
 .../studio/StudioModel/BatchMeasureModal/index.vue | 287 -
 3 files changed, 169 insertions(+), 128 deletions(-)

diff --git a/kystudio/src/components/common/pager.vue 
b/kystudio/src/components/common/pager.vue
index 927414f2cb..383f926917 100644
--- a/kystudio/src/components/common/pager.vue
+++ b/kystudio/src/components/common/pager.vue
@@ -43,6 +43,10 @@ import { Component } from 'vue-property-decorator'
 refTag: {
   type: String,
   default: ''
+},
+isNeedLocalStorage: {
+  type: Boolean,
+  default: true
 }
   },
   methods: {
@@ -53,7 +57,7 @@ import { Component } from 'vue-property-decorator'
 sizeChange (size) {
   this.pageSize = size
   this.currentPage = 0
-  cacheLocalStorage(this.refTag, size)
+  this.isNeedLocalStorage && this.refTag && cacheLocalStorage(this.refTag, 
size)
   this.$emit('handleCurrentChange', this.currentPage, size)
 }
   }
@@ -61,7 +65,7 @@ import { Component } from 'vue-property-decorator'
 export default class Pager extends Vue {
   data () {
 return {
-  pageSize: +localStorage.getItem(this.refTag) || this.perPageSize || 
bigPageCount,
+  pageSize: this.refTag && +localStorage.getItem(this.refTag) || 
this.perPageSize || bigPageCount,
   pageSizes: pageSizes,
   currentPage: this.curPage
 }
diff --git a/kystudio/src/components/studio/StudioModel/AddMeasure/index.vue 
b/kystudio/src/components/studio/StudioModel/AddMeasure/index.vue
index abe837945a..9f304cbff3 100644
--- a/kystudio/src/components/studio/StudioModel/AddMeasure/index.vue
+++ b/kystudio/src/components/studio/StudioModel/AddMeasure/index.vue
@@ -438,7 +438,7 @@ export default class AddMeasure extends Vue {
   }
 
   get flattenLookupTables () {
-return this.modelInstance.anti_flatten_lookups
+return this.modelInstance?.anti_flatten_lookups ?? []
   }
 
   get showSync () {
diff --git 
a/kystudio/src/components/studio/StudioModel/BatchMeasureModal/index.vue 
b/kystudio/src/components/studio/StudioModel/BatchMeasureModal/index.vue
index 452c3020bf..a732940d8c 100644
--- a/kystudio/src/components/studio/StudioModel/BatchMeasureModal/index.vue
+++ b/kystudio/src/components/studio/StudioModel/BatchMeasureModal/index.vue
@@ -1,5 +1,5 @@
 
-  
   
 
 
-
-
+
+
   
 
   
 
-
+
   
 
   
 
-
+
   
 
   
 
-
+
   
 
   
 
+
+  
+
+  
+
   
+  
 
 
 
@@ -76,32 +82,38 @@
   
 
 
-
-
+
+
   
 
   
 
-
+
   
 
   
 
-
+
   
 
   
 
-
+
   
 
   
 
+
+  
+
+  
+
   
+  
 
 
 
@@ -122,28 +134,34 @@
   :data="ccTable.columns"
   :ref="ccTable.guid">
   
-  
-  
+  
+  
 
   
 
   
-  
+  
 
   
 
   
-  
+  
 
   
 
   
-  
+  
 
   
 
   
+  
+
+  
+
+  
 
+
   
 
   
@@ -154,7 +172,7 @@
 :empty-text="emptyText"
 :k

(kylin) branch kylin5 updated: KYLIN-5813,improve query history page filter item and model list page button text

2024-04-08 Thread liyang
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


The following commit(s) were added to refs/heads/kylin5 by this push:
 new 8c91a1a4ed KYLIN-5813,improve query history page filter item and model 
list page button text
8c91a1a4ed is described below

commit 8c91a1a4eddbf0ed29f0e81487ea1e088cbf736b
Author: huangchunyan 
AuthorDate: Fri Apr 5 15:07:12 2024 +0800

KYLIN-5813,improve query history page filter item and model list page 
button text
---
 .../common/DropdownFilter/DropdownFilter.vue   | 354 +-
 kystudio/src/components/query/query_history.vue|   3 +
 .../src/components/query/query_history_table.vue   | 509 -
 .../studio/StudioModel/ModelList/index.vue |  27 +-
 kystudio/src/config/index.js   |   3 +
 kystudio/src/service/datasource.js |   2 +-
 6 files changed, 641 insertions(+), 257 deletions(-)

diff --git a/kystudio/src/components/common/DropdownFilter/DropdownFilter.vue 
b/kystudio/src/components/common/DropdownFilter/DropdownFilter.vue
index e6c8c9a719..99fbb8528c 100644
--- a/kystudio/src/components/common/DropdownFilter/DropdownFilter.vue
+++ b/kystudio/src/components/common/DropdownFilter/DropdownFilter.vue
@@ -37,26 +37,56 @@ import { getPickerOptions } from './handler'
   type: Array,
   default: () => []
 },
+options2: {
+  type: Array,
+  default: () => []
+},
 hideArrow: {
   type: Boolean
+},
+isShowfooter: {
+  type: Boolean,
+  default: true
+},
+filterScrollMaxHeight: {
+  type: String,
+  default: '130'
+},
+isLoadingData: Boolean,
+isLoading: Boolean,
+loadingTips: String,
+isShowSearchInput: Boolean,
+filterPlaceholder: String,
+optionsTitle: String,
+totalSizeLabel: String,
+isShowDropDownImme: Boolean,
+isSelectAllOption: {
+  type: Object,
+  default: null
 }
   },
   locales
 })
 export default class DropdownFilter extends Vue {
   isShowDropDown = false
+  startSec = 0
+  endSec = 10
+  searchValue = ''
+  isAll = false
+  timer = null
 
   get resetValue () {
 const { type } = this
 switch (type) {
   case 'checkbox': return []
+  case 'inputNumber': return [null, null]
   default: return null
 }
   }
 
   get isPopoverType () {
 const { type } = this
-return ['checkbox'].includes(type)
+return ['checkbox', 'inputNumber'].includes(type)
   }
 
   get isDatePickerType () {
@@ -84,6 +114,27 @@ export default class DropdownFilter extends Vue {
 }
   }
 
+  handleChangeAll () {
+this.$emit('handleChangeAll')
+  }
+  saveLatencyRange () {
+const latencyFrom = this.startSec
+let latencyTo = null
+if (this.startSec > this.endSec) {
+  latencyTo = this.endSec = this.startSec
+} else {
+  latencyTo = this.endSec
+}
+this.handleInput([latencyFrom, latencyTo])
+this.handleToggleDropdown()
+  }
+  resetLatency () {
+this.startSec = 0
+this.endSec = 10
+this.handleClearValue()
+this.handleToggleDropdown()
+  }
+
   handleClearValue () {
 this.$emit('input', this.resetValue)
   }
@@ -97,28 +148,76 @@ export default class DropdownFilter extends Vue {
 
   handleToggleDropdown () {
 this.handleSetDropdown(!this.isShowDropDown)
+if (this.isShowDropDown) {
+  this.bindScrollEvent()
+}
+  }
+
+  removeScrollEvent () {
+const groupBlocks = 
this.$refs.$checkBoxGroup.querySelectorAll('.group-block .scroll-content')
+if (groupBlocks.length) {
+  for (let group of groupBlocks) {
+group.removeEventListener('scroll', this.addScrollEvent, false)
+  }
+}
+  }
+  bindScrollEvent () {
+const groupBlocks = 
this.$refs.$checkBoxGroup.querySelectorAll('.group-block .scroll-content')
+console.log(groupBlocks)
+if (groupBlocks.length) {
+  for (let group of groupBlocks) {
+group.addEventListener('scroll', this.addScrollEvent, false)
+  }
+}
   }
 
   handlerClickEvent () {
 this.$refs.$datePicker.$el.click()
   }
 
+  addScrollEvent (e) {
+try {
+  const scrollT = e.target.scrollTop
+  if (scrollT > 0) {
+e.target.parentNode.className = 'group-block is-scrollable-top'
+  } else {
+e.target.parentNode.className = 'group-block'
+  }
+  let scrollH = e.target.scrollHeight
+  let clientH = e.target.clientHeight
+  if (scrollT + clientH === scrollH) {
+this.$emit('filter-scroll-bottom')
+  }
+} catch (e) {
+  console.error(e)
+}
+  }
+
   mounted () {
 this.isDatePickerType && this.$slots.default && this.$slots.default.length 
&& this.$slots.default[0].elm.addEventListener('click', this.handlerClickEvent)
+if (this.isShowDropDownImme) {
+  this.$nextTick(() =>

(kylin) branch kylin5 updated: fix frontend build sh

2024-04-08 Thread liyang
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


The following commit(s) were added to refs/heads/kylin5 by this push:
 new fd3b1313c0 fix frontend build sh
fd3b1313c0 is described below

commit fd3b1313c0fbbd9f4817714e887631538da98100
Author: huangchunyan 
AuthorDate: Mon Apr 8 20:52:05 2024 +0800

fix frontend build sh
---
 build/release/build.sh  | 2 +-
 kystudio/build/build.js | 1 +
 2 files changed, 2 insertions(+), 1 deletion(-)

diff --git a/build/release/build.sh b/build/release/build.sh
index 4549745e7d..f759bd3c52 100755
--- a/build/release/build.sh
+++ b/build/release/build.sh
@@ -29,7 +29,7 @@ echo 'Build front-end'
 if [ "${WITH_FRONT}" = "1" ]; then
 cd kystudio
 echo 'Install front-end dependencies'
-npm install  || { exit 1; }
+npm install --registry=https://registry.npmjs.org/ --legacy-peer-deps || { 
exit 1; }
 echo 'Install front-end end'
 npm run build   || { exit 1; }
 echo 'build front-end dist end'
diff --git a/kystudio/build/build.js b/kystudio/build/build.js
index 6b8add100c..1483a7f430 100644
--- a/kystudio/build/build.js
+++ b/kystudio/build/build.js
@@ -31,5 +31,6 @@ rm(path.join(config.build.assetsRoot, 
config.build.assetsSubDirectory), err => {
   '  Tip: built files are meant to be served over an HTTP server.\n' +
   '  Opening index.html over file:// won\'t work.\n'
 ))
+process.exit(0)
   })
 })



(kylin) 09/14: KYLIN-5768 Refine and adjust some code for localCache

2024-03-31 Thread liyang
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 60da9e0ce1fa789ad580ca62ae4d47162f9d3201
Author: Yinghao Lin <39019287+yhca...@users.noreply.github.com>
AuthorDate: Fri Jul 21 21:09:31 2023 +0800

KYLIN-5768 Refine and adjust some code for localCache

-
Co-authored-by: sibingzhang <74443791+sibingzh...@users.noreply.github.com>
Co-authored-by: sibing.zhang 
---
 pom.xml|  12 +-
 .../rest/controller/NBasicControllerTest.java  |   2 +-
 .../apache/kylin/rest/service/ProjectService.java  |   9 +-
 .../org/apache/kylin/common/KylinConfigBase.java   |   8 ++
 .../kylin/metadata/cube/model/IndexPlan.java   | 136 +++--
 .../cube/optimization/AbstractOptStrategy.java |   4 +-
 .../cube/optimization/GarbageLayoutType.java   |   2 +-
 .../optimization/IncludedLayoutOptStrategy.java|   2 +-
 .../metadata/cube/optimization/IndexOptimizer.java |  14 ++-
 .../cube/optimization/IndexOptimizerFactory.java   |  12 +-
 .../optimization/LowFreqLayoutOptStrategy.java |   2 +-
 .../cube/optimization/MergedLayoutOptStrategy.java |  59 +
 .../optimization/SimilarLayoutOptStrategy.java |   2 +-
 .../cube/optimization/event/ApproveRecsEvent.java} |  27 ++--
 .../cube/optimization/event/BuildIndexEvent.java}  |  26 ++--
 .../cube/storage/GarbageStorageCollector.java  |   2 +-
 .../metadata/cube/utils/IndexPlanReduceUtil.java   |  52 +++-
 .../storage/ProjectStorageInfoCollectorTest.java   |  74 +--
 .../cube/utils/IndexPlanReduceUtilTest.java|  27 +++-
 .../kylin/rest/initialize/BuildAppInitializer.java |   5 +
 .../kylin/rest/service/ModelBuildService.java  |  38 --
 .../kylin/rest/service/ModelServiceBuildTest.java  |  36 +-
 .../kylin/rest/controller/NProjectController.java  |  14 ++-
 .../rest/controller/NProjectControllerTest.java|   2 +-
 .../kylin/rest/service/AbstractModelService.java   | 114 -
 .../kylin/rest/service/BaseIndexUpdateHelper.java  |  17 ++-
 .../kylin/rest/service/IndexPlanService.java   |  66 +++---
 .../apache/kylin/rest/service/ModelService.java|  33 +++--
 .../kylin/rest/service/IndexPlanServiceTest.java   |  52 
 .../kylin/rest/service/ProjectServiceTest.java |   2 +-
 .../plugin/diagnose/DiagnoseExecutorPlugin.scala   |   9 +-
 .../common/logging/AbstractHdfsLogAppender.java|   7 +-
 .../common/logging/SparkDriverHdfsLogAppender.java |   2 +-
 .../logging/SparkExecutorHdfsLogAppender.java  |   4 +-
 .../org/apache/spark/utils/SparkHadoopUtils.scala  |  32 -
 .../org/apache/kylin/helper/RoutineToolHelper.java |   8 +-
 .../kylin/tool/garbage/ExecutableCleaner.java  |  10 ++
 .../apache/kylin/tool/garbage/GarbageCleaner.java  |  11 +-
 .../apache/kylin/tool/garbage/IndexCleaner.java| 129 ++-
 .../apache/kylin/tool/garbage/MetadataCleaner.java |   6 +
 .../apache/kylin/tool/garbage/SnapshotCleaner.java |  10 ++
 41 files changed, 888 insertions(+), 191 deletions(-)

diff --git a/pom.xml b/pom.xml
index 9b68f4a83d..ff1f965ea3 100644
--- a/pom.xml
+++ b/pom.xml
@@ -258,7 +258,11 @@
 
**/org/apache/kylin/tool/hadoop/KapGetPathWithoutSchemeAndAuthorityCLI.java,
 **/org/apache/kylin/engine/spark/streaming/**/*,
 **/org/apache/kylin/rest/security/KerberosLoginManager.java,
-**/org/apache/kylin/engine/spark/source/NSparkMetadataExplorer.java
+
**/org/apache/kylin/engine/spark/source/NSparkMetadataExplorer.java,
+**/org/apache/kylin/tool/garbage/IndexCleaner.java,
+
**/org/apache/kylin/spark/common/logging/SparkExecutorHdfsLogAppender.java,
+**/org/apache/kylin/rest/service/AbstractModelService.java,
+**/org/apache/spark/utils/SparkHadoopUtils.scala
 
 
 **/org/apache/kylin/**/*Exception.java,
@@ -304,7 +308,11 @@
 **/org/apache/kylin/rest/util/InitResourceGroupUtils.java,
 **/org/apache/kylin/rest/QueryNodeFilter.java,
 **/org/apache/kylin/rest/config/SwaggerConfig.java,
-**/org/apache/kylin/rest/config/SwaggerCompatibilityConfig.java
+**/org/apache/kylin/rest/config/SwaggerCompatibilityConfig.java,
+**/org/apache/kylin/tool/garbage/IndexCleaner.java,
+
**/org/apache/kylin/spark/common/logging/SparkExecutorHdfsLogAppender.java,
+**/org/apache/kylin/rest/service/AbstractModelService.java,
+**/org/apache/spark/utils/SparkHadoopUtils.scala
 
 kylin
 
diff --git 
a/src/common-server/src/test/java/org/apache/kylin/rest/controller/NBasicControllerTest.java
 
b/src/common-server/src/test/java/org/apache/kylin/rest/controller/NBasicControllerTest.java
index 34ac02cab2..586fc

(kylin) 13/14: KYLIN-5772 Fix vulnerability & excluding okio

2024-03-31 Thread liyang
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 90aa1def3d0bd2c1b2f6548923d9bde8af0d6cee
Author: Yinghao Lin 
AuthorDate: Wed Aug 2 11:36:43 2023 +0800

KYLIN-5772 Fix vulnerability & excluding okio
---
 pom.xml | 4 
 1 file changed, 4 insertions(+)

diff --git a/pom.xml b/pom.xml
index 04867d1347..765cbefa09 100644
--- a/pom.xml
+++ b/pom.xml
@@ -963,6 +963,10 @@
 org.codehaus.jackson
 jackson-mapper-asl
 
+
+com.squareup.okio
+okio
+
 
 ${hadoop.version}
 provided



(kylin) 04/14: KYLIN-5764 Sum expression supports if condition

2024-03-31 Thread liyang
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 cd09148868fd2b4cb5a08d236e1a0c0e8dd5eaea
Author: Pengfei Zhan 
AuthorDate: Wed Jul 5 17:50:34 2023 +0800

KYLIN-5764 Sum expression supports if condition
---
 .../kylin/query/engine/SumExprPlannerTest.xml  |  63 ++
 .../resources/query/sql_sum_expr/query00-if.sql|  45 +
 .../apache/kylin/query/util/AggExpressionUtil.java | 215 -
 3 files changed, 141 insertions(+), 182 deletions(-)

diff --git 
a/src/kylin-it/src/test/resources/org/apache/kylin/query/engine/SumExprPlannerTest.xml
 
b/src/kylin-it/src/test/resources/org/apache/kylin/query/engine/SumExprPlannerTest.xml
index 0796314ef7..5cd88d79e1 100644
--- 
a/src/kylin-it/src/test/resources/org/apache/kylin/query/engine/SumExprPlannerTest.xml
+++ 
b/src/kylin-it/src/test/resources/org/apache/kylin/query/engine/SumExprPlannerTest.xml
@@ -80,6 +80,69 @@ KapOLAPToEnumerableConverter
   KapTableScan(table=[[DEFAULT, TEST_COUNTRY]], 
ctx=[], fields=[[0, 1, 2, 3]])
 KapTableScan(table=[[DEFAULT, TEST_COUNTRY]], ctx=[], 
fields=[[0, 1, 2, 3]])
 ]]>
+
+
+
+
+
+
+
 
 
 

(kylin) 11/14: KYLIN-5770 Upgrade spring-security-config from 5.7.8 from 5.7.10

2024-03-31 Thread liyang
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 3dd581ecfa47477892da5590d168ccf6b28e5f13
Author: jlf 
AuthorDate: Wed Jul 26 22:02:04 2023 +0800

KYLIN-5770 Upgrade spring-security-config from 5.7.8 from 5.7.10
---
 pom.xml | 8 +++-
 1 file changed, 7 insertions(+), 1 deletion(-)

diff --git a/pom.xml b/pom.xml
index ff1f965ea3..04867d1347 100644
--- a/pom.xml
+++ b/pom.xml
@@ -218,6 +218,7 @@
 2.7.12
 2.6.10
 2.6.1-kylin-r4
+
5.7.10
 
1.0.10.RELEASE
 5.3.26
 2.6.6
@@ -1359,7 +1360,7 @@
 
 
 com.twitter
- parquet-hadoop-bundle
+parquet-hadoop-bundle
 
 
 org.apache.parquet
@@ -2411,6 +2412,11 @@
 
 
 
+
+org.springframework.security
+spring-security-config
+${spring.framework.security.config.version}
+
 
 org.springframework.security.extensions
 spring-security-saml2-core



(kylin) 08/14: KYLIN-5745 Using a global thread pool to clean underlying storages

2024-03-31 Thread liyang
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 180ff07afeaf64da8e565b7aa5882c3a89f1c268
Author: fengguangyuan 
AuthorDate: Sat Jul 1 12:07:43 2023 +0800

KYLIN-5745 Using a global thread pool to clean underlying storages

1. Using a global thread pool to clean underlying storages;
2. Launching cleaning tasks in the local thread and to ignore
FileNotFoundException while collecting HDFS files.

Co-authored-by: Guangyuan Feng 
---
 .../apache/kylin/rest/config/AppInitializer.java   |   7 +
 .../kylin/rest/service/AsyncTaskService.java   |   9 +-
 .../org/apache/kylin/common/KylinConfigBase.java   |   8 +
 .../kylin/metadata/query/QueryHistoryDAO.java  |   6 +-
 .../kylin/metadata/query/RDBMSQueryHistoryDAO.java |  13 +-
 .../metadata/query/RDBMSQueryHistoryDaoTest.java   |   2 +-
 .../apache/kylin/rest/service/ScheduleService.java |  10 +-
 .../kylin/rest/service/MetaStoreService.java   |  10 +-
 .../rest/service/MetaStoreTenantServiceTest.java   |  10 +-
 .../org/apache/kylin/rest/InitConfiguration.java   |   1 -
 .../org/apache/kylin/rest/HAConfigurationTest.java |   6 +-
 .../org/apache/kylin/helper/RoutineToolHelper.java |  55 +++-
 .../tool/garbage/AbstractComparableCleanTask.java  |  93 ++
 .../tool/garbage/CleanTaskExecutorService.java | 236 +++
 .../kylin/tool/garbage/PriorityExecutor.java   |  71 +
 .../apache/kylin/tool/garbage/StorageCleaner.java  |  28 +-
 .../kylin/tool/garbage/StorageCleanerCLI.java  |  18 +-
 .../apache/kylin/tool/routine/FastRoutineTool.java |   1 +
 .../org/apache/kylin/tool/routine/RoutineTool.java |  24 +-
 .../org/apache/kylin/tool/util/MetadataUtil.java   |   9 +-
 .../garbage/CleanTaskExecutorServiceTests.java | 324 +
 21 files changed, 889 insertions(+), 52 deletions(-)

diff --git 
a/src/common-service/src/main/java/org/apache/kylin/rest/config/AppInitializer.java
 
b/src/common-service/src/main/java/org/apache/kylin/rest/config/AppInitializer.java
index 5a2a833305..35af91a415 100644
--- 
a/src/common-service/src/main/java/org/apache/kylin/rest/config/AppInitializer.java
+++ 
b/src/common-service/src/main/java/org/apache/kylin/rest/config/AppInitializer.java
@@ -60,6 +60,8 @@ import 
org.apache.kylin.rest.service.task.QueryHistoryTaskScheduler;
 import org.apache.kylin.rest.util.JStackDumpTask;
 import org.apache.kylin.streaming.jobs.StreamingJobListener;
 import org.apache.kylin.tool.daemon.KapGuardianHATask;
+import org.apache.kylin.tool.garbage.CleanTaskExecutorService;
+import org.apache.kylin.tool.garbage.PriorityExecutor;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.context.event.ApplicationReadyEvent;
 import org.springframework.context.ApplicationContext;
@@ -175,6 +177,11 @@ public class AppInitializer {
 log.info("KylinConfig in env, ID is {}", kylinConfig.hashCode());
 log.info("KylinConfig in env, metadata is {}", 
kylinConfig.getMetadataUrl());
 log.info("KylinConfig in env, working dir is {}", 
kylinConfig.getHdfsWorkingDirectory());
+
+// Init global static instances
+CleanTaskExecutorService.getInstance().bindWorkingPool(
+() -> PriorityExecutor.newWorkingThreadPool(
+"clean-storages-pool", 
kylinConfig.getStorageCleanTaskConcurrency()));
 }
 
 private void warmUpSystemCache() {
diff --git 
a/src/common-service/src/main/java/org/apache/kylin/rest/service/AsyncTaskService.java
 
b/src/common-service/src/main/java/org/apache/kylin/rest/service/AsyncTaskService.java
index a343a464c6..8046f0c62a 100644
--- 
a/src/common-service/src/main/java/org/apache/kylin/rest/service/AsyncTaskService.java
+++ 
b/src/common-service/src/main/java/org/apache/kylin/rest/service/AsyncTaskService.java
@@ -27,6 +27,7 @@ import java.time.ZoneOffset;
 import java.util.List;
 import java.util.Locale;
 import java.util.concurrent.Future;
+import java.util.concurrent.TimeUnit;
 import java.util.stream.Collectors;
 
 import javax.servlet.ServletOutputStream;
@@ -50,6 +51,7 @@ import org.apache.kylin.metadata.query.QueryHistoryInfo;
 import org.apache.kylin.metadata.query.QueryHistoryRequest;
 import org.apache.kylin.metadata.query.QueryHistorySql;
 import org.apache.kylin.metadata.query.util.QueryHistoryUtil;
+import org.apache.kylin.tool.garbage.CleanTaskExecutorService;
 import org.apache.kylin.tool.garbage.StorageCleaner;
 import org.springframework.scheduling.annotation.Async;
 import org.springframework.scheduling.annotation.AsyncResult;
@@ -69,8 +71,11 @@ public class AsyncTaskService implements 
AsyncTaskServiceSupporter {
 
 long startAt = System.currentTimeMillis();
 try {
-val storageCleaner = new StorageCle

(kylin) 12/14: KYLIN-5771 Query cannot be interrupted during segment pruning

2024-03-31 Thread liyang
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 64b52dea660fc5feba34b8650557f1323d55b28b
Author: fengguangyuan 
AuthorDate: Thu Jul 27 15:46:27 2023 +0800

KYLIN-5771 Query cannot be interrupted during segment pruning

Co-authored-by: Guangyuan Feng 
---
 .../kylin/query/util/QueryInterruptChecker.java|  53 +++-
 .../apache/kylin/query/util/SlowQueryDetector.java |   2 +-
 .../query/routing/PartitionPruningRuleTest.java| 313 +
 .../query/routing/SegmentPruningRuleTest.java  | 277 ++
 .../kylin/query/routing/PartitionPruningRule.java  |  15 +
 .../kylin/query/routing/SegmentPruningRule.java|  33 ++-
 .../kylin/query/util/QueryContextCutter.java   |   5 +
 7 files changed, 689 insertions(+), 9 deletions(-)

diff --git 
a/src/core-metadata/src/main/java/org/apache/kylin/query/util/QueryInterruptChecker.java
 
b/src/core-metadata/src/main/java/org/apache/kylin/query/util/QueryInterruptChecker.java
index b163cc5a31..df4eb94589 100644
--- 
a/src/core-metadata/src/main/java/org/apache/kylin/query/util/QueryInterruptChecker.java
+++ 
b/src/core-metadata/src/main/java/org/apache/kylin/query/util/QueryInterruptChecker.java
@@ -20,6 +20,7 @@ package org.apache.kylin.query.util;
 
 import org.apache.kylin.common.KylinConfig;
 import org.apache.kylin.common.QueryContext;
+import org.apache.kylin.common.exception.KylinRuntimeException;
 import org.apache.kylin.common.exception.KylinTimeoutException;
 import org.apache.kylin.query.exception.UserStopQueryException;
 
@@ -32,15 +33,65 @@ public class QueryInterruptChecker {
 // This is Utils.
 }
 
+/**
+ * @deprecated Use {@link 
this#checkQueryCanceledOrThreadInterrupted(String, String)} instead.
+ * The semantic of this method is confused in some scenarios.
+ */
+@Deprecated
 public static void checkThreadInterrupted(String errorMsgLog, String 
stepInfo) {
 if (Thread.currentThread().isInterrupted()) {
 log.error("{} {}", QueryContext.current().getQueryId(), 
errorMsgLog);
-if 
(SlowQueryDetector.getRunningQueries().get(Thread.currentThread()).isStopByUser())
 {
+if 
(SlowQueryDetector.getRunningQueries().containsKey(Thread.currentThread())
+&& 
SlowQueryDetector.getRunningQueries().get(Thread.currentThread()).isStopByUser())
 {
 throw new UserStopQueryException("");
 }
+
 QueryContext.current().getQueryTagInfo().setTimeout(true);
 throw new KylinTimeoutException("The query exceeds the set time 
limit of "
 + 
KylinConfig.getInstanceFromEnv().getQueryTimeoutSeconds() + "s. " + stepInfo);
 }
 }
+
+/**
+ * Within the global context, STOP is same to CANCEL, therefore to stop a 
query is equal to
+ * cancel a query.
+ * There are some possible reasons to cancel the query recorded in the 
current thread context.
+ * {@link UserStopQueryException} is for stopping the query from the 
request, see
+ * {@link SlowQueryDetector#stopQuery(String)}.
+ * {@link KylinTimeoutException} is for run out of the timeout of the 
query, see
+ * {@link SlowQueryDetector::checkTimeout()}.
+ * {@link KylinRuntimeException} is risking inconsistent states to stop 
the query.
+ * {@link InterruptedException} is for other interruptions.
+ * @param cause the reason of canceling the current query or interrupt the 
working thread
+ * @param step the processing point
+ */
+public static void checkQueryCanceledOrThreadInterrupted(String cause, 
String step) throws InterruptedException {
+SlowQueryDetector.QueryEntry entry = 
SlowQueryDetector.getRunningQueries().getOrDefault(Thread.currentThread(),
+null);
+if (entry != null) {
+if (entry.isStopByUser() && 
entry.getPlannerCancelFlag().isCancelRequested()
+&& Thread.currentThread().isInterrupted()) {
+throw new UserStopQueryException(String.format("Manually stop 
the query %s. Caused: %s. Step: %s",
+entry.getQueryId(), cause, step));
+}
+
+if (entry.getPlannerCancelFlag().isCancelRequested() && 
Thread.currentThread().isInterrupted()) {
+QueryContext.current().getQueryTagInfo().setTimeout(true);
+throw new KylinTimeoutException(String.format("Run out of time 
of the query %s. Caused: %s. Step: %s",
+entry.getQueryId(), cause, step));
+}
+
+if (entry.isStopByUser() || 
entry.getPlannerCancelFlag().isCancelRequested()) {
+throw new UserStopQueryException(String.format(
+"You are trying to cancel the query %

(kylin) 10/14: KYLIN-5769 Support split function

2024-03-31 Thread liyang
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 738cf4af01fca030751eaff0b1ea3a59340d83eb
Author: Pengfei Zhan 
AuthorDate: Wed Jul 5 22:12:00 2023 +0800

KYLIN-5769 Support split function
---
 .../apache/kylin/metadata/datatype/DataType.java   |   2 +-
 .../rest/controller/NBuildAndQueryMetricsTest.java |  15 ++-
 .../kylin/query/engine/QueryRoutingEngine.java |  80 +--
 .../org/apache/kylin/query/udf/SparkStringUDF.java |   7 +-
 .../engine/spark/builder/CreateFlatTable.scala |  26 ++---
 .../job/stage/build/FlatTableAndDictBase.scala |  82 +---
 .../spark/smarter/IndexDependencyParser.scala  |   7 +-
 .../spark/utils/ComputedColumnEvalUtilTest.java|   2 +
 .../kylin/query/runtime/ExpressionConverter.scala  |   2 +-
 .../kylin/query/runtime/plan/TableScanPlan.scala   |  15 +--
 .../org/apache/spark/sql/SparderTypeUtilTest.scala |  29 +-
 .../org/apache/spark/sql/SparderTypeUtil.scala | 107 -
 .../apache/spark/sql/common/SparderQueryTest.scala |  75 +++
 13 files changed, 254 insertions(+), 195 deletions(-)

diff --git 
a/src/core-metadata/src/main/java/org/apache/kylin/metadata/datatype/DataType.java
 
b/src/core-metadata/src/main/java/org/apache/kylin/metadata/datatype/DataType.java
index 81e5881ef5..20057ad919 100644
--- 
a/src/core-metadata/src/main/java/org/apache/kylin/metadata/datatype/DataType.java
+++ 
b/src/core-metadata/src/main/java/org/apache/kylin/metadata/datatype/DataType.java
@@ -153,7 +153,7 @@ public class DataType implements Serializable {
 LEGACY_TYPE_MAP.put("hllc16", "hllc(16)");
 }
 
-private static final ConcurrentMap CACHE = new 
ConcurrentHashMap();
+private static final ConcurrentMap CACHE = new 
ConcurrentHashMap<>();
 
 public static final DataType ANY = DataType.getType(ANY_STR);
 
diff --git 
a/src/kylin-server-it/src/test/java/org/apache/kylin/rest/controller/NBuildAndQueryMetricsTest.java
 
b/src/kylin-server-it/src/test/java/org/apache/kylin/rest/controller/NBuildAndQueryMetricsTest.java
index 7ff9b40cf9..00f8522c4a 100644
--- 
a/src/kylin-server-it/src/test/java/org/apache/kylin/rest/controller/NBuildAndQueryMetricsTest.java
+++ 
b/src/kylin-server-it/src/test/java/org/apache/kylin/rest/controller/NBuildAndQueryMetricsTest.java
@@ -32,6 +32,9 @@ import org.apache.kylin.common.util.TempMetadataBuilder;
 import org.apache.kylin.engine.spark.ExecutableUtils;
 import org.apache.kylin.engine.spark.job.NSparkCubingJob;
 import org.apache.kylin.engine.spark.merger.AfterBuildResourceMerger;
+import org.apache.kylin.guava30.shaded.common.base.Preconditions;
+import org.apache.kylin.guava30.shaded.common.collect.Lists;
+import org.apache.kylin.guava30.shaded.common.collect.Sets;
 import org.apache.kylin.job.engine.JobEngineConfig;
 import org.apache.kylin.job.execution.ExecutableState;
 import org.apache.kylin.job.execution.NExecutableManager;
@@ -77,10 +80,6 @@ import 
org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.authentication.TestingAuthenticationToken;
 import org.springframework.security.core.context.SecurityContextHolder;
 
-import org.apache.kylin.guava30.shaded.common.base.Preconditions;
-import org.apache.kylin.guava30.shaded.common.collect.Lists;
-import org.apache.kylin.guava30.shaded.common.collect.Sets;
-
 import lombok.val;
 import lombok.var;
 import lombok.extern.slf4j.Slf4j;
@@ -181,7 +180,7 @@ public class NBuildAndQueryMetricsTest extends 
AbstractMVCIntegrationTestCase {
 projectManager.updateProject(projectInstance, 
projectInstanceUpdate.getName(),
 projectInstanceUpdate.getDescription(), 
projectInstanceUpdate.getOverrideKylinProps());
 
-Preconditions.checkArgument(projectInstance != null);
+Preconditions.checkNotNull(projectInstance);
 
 for (String table : projectInstance.getTables()) {
 if (!"DEFAULT.TEST_KYLIN_FACT".equals(table) && 
!"DEFAULT.TEST_ACCOUNT".equals(table)) {
@@ -254,6 +253,12 @@ public class NBuildAndQueryMetricsTest extends 
AbstractMVCIntegrationTestCase {
 assertMetric(sql, 30);
 }
 
+@Test
+public void testSplitFunction() throws Exception {
+String sql = "select split(account_id, '-')[0] from test_account limit 
30";
+assertMetric(sql, 30);
+}
+
 @Test
 public void testMetricsScanForTableIndex() throws Exception {
 String sql = "select count(distinct case when trans_id > 100 then 
order_id else 0 end),"
diff --git 
a/src/query/src/main/java/org/apache/kylin/query/engine/QueryRoutingEngine.java 
b/src/query/src/main/java/org/apache/kylin/query/engine/QueryRoutingEngine.java
index 0aa304edf6..081edc0d0a 100644
--- 
a/src/query/src/main/java/org/apache/kylin/q

(kylin) branch kylin5 updated (bcd4220ef2 -> ad52aada8f)

2024-03-31 Thread liyang
This is an automated email from the ASF dual-hosted git repository.

liyang pushed a change to branch kylin5
in repository https://gitbox.apache.org/repos/asf/kylin.git


from bcd4220ef2 update spark version to 3.2.0-kylin-4.6.12.0
 new d977ce7bfc KYLIN-5757 No way to deselect query objects after selecting 
all of them
 new 71a7a52d66 KYLIN-5763 Fix query history model filter
 new 046c97f54c KYLIN-5759 Log governance of job building log
 new cd09148868 KYLIN-5764 Sum expression supports if condition
 new b7615c56bb KYLIN-5765 Optimization of registering udf operators
 new a8ad269b3c KYLIN-5766 Normalize query cache key
 new d3b4469484 KYLIN-5767 Calculate total rows wrongly when connecting 
jdbc datasource
 new 180ff07afe KYLIN-5745 Using a global thread pool to clean underlying 
storages
 new 60da9e0ce1 KYLIN-5768 Refine and adjust some code for localCache
 new 738cf4af01 KYLIN-5769 Support split function
 new 3dd581ecfa KYLIN-5770 Upgrade spring-security-config from 5.7.8 from 
5.7.10
 new 64b52dea66 KYLIN-5771 Query cannot be interrupted during segment 
pruning
 new 90aa1def3d KYLIN-5772 Fix vulnerability & excluding okio
 new ad52aada8f KYLIN-5773 update spark version to 3.2.0-kylin-4.6.13.0

The 14 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 pom.xml|  26 +-
 .../rest/controller/NBasicControllerTest.java  |   2 +-
 .../apache/kylin/rest/config/AppInitializer.java   |   7 +
 .../org/apache/kylin/rest/request/SQLRequest.java  |   4 +-
 .../kylin/rest/service/AsyncTaskService.java   |   9 +-
 .../apache/kylin/rest/service/ProjectService.java  |   9 +-
 .../org/apache/kylin/common/KylinConfigBase.java   |  16 +
 .../apache/kylin/common/constant/LogConstant.java  |   1 +
 .../kylin/common/logging/SetLogCategory.java   |  22 +-
 .../kylin/common/logging/SetLogCategoryTest.java   | 131 +
 .../kylin/job/execution/ExecutableThread.java  |   3 +-
 .../org/apache/kylin/job/manager/JobManager.java   |  30 +-
 .../runners/AbstractDefaultSchedulerRunner.java|   3 +-
 .../org/apache/kylin/job/runners/JobRunner.java|   3 +-
 .../kylin/metadata/cube/model/IndexPlan.java   | 136 ++---
 .../cube/optimization/AbstractOptStrategy.java |   4 +-
 .../cube/optimization/GarbageLayoutType.java   |   2 +-
 .../optimization/IncludedLayoutOptStrategy.java|   2 +-
 .../metadata/cube/optimization/IndexOptimizer.java |  14 +-
 .../cube/optimization/IndexOptimizerFactory.java   |  12 +-
 .../optimization/LowFreqLayoutOptStrategy.java |   2 +-
 .../cube/optimization/MergedLayoutOptStrategy.java |  59 
 .../optimization/SimilarLayoutOptStrategy.java |   2 +-
 .../cube/optimization/event/ApproveRecsEvent.java} |  13 +-
 .../cube/optimization/event/BuildIndexEvent.java}  |  11 +-
 .../cube/storage/GarbageStorageCollector.java  |   2 +-
 .../metadata/cube/utils/IndexPlanReduceUtil.java   |  52 +++-
 .../apache/kylin/metadata/datatype/DataType.java   |   2 +-
 .../metadata/query/JdbcQueryHistoryStore.java  |  30 +-
 .../kylin/metadata/query/QueryHistoryDAO.java  |   8 +-
 .../kylin/metadata/query/QueryHistoryRequest.java  |   2 +
 .../kylin/metadata/query/RDBMSQueryHistoryDAO.java |  17 +-
 .../kylin/query/util/QueryInterruptChecker.java|  53 +++-
 .../apache/kylin/query/util/SlowQueryDetector.java |   2 +-
 .../storage/ProjectStorageInfoCollectorTest.java   |  74 -
 .../cube/utils/IndexPlanReduceUtilTest.java|  27 +-
 .../metadata/query/RDBMSQueryHistoryDaoTest.java   |  44 ++-
 .../kylin/rest/initialize/BuildAppInitializer.java |   5 +
 .../rest/scheduler/AbstractSchedulerRunnable.java  |   3 +-
 .../kylin/rest/service/ModelBuildService.java  |  38 ++-
 .../scheduler/AbstractSchedulerRunnableTest.java   |   3 +-
 .../kylin/rest/service/ModelServiceBuildTest.java  |  36 ++-
 .../apache/kylin/rest/service/ScheduleService.java |  10 +-
 .../query/routing/PartitionPruningRuleTest.java| 313 
 .../query/routing/SegmentPruningRuleTest.java  | 277 ++
 .../kylin/query/engine/SumExprPlannerTest.xml  |  63 
 .../sql_sum_expr/{query00.sql => query00-if.sql}   |   8 +-
 .../rest/controller/NBuildAndQueryMetricsTest.java |  15 +-
 .../kylin/rest/controller/NProjectController.java  |  14 +-
 .../rest/controller/NProjectControllerTest.java|   2 +-
 .../kylin/rest/service/AbstractModelService.java   | 114 +++-
 .../kylin/rest/service/BaseIndexUpdateHelper.java  |  17 +-
 .../kylin/rest/service/IndexPlanService.java   |  66 +++--
 .../kylin/rest/service/MetaStoreService.java   |  10 +-
 .../apache/kylin/rest/service/ModelService.java|  33 

(kylin) 07/14: KYLIN-5767 Calculate total rows wrongly when connecting jdbc datasource

2024-03-31 Thread liyang
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 d3b4469484a79102071db26114f6602b30d70f43
Author: Liang.Hua <36814772+jacob...@users.noreply.github.com>
AuthorDate: Fri Jul 21 16:31:39 2023 +0800

KYLIN-5767 Calculate total rows wrongly when connecting jdbc datasource

-
Co-authored-by: liang.hua 
---
 .../kylin/engine/spark/NSparkCubingEngine.java |  4 
 .../engine/spark/builder/SnapshotBuilder.scala |  7 +--
 .../engine/spark/job/NSparkCubingJobTest.java  |  8 
 .../kylin/source/jdbc/DefaultSourceConnector.java  |  5 +
 .../apache/kylin/source/jdbc/ISourceConnector.java |  3 +++
 .../apache/kylin/source/jdbc/JdbcSourceInput.java  | 11 ++
 .../kylin/source/jdbc/JdbcSourceInputTest.java | 24 ++
 7 files changed, 60 insertions(+), 2 deletions(-)

diff --git 
a/src/spark-project/engine-spark/src/main/java/org/apache/kylin/engine/spark/NSparkCubingEngine.java
 
b/src/spark-project/engine-spark/src/main/java/org/apache/kylin/engine/spark/NSparkCubingEngine.java
index 00078a86ad..76a2bcb9ff 100644
--- 
a/src/spark-project/engine-spark/src/main/java/org/apache/kylin/engine/spark/NSparkCubingEngine.java
+++ 
b/src/spark-project/engine-spark/src/main/java/org/apache/kylin/engine/spark/NSparkCubingEngine.java
@@ -50,6 +50,10 @@ public class NSparkCubingEngine implements NCubingEngine {
  * @return the Dataset, its schema consists of table column's 
name, for example, [column1,column2,column3]
  */
 Dataset getSourceData(TableDesc table, SparkSession ss, 
Map parameters);
+
+default Long getSourceDataCount(TableDesc table, SparkSession ss, 
Map parameters) {
+return getSourceData(table, ss, parameters).count();
+}
 }
 
 public interface NSparkCubingStorage {
diff --git 
a/src/spark-project/engine-spark/src/main/scala/org/apache/kylin/engine/spark/builder/SnapshotBuilder.scala
 
b/src/spark-project/engine-spark/src/main/scala/org/apache/kylin/engine/spark/builder/SnapshotBuilder.scala
index e217a31c99..1a9ef63544 100644
--- 
a/src/spark-project/engine-spark/src/main/scala/org/apache/kylin/engine/spark/builder/SnapshotBuilder.scala
+++ 
b/src/spark-project/engine-spark/src/main/scala/org/apache/kylin/engine/spark/builder/SnapshotBuilder.scala
@@ -199,8 +199,11 @@ class SnapshotBuilder(var jobId: String) extends Logging 
with Serializable {
   case e: Throwable => logWarning(s"Calculate table 
${tableDesc.getIdentity}'s total rows exception", e)
 }
 logInfo(s"Calculate table ${tableDesc.getIdentity}'s total rows from 
source data")
-val sourceData = getSourceData(ss, tableDesc)
-val totalRows = sourceData.count()
+val params = NProjectManager.getInstance(KylinConfig.getInstanceFromEnv)
+  .getProject(tableDesc.getProject).getLegalOverrideKylinProps
+val totalRows = SourceFactory
+  .createEngineAdapter(tableDesc, 
classOf[NSparkCubingEngine.NSparkCubingSource])
+  .getSourceDataCount(tableDesc, ss, params)
 logInfo(s"Table ${tableDesc.getIdentity}'s total rows is ${totalRows}'")
 totalRows
   }
diff --git 
a/src/spark-project/engine-spark/src/test/java/org/apache/kylin/engine/spark/job/NSparkCubingJobTest.java
 
b/src/spark-project/engine-spark/src/test/java/org/apache/kylin/engine/spark/job/NSparkCubingJobTest.java
index b86eb333f3..2078e44056 100644
--- 
a/src/spark-project/engine-spark/src/test/java/org/apache/kylin/engine/spark/job/NSparkCubingJobTest.java
+++ 
b/src/spark-project/engine-spark/src/test/java/org/apache/kylin/engine/spark/job/NSparkCubingJobTest.java
@@ -163,6 +163,14 @@ public class NSparkCubingJobTest extends 
NLocalWithSparkSessionTest {
 getLookTables(df).forEach(table -> 
Assert.assertNotNull(table.getLastSnapshotPath()));
 }
 
+@Test
+public void testCalculateTableTotalRows() {
+NTableMetadataManager tableMetadataManager = 
NTableMetadataManager.getInstance(config, getProject());
+TableDesc tableDesc = 
tableMetadataManager.getTableDesc("DEFAULT.TEST_ORDER");
+long totalRows = new SnapshotBuilder().calculateTableTotalRows(null, 
tableDesc, ss);
+Assert.assertEquals(5000, totalRows);
+}
+
 private Set getLookTables(NDataflow df) {
 return 
df.getModel().getLookupTables().stream().map(TableRef::getTableDesc).collect(Collectors.toSet());
 }
diff --git 
a/src/spark-project/source-jdbc/src/main/java/org/apache/kylin/source/jdbc/DefaultSourceConnector.java
 
b/src/spark-project/source-jdbc/src/main/java/org/apache/kylin/source/jdbc/DefaultSourceConnector.java
index 1ea35704ed..1723810955 100644
--- 
a/src/spark-project/source-jdbc/src/main/java/org/apache/kylin/source/jdbc/DefaultSourceConnector.java
+++ 
b/src/spark-project/source-jdbc/src/main/java/org/

(kylin) 06/14: KYLIN-5766 Normalize query cache key

2024-03-31 Thread liyang
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 a8ad269b3c37d8670f0c5205ecef9d60a2796df3
Author: lixiang <447399...@qq.com>
AuthorDate: Fri Jul 21 15:29:49 2023 +0800

KYLIN-5766 Normalize query cache key
---
 .../org/apache/kylin/rest/request/SQLRequest.java  |   4 +-
 .../apache/kylin/query/util/WhiteSpaceParser.jj| 887 +
 .../apache/kylin/rest/service/QueryService.java|   6 +
 .../kylin/query/util/WhiteSpaceParserTest.java | 110 +++
 4 files changed, 1006 insertions(+), 1 deletion(-)

diff --git 
a/src/common-service/src/main/java/org/apache/kylin/rest/request/SQLRequest.java
 
b/src/common-service/src/main/java/org/apache/kylin/rest/request/SQLRequest.java
index 58d9a82596..2bf34c75c5 100644
--- 
a/src/common-service/src/main/java/org/apache/kylin/rest/request/SQLRequest.java
+++ 
b/src/common-service/src/main/java/org/apache/kylin/rest/request/SQLRequest.java
@@ -77,13 +77,15 @@ public class SQLRequest implements Serializable, 
ProjectInsensitiveRequest, Vali
 @Size(max = 256)
 private String user_defined_tag;
 
+private String normalizedSql;
+
 protected volatile Object cacheKey = null;
 
 public Object getCacheKey() {
 if (cacheKey != null)
 return cacheKey;
 
-cacheKey = Lists.newArrayList(sql.replaceAll("[ ]", " "), //
+cacheKey = Lists.newArrayList(normalizedSql, //
 project, //
 offset, //
 limit, //
diff --git 
a/src/query-common/src/main/codegen/javacc/org/apache/kylin/query/util/WhiteSpaceParser.jj
 
b/src/query-common/src/main/codegen/javacc/org/apache/kylin/query/util/WhiteSpaceParser.jj
new file mode 100644
index 00..c07936792a
--- /dev/null
+++ 
b/src/query-common/src/main/codegen/javacc/org/apache/kylin/query/util/WhiteSpaceParser.jj
@@ -0,0 +1,887 @@
+options {
+STATIC = false;
+IGNORE_CASE = true;
+UNICODE_INPUT = true;
+}
+
+PARSER_BEGIN(WhiteSpaceParser)
+package org.apache.kylin.query.util;
+
+import java.io.StringReader;
+import java.nio.charset.Charset;
+import java.util.List;
+import java.util.Locale;
+import java.util.Arrays;
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.Set;
+import java.util.Scanner;
+
+import org.apache.commons.lang3.StringUtils;
+
+import org.apache.kylin.guava30.shaded.common.collect.ImmutableSet;
+import org.apache.kylin.guava30.shaded.common.collect.Lists;
+
+import lombok.extern.slf4j.Slf4j;
+
+@Slf4j
+public class WhiteSpaceParser {
+
+private static final String CEIL_FLOOR_EXCEPTION_MSG = "%s(exp to 
timeunit) encounters timeunit %s, but only supports %s";
+private static final String EXTRACT_FROM_EXCEPTION_MSG = "extract(timeunit 
from exp) encounters timeunit %s, but only supports %s";
+private static final String TIMESTAMP_DIFF_ADD_EXCEPTION_MSG = 
"%s(timeunit, exp1, exp2) encounters timeunit %s, but only supports %s";
+private static final String COMMA_STR = ",";
+private static final String SPACE_STR = " ";
+private static final char SPACE_CHAR = ' ';
+private static final String QUOTE_STR = "'";
+private static final Set OPERATORS = new 
HashSet(Arrays.asList("+", "-", "*", "/", "%", "=",">=", "<=", "!=", "<>", 
"||"));
+
+private EscapeDialect dialect = EscapeDialect.DEFAULT;
+
+  public static void main(String[] args) throws Exception {
+String sql = "select  *  col1,\ncol2,col3  from \n tableA  \\r 
  a left \t\n table\rb (  select *  from  t) ";
+WhiteSpaceParser whiteSpaceParser = new WhiteSpaceParser(new 
StringReader(sql));
+System.out.println("transformed sql is :" + whiteSpaceParser.parse());
+  }
+
+private static String normalize(String str) {
+  if (str.equals(COMMA_STR)) {
+str = str + SPACE_STR;
+  } else if (OPERATORS.contains(str)) {
+str = SPACE_STR + str + SPACE_STR;
+  }
+  return str;
+}
+
+  public WhiteSpaceParser(EscapeDialect newDialect, String SQL) {
+this(new StringReader(SQL));
+this.dialect = newDialect;
+  }
+
+private static boolean needDropPreSpace(String str) {
+return COMMA_STR.equals(str) || OPERATORS.contains(str)
+|| (StringUtils.isBlank(str) && !SPACE_STR.equals(str));
+}
+
+ private static boolean skipSpace(String str) {
+  return COMMA_STR.equals(str) || OPERATORS.contains(str);
+  }
+
+  private static void appendExpression(StringBuilder sb, String innerString) {
+  if (sb.length() != 0) {
+  int last = sb.length() - 1;
+  if (sb.charAt(last) != SPACE_CHAR && 
innerStri

(kylin) 05/14: KYLIN-5765 Optimization of registering udf operators

2024-03-31 Thread liyang
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 rexToSqlMap;
 
+private static final Set REGISTERED_UDFS = registerUdfs();
+
 public OLAPRexSqlStandardConvertletTable(RexCall call, Map rexToSqlMap) {
 super();
 this.rexToSqlMap = rexToSqlMap;
@@ -303,18 +305,7 @@ public class RexToTblColRefTranslator {
 }
 
 private void registerUdfOperator(RexCall call) {
-Set 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 registerUdfs() {
+Set 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 initTimeUnitFunctionMap() {
 Map rst = Maps.newHashMap();
 rst.putIfAbsent(TimeUnit.YEAR, SqlStdOperatorTable.YEAR);



(kylin) 03/14: KYLIN-5759 Log governance of job building log

2024-03-31 Thread liyang
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 046c97f54c5fa582f8983c794bf0d5a4a0cfd15e
Author: jlf 
AuthorDate: Thu Jul 6 16:10:53 2023 +0800

KYLIN-5759 Log governance of job building log

1. move build log in kylin.build.log
2. add LogConstant.SMART_CATEGORY
---
 .../apache/kylin/common/constant/LogConstant.java  |   1 +
 .../kylin/common/logging/SetLogCategory.java   |  22 +++-
 .../kylin/common/logging/SetLogCategoryTest.java   | 131 +
 .../kylin/job/execution/ExecutableThread.java  |   3 +-
 .../org/apache/kylin/job/manager/JobManager.java   |  30 +++--
 .../runners/AbstractDefaultSchedulerRunner.java|   3 +-
 .../org/apache/kylin/job/runners/JobRunner.java|   3 +-
 .../rest/scheduler/AbstractSchedulerRunnable.java  |   3 +-
 .../scheduler/AbstractSchedulerRunnableTest.java   |   3 +-
 .../kylin/query/routing/RealizationChooser.java|   3 +-
 10 files changed, 180 insertions(+), 22 deletions(-)

diff --git 
a/src/core-common/src/main/java/org/apache/kylin/common/constant/LogConstant.java
 
b/src/core-common/src/main/java/org/apache/kylin/common/constant/LogConstant.java
index 4a5293dffa..5fd9aae424 100644
--- 
a/src/core-common/src/main/java/org/apache/kylin/common/constant/LogConstant.java
+++ 
b/src/core-common/src/main/java/org/apache/kylin/common/constant/LogConstant.java
@@ -27,4 +27,5 @@ public class LogConstant {
 public static final String METADATA_CATEGORY = "metadata";
 public static final String QUERY_CATEGORY = "query";
 public static final String BUILD_CATEGORY = "build";
+public static final String SMART_CATEGORY = "smart";
 }
diff --git 
a/src/core-common/src/main/java/org/apache/kylin/common/logging/SetLogCategory.java
 
b/src/core-common/src/main/java/org/apache/kylin/common/logging/SetLogCategory.java
index eb04aa9414..284380c8c4 100644
--- 
a/src/core-common/src/main/java/org/apache/kylin/common/logging/SetLogCategory.java
+++ 
b/src/core-common/src/main/java/org/apache/kylin/common/logging/SetLogCategory.java
@@ -18,19 +18,35 @@
 package org.apache.kylin.common.logging;
 
 import java.io.Closeable;
+import java.util.Deque;
+import java.util.LinkedList;
 
+import org.apache.commons.lang3.StringUtils;
 import org.apache.logging.log4j.ThreadContext;
+import org.springframework.util.CollectionUtils;
 
 public class SetLogCategory implements Closeable {
 
-private static final String KEY = "logCategory";
+private static final String LOG_CATEGORY = "logCategory";
+private static final ThreadLocal> categoryThreadLocal = 
ThreadLocal.withInitial(LinkedList::new);
 
+// when category exist, and use new category to logger message, will push 
oldSetLogCategory
 public SetLogCategory(String category) {
-ThreadContext.put(KEY, category);
+String oldCategory = ThreadContext.get(LOG_CATEGORY);
+ThreadContext.put(LOG_CATEGORY, category);
+if (StringUtils.isNotBlank(oldCategory)) {
+categoryThreadLocal.get().offerFirst(oldCategory);
+}
 }
 
 @Override
 public void close() {
-ThreadContext.remove(KEY);
+ThreadContext.remove(LOG_CATEGORY);
+if (!CollectionUtils.isEmpty(categoryThreadLocal.get())) {
+String oldCategory = categoryThreadLocal.get().pollFirst();
+if (StringUtils.isNotBlank(oldCategory)) {
+ThreadContext.put(LOG_CATEGORY, oldCategory);
+}
+}
 }
 }
diff --git 
a/src/core-common/src/test/java/org/apache/kylin/common/logging/SetLogCategoryTest.java
 
b/src/core-common/src/test/java/org/apache/kylin/common/logging/SetLogCategoryTest.java
new file mode 100644
index 00..b447cf65a8
--- /dev/null
+++ 
b/src/core-common/src/test/java/org/apache/kylin/common/logging/SetLogCategoryTest.java
@@ -0,0 +1,131 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.kylin.common.logging;
+
+import static org.awaitility.Awaitility.

(kylin) 14/14: KYLIN-5773 update spark version to 3.2.0-kylin-4.6.13.0

2024-03-31 Thread liyang
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 ad52aada8fb7a5b1620b076680ea48bfecb5e919
Author: huangsheng 
AuthorDate: Fri Jul 28 15:46:00 2023 +0800

KYLIN-5773 update spark version to 3.2.0-kylin-4.6.13.0
---
 pom.xml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/pom.xml b/pom.xml
index 765cbefa09..8f969b9a14 100644
--- a/pom.xml
+++ b/pom.xml
@@ -126,7 +126,7 @@
 
 2.0.2
 
-3.2.0-kylin-4.6.12.0
+3.2.0-kylin-4.6.13.0
 
 0.9.2-kylin-r4
 



(kylin) 02/14: KYLIN-5763 Fix query history model filter

2024-03-31 Thread liyang
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 71a7a52d669f3c33b6efd7f9bbc80a5b1dfd894a
Author: lixiang <447399...@qq.com>
AuthorDate: Wed Jul 5 19:47:38 2023 +0800

KYLIN-5763 Fix query history model filter
---
 .../metadata/query/JdbcQueryHistoryStore.java  | 13 +-
 .../kylin/metadata/query/QueryHistoryDAO.java  |  2 +-
 .../kylin/metadata/query/RDBMSQueryHistoryDAO.java |  4 +-
 .../metadata/query/RDBMSQueryHistoryDaoTest.java   |  5 +--
 .../kylin/rest/controller/NQueryController.java| 37 +++
 .../rest/controller/NQueryControllerTest.java  | 20 ++---
 .../rest/response/QueryHistoryFiltersResponse.java | 49 
 .../kylin/rest/service/QueryHistoryService.java| 52 +++---
 .../rest/service/QueryHistoryServiceTest.java  | 26 +++
 9 files changed, 131 insertions(+), 77 deletions(-)

diff --git 
a/src/core-metadata/src/main/java/org/apache/kylin/metadata/query/JdbcQueryHistoryStore.java
 
b/src/core-metadata/src/main/java/org/apache/kylin/metadata/query/JdbcQueryHistoryStore.java
index da5b152073..6ffbd9eac0 100644
--- 
a/src/core-metadata/src/main/java/org/apache/kylin/metadata/query/JdbcQueryHistoryStore.java
+++ 
b/src/core-metadata/src/main/java/org/apache/kylin/metadata/query/JdbcQueryHistoryStore.java
@@ -214,7 +214,7 @@ public class JdbcQueryHistoryStore {
 }
 }
 
-public List 
queryQueryHistoriesModelIds(QueryHistoryRequest request, int size) {
+public List 
queryQueryHistoriesModelIds(QueryHistoryRequest request) {
 try (SqlSession session = sqlSessionFactory.openSession()) {
 QueryStatisticsMapper mapper = 
session.getMapper(QueryStatisticsMapper.class);
 SelectStatementProvider statementProvider1 = 
selectDistinct(queryHistoryTable.engineType)
@@ -222,16 +222,7 @@ public class JdbcQueryHistoryStore {
 .where(queryHistoryTable.engineType, 
isNotEqualTo("NATIVE")) //
 .and(queryHistoryTable.projectName, 
isEqualTo(request.getProject())) //
 .build().render(RenderingStrategies.MYBATIS3);
-List engineTypes = 
mapper.selectMany(statementProvider1);
-
-SelectStatementProvider statementProvider2 = 
selectDistinct(queryHistoryRealizationTable.model)
-.from(queryHistoryRealizationTable) //
-.where(queryHistoryRealizationTable.projectName, 
isEqualTo(request.getProject())) //
-.limit(size) //
-.build().render(RenderingStrategies.MYBATIS3);
-List modelIds = 
mapper.selectMany(statementProvider2);
-engineTypes.addAll(modelIds);
-return engineTypes;
+return mapper.selectMany(statementProvider1);
 }
 }
 
diff --git 
a/src/core-metadata/src/main/java/org/apache/kylin/metadata/query/QueryHistoryDAO.java
 
b/src/core-metadata/src/main/java/org/apache/kylin/metadata/query/QueryHistoryDAO.java
index 882dc78477..66f1d4aa22 100644
--- 
a/src/core-metadata/src/main/java/org/apache/kylin/metadata/query/QueryHistoryDAO.java
+++ 
b/src/core-metadata/src/main/java/org/apache/kylin/metadata/query/QueryHistoryDAO.java
@@ -63,7 +63,7 @@ public interface QueryHistoryDAO {
 
 List getQueryHistoriesSubmitters(QueryHistoryRequest 
request, int size);
 
-List getQueryHistoriesModelIds(QueryHistoryRequest 
request, int size);
+List getQueryHistoriesModelIds(QueryHistoryRequest 
request);
 
 String getRealizationMetricMeasurement();
 
diff --git 
a/src/core-metadata/src/main/java/org/apache/kylin/metadata/query/RDBMSQueryHistoryDAO.java
 
b/src/core-metadata/src/main/java/org/apache/kylin/metadata/query/RDBMSQueryHistoryDAO.java
index 64d874d1e6..3592dbec22 100644
--- 
a/src/core-metadata/src/main/java/org/apache/kylin/metadata/query/RDBMSQueryHistoryDAO.java
+++ 
b/src/core-metadata/src/main/java/org/apache/kylin/metadata/query/RDBMSQueryHistoryDAO.java
@@ -184,8 +184,8 @@ public class RDBMSQueryHistoryDAO implements 
QueryHistoryDAO {
 return jdbcQueryHisStore.queryQueryHistoriesSubmitters(request, size);
 }
 
-public List getQueryHistoriesModelIds(QueryHistoryRequest 
request, int size) {
-return jdbcQueryHisStore.queryQueryHistoriesModelIds(request, size);
+public List getQueryHistoriesModelIds(QueryHistoryRequest 
request) {
+return jdbcQueryHisStore.queryQueryHistoriesModelIds(request);
 }
 
 public QueryStatistics getQueryCountAndAvgDuration(long startTime, long 
endTime, String project) {
diff --git 
a/src/core-metadata/src/test/java/org/apache/kylin/metadata/query/RDBMSQueryHistoryDaoTest.java
 
b/src/core-metadata/src/test/java/org/apache/kylin/metadata/query/RDBMSQueryHistoryDaoTest.java
index 2651f64b81..30cd2d37d0 100644
--- 
a/src/core-metadata/src/test

(kylin) 01/14: KYLIN-5757 No way to deselect query objects after selecting all of them

2024-03-31 Thread liyang
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 d977ce7bfc9a244d7dbb568ba75a58ab29648908
Author: Hang Jia <754332...@qq.com>
AuthorDate: Wed Jul 5 18:09:55 2023 +0800

KYLIN-5757 No way to deselect query objects after selecting all of them
---
 .../metadata/query/JdbcQueryHistoryStore.java  | 17 --
 .../kylin/metadata/query/QueryHistoryRequest.java  |  2 +
 .../metadata/query/RDBMSQueryHistoryDaoTest.java   | 37 +
 .../kylin/rest/controller/NQueryController.java| 12 +++--
 .../rest/controller/NQueryControllerTest.java  |  2 +-
 .../kylin/rest/service/QueryHistoryService.java|  8 +++
 .../rest/service/QueryHistoryServiceTest.java  | 61 ++
 7 files changed, 132 insertions(+), 7 deletions(-)

diff --git 
a/src/core-metadata/src/main/java/org/apache/kylin/metadata/query/JdbcQueryHistoryStore.java
 
b/src/core-metadata/src/main/java/org/apache/kylin/metadata/query/JdbcQueryHistoryStore.java
index 6a696c0fdd..da5b152073 100644
--- 
a/src/core-metadata/src/main/java/org/apache/kylin/metadata/query/JdbcQueryHistoryStore.java
+++ 
b/src/core-metadata/src/main/java/org/apache/kylin/metadata/query/JdbcQueryHistoryStore.java
@@ -29,6 +29,7 @@ import static 
org.mybatis.dynamic.sql.SqlBuilder.isLessThanOrEqualTo;
 import static org.mybatis.dynamic.sql.SqlBuilder.isLike;
 import static org.mybatis.dynamic.sql.SqlBuilder.isLikeCaseInsensitive;
 import static org.mybatis.dynamic.sql.SqlBuilder.isNotEqualTo;
+import static org.mybatis.dynamic.sql.SqlBuilder.isNotIn;
 import static org.mybatis.dynamic.sql.SqlBuilder.max;
 import static org.mybatis.dynamic.sql.SqlBuilder.or;
 import static org.mybatis.dynamic.sql.SqlBuilder.select;
@@ -50,6 +51,7 @@ import java.util.stream.Collectors;
 
 import javax.sql.DataSource;
 
+import org.apache.commons.collections.CollectionUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.ibatis.jdbc.ScriptRunner;
 import org.apache.ibatis.session.ExecutorType;
@@ -743,9 +745,18 @@ public class JdbcQueryHistoryStore {
 filterSql = filterSql.and(queryHistoryTable.indexHit, 
isEqualTo(false));
 }
 } else if (selectAllModels) {
-// Process CONSTANTS, HIVE, RDBMS and all model
-filterSql = filterSql.and(queryHistoryTable.engineType, 
isIn(realizations),
-or(queryHistoryTable.indexHit, isEqualTo(true)));
+if (!CollectionUtils.isEmpty(request.getExcludeFilterModelIds())) {
+// Process CONSTANTS, HIVE, RDBMS and not in model1, model2, 
model3...
+filterSql = filterSql.and(queryHistoryTable.engineType, 
isIn(realizations),
+or(queryHistoryTable.queryId,
+
isIn(selectDistinct(queryHistoryRealizationTable.queryId)
+
.from(queryHistoryRealizationTable).where(queryHistoryRealizationTable.model,
+
isNotIn(request.getExcludeFilterModelIds());
+} else {
+// Process CONSTANTS, HIVE, RDBMS and all model
+filterSql = filterSql.and(queryHistoryTable.engineType, 
isIn(realizations),
+or(queryHistoryTable.indexHit, isEqualTo(true)));
+}
 } else if (request.getFilterModelIds() != null && 
!request.getFilterModelIds().isEmpty()) {
 // Process CONSTANTS, HIVE, RDBMS and model1, model2, model3...
 filterSql = filterSql.and(queryHistoryTable.engineType, 
isIn(realizations),
diff --git 
a/src/core-metadata/src/main/java/org/apache/kylin/metadata/query/QueryHistoryRequest.java
 
b/src/core-metadata/src/main/java/org/apache/kylin/metadata/query/QueryHistoryRequest.java
index d406f0864d..a5e10c3e07 100644
--- 
a/src/core-metadata/src/main/java/org/apache/kylin/metadata/query/QueryHistoryRequest.java
+++ 
b/src/core-metadata/src/main/java/org/apache/kylin/metadata/query/QueryHistoryRequest.java
@@ -52,6 +52,8 @@ public class QueryHistoryRequest {
 private List queryStatus;
 
 List realizations;
+List excludeRealization;
+private List excludeFilterModelIds;
 
 public QueryHistoryRequest(String project, String startTimeFrom, String 
startTimeTo) {
 this.project = project;
diff --git 
a/src/core-metadata/src/test/java/org/apache/kylin/metadata/query/RDBMSQueryHistoryDaoTest.java
 
b/src/core-metadata/src/test/java/org/apache/kylin/metadata/query/RDBMSQueryHistoryDaoTest.java
index b30e13d383..2651f64b81 100644
--- 
a/src/core-metadata/src/test/java/org/apache/kylin/metadata/query/RDBMSQueryHistoryDaoTest.java
+++ 
b/src/core-metadata/src/test/java/org/apache/kylin/metadata/query/RDBMSQueryHistoryDaoTest.java
@@ -782,6 +782,43 @@ public class RDBMSQueryHistoryDaoTest extends 
NLocalFileMe

(kylin) 14/15: KYLIN-5746 model list get optimize fix

2024-03-29 Thread liyang
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 3cbcead2ed5cb3046647ef2a6617c9480254b1b9
Author: liang.huang <83992752+lhuang09287...@users.noreply.github.com>
AuthorDate: Tue Jul 4 17:58:53 2023 +0800

KYLIN-5746 model list get optimize fix
---
 .../apache/kylin/rest/service/ModelService.java| 22 --
 1 file changed, 12 insertions(+), 10 deletions(-)

diff --git 
a/src/modeling-service/src/main/java/org/apache/kylin/rest/service/ModelService.java
 
b/src/modeling-service/src/main/java/org/apache/kylin/rest/service/ModelService.java
index 1ad9ce6cd1..59cc0a9203 100644
--- 
a/src/modeling-service/src/main/java/org/apache/kylin/rest/service/ModelService.java
+++ 
b/src/modeling-service/src/main/java/org/apache/kylin/rest/service/ModelService.java
@@ -372,10 +372,10 @@ public class ModelService extends AbstractModelService 
implements TableModelSupp
 
 private void addOldSegmentParams(NDataModel model, NDataModelOldParams 
oldParams,
 List executables) {
-if (((model instanceof NDataModelResponse) && !(model instanceof 
NDataModelLiteResponse)) || model.isFusionModel()) {
-List segments = 
getSegmentsResponse(model.getId(), model.getProject(), "1",
-String.valueOf(Long.MAX_VALUE - 1), null, executables, 
LAST_MODIFY, true);
-calculateRecordSizeAndCount(segments, oldParams);
+List segments = 
getSegmentsResponse(model.getId(), model.getProject(), "1",
+String.valueOf(Long.MAX_VALUE - 1), null, executables, 
LAST_MODIFY, true, (model instanceof NDataModelLiteResponse));
+calculateRecordSizeAndCount(segments, oldParams);
+if (model instanceof NDataModelResponse) {
 ((NDataModelResponse) model).setSegments(segments);
 ((NDataModelResponse) model).setHasSegments(
 ((NDataModelResponse) model).isHasSegments() || 
CollectionUtils.isNotEmpty(segments));
@@ -387,7 +387,7 @@ public class ModelService extends AbstractModelService 
implements TableModelSupp
 NDataModel batchModel = fusionModel.getBatchModel();
 if (!batchModel.isBroken()) {
 List batchSegments = 
getSegmentsResponse(batchModel.getUuid(), model.getProject(),
-"1", String.valueOf(Long.MAX_VALUE - 1), null, 
executables, LAST_MODIFY, true);
+"1", String.valueOf(Long.MAX_VALUE - 1), null, 
executables, LAST_MODIFY, true, false);
 calculateRecordSizeAndCount(batchSegments, oldParams);
 if (model instanceof FusionModelResponse) {
 ((FusionModelResponse) 
model).setBatchSegments(batchSegments);
@@ -925,9 +925,9 @@ public class ModelService extends AbstractModelService 
implements TableModelSupp
 }
 
 public List getSegmentsResponse(String modelId, 
String project, String start, String end,
-String status, List executables, String 
sortBy, boolean reverse) {
+String status, List executables, String 
sortBy, boolean reverse, boolean lite) {
 return getSegmentsResponse(modelId, project, start, end, status, null, 
null, executables, false, sortBy,
-reverse, null, null);
+reverse, lite, null, null);
 }
 
 private List getAllRunningExecutable(String project) {
@@ -949,12 +949,12 @@ public class ModelService extends AbstractModelService 
implements TableModelSupp
 String sortBy, boolean reverse, List statuses, 
List secondStorageStatuses) {
 val executables = getPartialRunningExecutable(project, modelId);
 return getSegmentsResponse(modelId, project, start, end, status, 
withAllIndexes, withoutAnyIndexes, executables,
-allToComplement, sortBy, reverse, statuses, 
secondStorageStatuses);
+allToComplement, sortBy, reverse, false, statuses, 
secondStorageStatuses);
 }
 
 public List getSegmentsResponse(String modelId, 
String project, String start, String end,
 String status, Collection withAllIndexes, Collection 
withoutAnyIndexes,
-List executables, boolean allToComplement, 
String sortBy, boolean reverse,
+List executables, boolean allToComplement, 
String sortBy, boolean reverse, boolean lite,
 List statuses, List secondStorageStatuses) {
 aclEvaluate.checkProjectReadPermission(project);
 NDataflowManager dataflowManager = getManager(NDataflowManager.class, 
project);
@@ -962,7 +962,9 @@ public class ModelService extends AbstractModelService 
implements TableModelSupp
 List segmentResponseList = 
getSegmentsResponseCore(modelId, project, start, end, status,
 withAllIndexes, withoutAnyIndexes, executables, 
allToComplement, dataflo

(kylin) 08/15: KYLIN-5740 Equivalent aggregations matches index failed

2024-03-29 Thread liyang
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 0e3354414d89c4b4b81d0ec1db8d39705e760a40
Author: huangsheng 
AuthorDate: Fri Jun 30 12:10:57 2023 +0800

KYLIN-5740 Equivalent aggregations matches index failed

Equivalent aggregations matches index failed when using
the strategy of dimension as measure.
---
 .../kylin/rest/service/AccessServiceTest.java  |  4 +-
 .../kylin/rest/service/AclTCRServiceTest.java  |  2 +-
 .../metadata/cube/cuboid/AggIndexMatcher.java  | 13 ++-
 .../metadata/project/NProjectManagerTest.java  |  2 +-
 .../kylin/metrics/HdfsCapacityMetricsTest.java |  2 +-
 .../localmeta/data/DEFAULT.TEST_DIM_AS_MEASURE.csv |  3 +
 .../metadata/_global/project/dim_as_measure.json   |  6 ++
 .../f29d1a92-c115-ec68-5575-9cfcc0d65890.json  | 63 ++
 .../4409fb82-8f3a-ba01-9852-0b05f1fe690f.json  | 64 ++
 .../f29d1a92-c115-ec68-5575-9cfcc0d65890.json  | 64 ++
 .../f29d1a92-c115-ec68-5575-9cfcc0d65890.json  | 97 ++
 .../table/DEFAULT.TEST_DIM_AS_MEASURE.json | 49 +++
 .../newten/table/DEFAULT.TEST_DIM_AS_MEASURE.json  | 49 +++
 .../query/routing/QueryLayoutChooserTest.java  | 47 ++-
 .../kylin/rest/service/ProjectServiceTest.java |  6 +-
 .../rest/service/QueryHistoryServiceTest.java  |  2 +-
 .../kylin/query/engine/AsyncQueryJobTest.java  |  2 +-
 17 files changed, 460 insertions(+), 15 deletions(-)

diff --git 
a/src/common-service/src/test/java/org/apache/kylin/rest/service/AccessServiceTest.java
 
b/src/common-service/src/test/java/org/apache/kylin/rest/service/AccessServiceTest.java
index f5402d462c..769f1dd326 100644
--- 
a/src/common-service/src/test/java/org/apache/kylin/rest/service/AccessServiceTest.java
+++ 
b/src/common-service/src/test/java/org/apache/kylin/rest/service/AccessServiceTest.java
@@ -606,14 +606,14 @@ public class AccessServiceTest extends 
NLocalFileMetadataTestCase {
 @Test
 public void testGetGrantedProjectsOfUser() throws IOException {
 List result = accessService.getGrantedProjectsOfUser("ADMIN");
-assertEquals(29, result.size());
+assertEquals(30, result.size());
 }
 
 @Test
 public void testGetGrantedProjectsOfUserOrGroup() throws IOException {
 // admin user
 List result = 
accessService.getGrantedProjectsOfUserOrGroup("ADMIN", true);
-assertEquals(29, result.size());
+assertEquals(30, result.size());
 
 // normal user
 result = accessService.getGrantedProjectsOfUserOrGroup("ANALYST", 
true);
diff --git 
a/src/common-service/src/test/java/org/apache/kylin/rest/service/AclTCRServiceTest.java
 
b/src/common-service/src/test/java/org/apache/kylin/rest/service/AclTCRServiceTest.java
index 803019720d..9af9f92b14 100644
--- 
a/src/common-service/src/test/java/org/apache/kylin/rest/service/AclTCRServiceTest.java
+++ 
b/src/common-service/src/test/java/org/apache/kylin/rest/service/AclTCRServiceTest.java
@@ -1316,7 +1316,7 @@ public class AclTCRServiceTest extends 
NLocalFileMetadataTestCase {
 Mockito.when(userService.isGlobalAdmin("ADMIN")).thenReturn(true);
 List responses = 
accessService.getUserOrGroupAclPermissions(projects, "ADMIN",
 true);
-Assert.assertEquals(29, responses.size());
+Assert.assertEquals(30, responses.size());
 Assert.assertTrue(responses.stream().allMatch(response -> 
"ADMIN".equals(response.getProjectPermission(;
 
 // test normal group
diff --git 
a/src/core-metadata/src/main/java/org/apache/kylin/metadata/cube/cuboid/AggIndexMatcher.java
 
b/src/core-metadata/src/main/java/org/apache/kylin/metadata/cube/cuboid/AggIndexMatcher.java
index 5561581d72..a7efb17286 100644
--- 
a/src/core-metadata/src/main/java/org/apache/kylin/metadata/cube/cuboid/AggIndexMatcher.java
+++ 
b/src/core-metadata/src/main/java/org/apache/kylin/metadata/cube/cuboid/AggIndexMatcher.java
@@ -89,7 +89,7 @@ public class AggIndexMatcher extends IndexMatcher {
 return new MatchResult();
 }
 log.trace("Matching agg index");
-Set unmatchedMetrics = 
Sets.newHashSet(sqlDigest.aggregations);
+Collection unmatchedMetrics = 
Lists.newArrayList(sqlDigest.aggregations);
 Set unmatchedCols = initUnmatchedColumnIds(layout);
 final Map needDerive = Maps.newHashMap();
 goThruDerivedDims(layout.getIndex(), needDerive, unmatchedCols);
@@ -140,9 +140,8 @@ public class AggIndexMatcher extends IndexMatcher {
 functionDescs.addAll(cuboidLayout.getStreamingMeasures().values());
 }
 functionDescs.addAll(cuboidLayout.getOrderedMeasures().values());
-
 for (MeasureDesc measureDesc : 

(kylin) 12/15: KYLIN-5744 Answering snapshot first, then answering by metadata

2024-03-29 Thread liyang
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 d13199db7407552226a58060ceb9b41a7f859c36
Author: Pengfei Zhan 
AuthorDate: Thu Jun 29 15:28:35 2023 +0800

KYLIN-5744 Answering snapshot first, then answering by metadata

Hitting snapshot has a higher priority than
answering min/max with metadata.

Change the default behavior of routing query to metadata to true

1. Fix timezone problem.
Given the fact of min(cal_dt) = '2012-01-01',
the result of `select min(cal_dt)  from test_kylin_fact`
may give '2011-12-31' rather than '2012-01-01'.

2. Fix min/max query hit a index without any dimensions.
For example: `select min(cal_dt) as min_cal_dt from test_kylin_fact `
hits index just has a measure of min(cal_dt),
the SparkPlan is wrong: ` project --- project --- tableScan `;
but the desired SparkPlan is: ` aggregate --- project --- tableScan `.
---
 .../org/apache/kylin/common/KylinConfigBase.java   |  2 +-
 .../kylin/query/engine/QueryExecWithMetaTest.java  |  2 +-
 src/query-common/pom.xml   |  4 ++
 .../kylin/query/relnode/KapAggregateRel.java   | 58 +-
 .../apache/kylin/query/relnode/OLAPContext.java| 24 +
 .../org/apache/spark/sql/SparderTypeUtil.scala |  2 +-
 6 files changed, 46 insertions(+), 46 deletions(-)

diff --git 
a/src/core-common/src/main/java/org/apache/kylin/common/KylinConfigBase.java 
b/src/core-common/src/main/java/org/apache/kylin/common/KylinConfigBase.java
index 03c1c06e89..cbd82ed108 100644
--- a/src/core-common/src/main/java/org/apache/kylin/common/KylinConfigBase.java
+++ b/src/core-common/src/main/java/org/apache/kylin/common/KylinConfigBase.java
@@ -1734,7 +1734,7 @@ public abstract class KylinConfigBase implements 
Serializable {
 // 

 
 public boolean isRouteToMetadataEnabled() {
-return 
Boolean.parseBoolean(this.getOptional("kylin.query.using-metadata-answer-minmax-of-dimension",
 FALSE));
+return 
Boolean.parseBoolean(this.getOptional("kylin.query.using-metadata-answer-minmax-of-dimension",
 TRUE));
 }
 
 public boolean partialMatchNonEquiJoins() {
diff --git 
a/src/kylin-it/src/test/java/org/apache/kylin/query/engine/QueryExecWithMetaTest.java
 
b/src/kylin-it/src/test/java/org/apache/kylin/query/engine/QueryExecWithMetaTest.java
index ac84de6f06..94d98eb5ea 100644
--- 
a/src/kylin-it/src/test/java/org/apache/kylin/query/engine/QueryExecWithMetaTest.java
+++ 
b/src/kylin-it/src/test/java/org/apache/kylin/query/engine/QueryExecWithMetaTest.java
@@ -230,7 +230,7 @@ public class QueryExecWithMetaTest extends 
NLocalWithSparkSessionTest {
 List result = iterator.next();
 
Assert.assertEquals("2147483648,21474836483289,2132,2147483647,-128,127,0,9,0.0,1.0,"
 + 
"0.3255242,85208.3241,10.,201.3235,abc,xyz,,x,abcd,,"
-+ "2000-12-31,2004-04-16,2004-04-01 00:00:00,2004-04-17 
00:32:23.032,false,true,"
++ "2001-01-01,2004-04-17,2004-04-01 00:00:00,2004-04-17 
00:32:23.032,false,true,"
 + 
"null,null,null,null,null,null,null,null,null,null,null,null", String.join(",", 
result));
 }
 
diff --git a/src/query-common/pom.xml b/src/query-common/pom.xml
index d6af343c34..16af9a8028 100644
--- a/src/query-common/pom.xml
+++ b/src/query-common/pom.xml
@@ -55,6 +55,10 @@
 org.apache.kylin
 kap-second-storage-core
 
+
+org.apache.kylin
+kylin-spark-common
+
 
 
 
diff --git 
a/src/query-common/src/main/java/org/apache/kylin/query/relnode/KapAggregateRel.java
 
b/src/query-common/src/main/java/org/apache/kylin/query/relnode/KapAggregateRel.java
index f44272beb5..5a064dd840 100644
--- 
a/src/query-common/src/main/java/org/apache/kylin/query/relnode/KapAggregateRel.java
+++ 
b/src/query-common/src/main/java/org/apache/kylin/query/relnode/KapAggregateRel.java
@@ -45,6 +45,9 @@ import org.apache.commons.collections.CollectionUtils;
 import org.apache.kylin.common.KapConfig;
 import org.apache.kylin.common.KylinConfig;
 import org.apache.kylin.common.QueryContext;
+import org.apache.kylin.guava30.shaded.common.collect.ImmutableList;
+import org.apache.kylin.guava30.shaded.common.collect.Lists;
+import org.apache.kylin.guava30.shaded.common.collect.Sets;
 import org.apache.kylin.measure.corr.CorrMeasureType;
 import org.apache.kylin.metadata.cube.cuboid.NLayoutCandidate;
 import org.apache.kylin.metadata.cube.model.NDataflow;
@@ -55,10 +58,6 @@ import org.apache.kylin.metadata.model.PartitionDesc;
 import org.apache.kylin.metadata.mod

(kylin) branch kylin5 updated (8118afb449 -> bcd4220ef2)

2024-03-29 Thread liyang
This is an automated email from the ASF dual-hosted git repository.

liyang pushed a change to branch kylin5
in repository https://gitbox.apache.org/repos/asf/kylin.git


from 8118afb449 KYLIN-5683 tree list load more columns issue
 new 3ec3063135 KYLIN-5732 Upgrade snappy-java to fix vulnerabilities
 new 387e68d0a6 KYLIN-5733 TDS template modify to English
 new 6816947de4 KYLIN-5762 Initialize job scheduler encounters NPE
 new b15367e3e2 KYLIN-5760 Support matching model exactly for list jobs
 new d008c28156 KYLIN-5737 Fix vulnerabilities, upgrade tomcat-embed-core & 
netty (#30573)
 new c396134127 KYLIN-5742 Make the query result of duplicate group sets 
same as Spark
 new 1d665a8282 KYLIN-5762 Initialize job scheduler encounters NPE
 new 0e3354414d KYLIN-5740 Equivalent aggregations matches index failed
 new 7cd3fd0ecc KYLIN-5741 change all epoch when empty projects request
 new 5532198301 KYLIN-5743 optimization of SumExpression prevents 
ProjectJoinTransposeRule to hit AggIndex
 new 572d78a45b KYLIN-5756 Concat string and number with + gives unexpected 
result
 new d13199db74 KYLIN-5744 Answering snapshot first, then answering by 
metadata
 new 227e7a0683 KYLIN-5741 punctuation optimized
 new 3cbcead2ed KYLIN-5746 model list get optimize fix
 new bcd4220ef2 update spark version to 3.2.0-kylin-4.6.12.0

The 15 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 .../kap/secondstorage/metadata/TableFlow.java  |  13 ++
 pom.xml|  39 +++---
 .../kylin/rest/controller/NEpochController.java|   9 +-
 .../rest/controller/NEpochControllerTest.java  |  19 +--
 .../apache/kylin/rest/KylinPrepareEnvListener.java |  14 ++-
 .../apache/kylin/rest/service/ProjectService.java  |   8 ++
 .../kylin/rest/service/AccessServiceTest.java  |   4 +-
 .../kylin/rest/service/AclTCRServiceTest.java  |   2 +-
 .../org/apache/kylin/common/KylinConfigBase.java   |  14 ++-
 .../apache/kylin/common/constant/Constants.java|   1 +
 .../org/apache/kylin/common/msg/CnMessage.java |   6 +
 .../java/org/apache/kylin/common/msg/Message.java  |   7 ++
 .../kylin/job/execution/ExecutableContext.java |   9 +-
 .../kylin/job/execution/ExecutableThread.java  |   1 +
 .../job/impl/threadpool/NDefaultScheduler.java |  21 ++--
 .../apache/kylin/job/runners/FetcherRunner.java|   3 +-
 .../org/apache/kylin/job/runners/JobRunner.java|   3 +-
 .../kylin/job/execution/ExecutableContextTest.java |   4 +-
 .../job/execution/NExecutableManagerTest.java  |   2 +-
 .../job/impl/threadpool/NDefaultSchedulerTest.java |  21 
 .../metadata/cube/cuboid/AggIndexMatcher.java  |  13 +-
 .../metadata/project/NProjectManagerTest.java  |   2 +-
 .../kylin/metrics/HdfsCapacityMetricsTest.java |   2 +-
 .../kylin/rest/controller/JobController.java   |   4 +-
 .../kylin/rest/controller/v2/JobControllerV2.java  |   2 +-
 .../kylin/rest/controller/JobControllerTest.java   |   6 +-
 .../rest/controller/v2/JobControllerV2Test.java|  11 +-
 .../org/apache/kylin/rest/request/JobFilter.java   |   2 +
 .../org/apache/kylin/rest/service/JobService.java  |   5 +
 .../kylin/rest/service/DagJobServiceTest.java  |   8 +-
 .../apache/kylin/rest/service/JobServiceTest.java  |  49 ++--
 .../localmeta/data/DEFAULT.TEST_DIM_AS_MEASURE.csv |   3 +
 .../metadata/_global/project/dim_as_measure.json}  |   2 +-
 .../f29d1a92-c115-ec68-5575-9cfcc0d65890.json  |  63 ++
 .../4409fb82-8f3a-ba01-9852-0b05f1fe690f.json  |  64 ++
 .../f29d1a92-c115-ec68-5575-9cfcc0d65890.json} |  59 -
 .../f29d1a92-c115-ec68-5575-9cfcc0d65890.json} |  61 -
 .../table/DEFAULT.TEST_DIM_AS_MEASURE.json}|  40 +++---
 .../newten/table/DEFAULT.TEST_DIM_AS_MEASURE.json} |  40 +++---
 src/kylin-it/pom.xml   |   9 --
 .../kylin/query/engine/QueryExecWithMetaTest.java  |   2 +-
 .../kylin/query/engine/SumExprPlannerTest.java |  11 ++
 .../query/routing/QueryLayoutChooserTest.java  |  47 ++-
 .../kylin/query/engine/SumExprPlannerTest.xml  |  32 +
 src/kylin-server-it/pom.xml|   9 --
 .../kylin/rest/service/MetaStoreService.java   |  24 ++--
 .../apache/kylin/rest/service/ModelService.java|  17 +--
 .../bisync/tds/tableau.connector.template.xml  |   2 +-
 .../main/resources/bisync/tds/tableau.template.xml |   2 +-
 .../kylin/rest/service/ProjectServiceTest.java |  32 -
 .../bisync_tableau/nmodel_basic_all_cols.tds   |   2 +-
 .../bisync_tableau/nmodel_basic_inner_all_cols.tds |   2 +-
 .../nmodel_full_measure_test.connector.tds |   2 +-
 .../nmodel_full_measure_

(kylin) 10/15: KYLIN-5743 optimization of SumExpression prevents ProjectJoinTransposeRule to hit AggIndex

2024-03-29 Thread liyang
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 553219830193ec43f7b6d68fe626b04456633120
Author: Pengfei Zhan 
AuthorDate: Thu Jun 29 14:39:05 2023 +0800

KYLIN-5743 optimization of SumExpression prevents ProjectJoinTransposeRule 
to hit AggIndex
---
 .../kylin/query/engine/SumExprPlannerTest.java | 11 
 .../kylin/query/engine/SumExprPlannerTest.xml  | 32 ++
 .../apache/kylin/query/engine/PlannerFactory.java  | 14 ++
 3 files changed, 51 insertions(+), 6 deletions(-)

diff --git 
a/src/kylin-it/src/test/java/org/apache/kylin/query/engine/SumExprPlannerTest.java
 
b/src/kylin-it/src/test/java/org/apache/kylin/query/engine/SumExprPlannerTest.java
index 7e00b6cfb2..9692ec4f4e 100644
--- 
a/src/kylin-it/src/test/java/org/apache/kylin/query/engine/SumExprPlannerTest.java
+++ 
b/src/kylin-it/src/test/java/org/apache/kylin/query/engine/SumExprPlannerTest.java
@@ -199,6 +199,17 @@ public class SumExprPlannerTest extends 
CalciteRuleTestBase {
 KapJoinRule.INSTANCE, KapProjectRule.INSTANCE));
 }
 
+@Test
+public void testSumExpressionSkipProjectJoinTransposeRule() {
+String sql = "select  sum(  case  when LO_COMMITDATE = '20230501' then 
LO_DISCOUNT  end )\n" //
++ "from  (\n" //
++ "select LO_COMMITDATE,  LO_DISCOUNT, 
P_LINEORDER.LO_ORDERDATE from  ssb.P_LINEORDER\n" //
++ "  ) a\n" //
++ "where  LO_COMMITDATE = ( select max(LO_COMMITDATE) from 
ssb.P_LINEORDER )";
+openSumCaseWhen();
+checkSQL("ssb", sql, null, null);
+}
+
 @Test
 public void testAggPushdownWithCrossJoin1() {
 
diff --git 
a/src/kylin-it/src/test/resources/org/apache/kylin/query/engine/SumExprPlannerTest.xml
 
b/src/kylin-it/src/test/resources/org/apache/kylin/query/engine/SumExprPlannerTest.xml
index e7b560f9a5..0796314ef7 100644
--- 
a/src/kylin-it/src/test/resources/org/apache/kylin/query/engine/SumExprPlannerTest.xml
+++ 
b/src/kylin-it/src/test/resources/org/apache/kylin/query/engine/SumExprPlannerTest.xml
@@ -1377,6 +1377,38 @@ KapOLAPToEnumerableConverter
 ]]>
 
 
+
+
+
+
+
+
+
+
 
 
 
diff --git 
a/src/query/src/main/java/org/apache/kylin/query/engine/PlannerFactory.java 
b/src/query/src/main/java/org/apache/kylin/query/engine/PlannerFactory.java
index 8616d6e14a..bac1fbf81b 100644
--- a/src/query/src/main/java/org/apache/kylin/query/engine/PlannerFactory.java
+++ b/src/query/src/main/java/org/apache/kylin/query/engine/PlannerFactory.java
@@ -65,10 +65,13 @@ import org.apache.commons.lang3.StringUtils;
 import org.apache.kylin.common.KapConfig;
 import org.apache.kylin.common.KylinConfig;
 import org.apache.kylin.common.debug.BackdoorToggles;
+import org.apache.kylin.guava30.shaded.common.base.Function;
+import org.apache.kylin.guava30.shaded.common.collect.ImmutableList;
+import org.apache.kylin.query.engine.meta.PlannerContext;
+import org.apache.kylin.query.relnode.OLAPContext;
+
 import io.kyligence.kap.query.optrule.AggregateMultipleExpandRule;
 import io.kyligence.kap.query.optrule.AggregateProjectReduceRule;
-import org.apache.kylin.query.relnode.OLAPContext;
-import org.apache.kylin.query.engine.meta.PlannerContext;
 import io.kyligence.kap.query.optrule.CorrReduceFunctionRule;
 import io.kyligence.kap.query.optrule.KAPValuesRule;
 import io.kyligence.kap.query.optrule.KapAggregateReduceFunctionsRule;
@@ -89,9 +92,6 @@ import io.kyligence.kap.query.optrule.KapWindowRule;
 import io.kyligence.kap.query.optrule.RightJoinToLeftJoinRule;
 import io.kyligence.kap.query.optrule.SumConstantConvertRule;
 
-import org.apache.kylin.guava30.shaded.common.base.Function;
-import org.apache.kylin.guava30.shaded.common.collect.ImmutableList;
-
 /**
  * factory that create optimizers and register opt rules
  * TODO sort and register only necessary rules
@@ -240,7 +240,9 @@ public class PlannerFactory {
 // UnionMergeRule may slow volcano planner optimization on large 
number of union clause
 planner.removeRule(UnionMergeRule.INSTANCE);
 
-planner.addRule(KapProjectJoinTransposeRule.INSTANCE);
+if (!kylinConfig.isConvertSumExpressionEnabled()) {
+planner.addRule(KapProjectJoinTransposeRule.INSTANCE);
+}
 planner.removeRule(ProjectRemoveRule.INSTANCE);
 
 // skip corr expandsion during model suggestion



(kylin) 11/15: KYLIN-5756 Concat string and number with + gives unexpected result

2024-03-29 Thread liyang
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 572d78a45b6e0cabb248b6772a9b434221d9f323
Author: Zhiting Guo <35057824+fre...@users.noreply.github.com>
AuthorDate: Thu Jun 29 18:00:09 2023 +0800

KYLIN-5756 Concat string and number with + gives unexpected result

KYLIN-5747 duplicated
Co-authored-by: Zhiting Guo 
---
 pom.xml|  2 +-
 .../org/apache/kylin/rest/KylinPrepareEnvListener.java | 14 ++
 .../main/java/org/apache/kylin/common/KylinConfigBase.java | 12 
 3 files changed, 23 insertions(+), 5 deletions(-)

diff --git a/pom.xml b/pom.xml
index 83adcd3e33..8bfc1dd630 100644
--- a/pom.xml
+++ b/pom.xml
@@ -135,7 +135,7 @@
 0.3.0
 
 
-1.116.0-kylin-4.x-r031
+1.116.0-kylin-4.x-r033
 4.x_1.10-r01
 
 
diff --git 
a/src/common-service/src/main/java/org/apache/kylin/rest/KylinPrepareEnvListener.java
 
b/src/common-service/src/main/java/org/apache/kylin/rest/KylinPrepareEnvListener.java
index e700fb0801..a49c67e33b 100644
--- 
a/src/common-service/src/main/java/org/apache/kylin/rest/KylinPrepareEnvListener.java
+++ 
b/src/common-service/src/main/java/org/apache/kylin/rest/KylinPrepareEnvListener.java
@@ -24,6 +24,7 @@ import java.sql.SQLException;
 
 import org.apache.commons.lang3.StringUtils;
 import org.apache.kylin.common.KylinConfig;
+import org.apache.kylin.common.KylinConfigBase;
 import org.apache.kylin.common.util.ClassUtil;
 import org.apache.kylin.common.util.TempMetadataBuilder;
 import org.apache.kylin.common.util.TimeZoneUtils;
@@ -75,14 +76,19 @@ public class KylinPrepareEnvListener implements 
EnvironmentPostProcessor, Ordere
 Unsafe.setProperty("needCheckCC", "true");
 val config = KylinConfig.getInstanceFromEnv();
 if (config.isCalciteInClauseEnabled()) {
-Unsafe.setProperty("calcite.keep-in-clause", "true");
+Unsafe.setProperty("calcite.keep-in-clause", KylinConfigBase.TRUE);
 } else {
-Unsafe.setProperty("calcite.keep-in-clause", "false");
+Unsafe.setProperty("calcite.keep-in-clause", 
KylinConfigBase.FALSE);
 }
 if (config.isCalciteConvertMultipleColumnsIntoOrEnabled()) {
-Unsafe.setProperty("calcite.convert-multiple-columns-in-to-or", 
"true");
+Unsafe.setProperty("calcite.convert-multiple-columns-in-to-or", 
KylinConfigBase.TRUE);
 } else {
-Unsafe.setProperty("calcite.convert-multiple-columns-in-to-or", 
"false");
+Unsafe.setProperty("calcite.convert-multiple-columns-in-to-or", 
KylinConfigBase.FALSE);
+}
+if (config.isCalciteCompatibleWithMsSqlPlusEnabled()) {
+Unsafe.setProperty("calcite.compatible-with-mssql-plus", 
KylinConfigBase.TRUE);
+} else {
+Unsafe.setProperty("calcite.compatible-with-mssql-plus", 
KylinConfigBase.FALSE);
 }
 Unsafe.setProperty("calcite.bindable.cache.maxSize", 
Integer.toString(config.getCalciteBindableCacheSize()));
 Unsafe.setProperty("calcite.bindable.cache.concurrencyLevel",
diff --git 
a/src/core-common/src/main/java/org/apache/kylin/common/KylinConfigBase.java 
b/src/core-common/src/main/java/org/apache/kylin/common/KylinConfigBase.java
index 2908f05571..03c1c06e89 100644
--- a/src/core-common/src/main/java/org/apache/kylin/common/KylinConfigBase.java
+++ b/src/core-common/src/main/java/org/apache/kylin/common/KylinConfigBase.java
@@ -2533,6 +2533,10 @@ public abstract class KylinConfigBase implements 
Serializable {
 return 
Integer.parseInt(getOptional("kylin.query.calcite.bindable.cache.concurrencyLevel",
 "5"));
 }
 
+public boolean isCalciteCompatibleWithMsSqlPlusEnabled() {
+return 
Boolean.parseBoolean(getOptional("kylin.query.calcite.compatible-with-mssql-plus-enabled",
 FALSE));
+}
+
 public int getEventPollIntervalSecond() {
 return 
Integer.parseInt(getOptional("kylin.job.event.poll-interval-second", "60"));
 }
@@ -2823,6 +2827,14 @@ public abstract class KylinConfigBase implements 
Serializable {
 return 
Boolean.parseBoolean(getOptional("kylin.smart.conf.skip-corr-reduce-rule", 
FALSE));
 }
 
+public int getOptimizeTransformerMaxIterations() {
+return 
Integer.parseInt(getOptional("kylin.smart.conf.optimize-transformer-max-iterations",
 "2"));
+}
+
+public int getOptimizeTransformerConditionCountThreshold() {
+return 
Integer.parseInt(getOptional("kylin.smart.conf.optimize-transformer-condition-count-threshold",
 "200"));
+}
+
 public String getEngineWriteFs() {
 String engineWriteFs = getOptional("kylin.env.engine-write-fs", "");
 return StringHelper.dropSuffix(engineWriteFs, File.separator);



(kylin) 05/15: KYLIN-5737 Fix vulnerabilities, upgrade tomcat-embed-core & netty (#30573)

2024-03-29 Thread liyang
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 d008c28156b0b2cfea530b08f765613575b2c60e
Author: Yinghao Lin <39019287+yhca...@users.noreply.github.com>
AuthorDate: Thu Jun 29 20:09:22 2023 +0800

KYLIN-5737 Fix vulnerabilities, upgrade tomcat-embed-core & netty (#30573)
---
 pom.xml | 27 ++-
 src/kylin-it/pom.xml|  9 -
 src/kylin-server-it/pom.xml |  9 -
 src/server/pom.xml  |  1 +
 src/streaming/pom.xml   |  7 +--
 5 files changed, 12 insertions(+), 41 deletions(-)

diff --git a/pom.xml b/pom.xml
index 904f18cb80..a61ca736d4 100644
--- a/pom.xml
+++ b/pom.xml
@@ -100,7 +100,7 @@
 UTF-8
 
UTF-8
 3.6.7-kyarthas-r3
-9.0.74
+9.0.76
 
 
 
@@ -360,9 +360,8 @@
 10.14.2.0
 1.75
 1.10.11
-4.1.89.Final
-3.10.6.Final
-4.1.89.Final
+3.10.6.Final
+4.1.94.Final
 0.13.2
 1.0.3
 
2.6.2
@@ -741,11 +740,6 @@
 kylin-soft-affinity-cache
 ${project.version}
 
-
-io.netty
-netty-codec-haproxy
-${netty-codec.version}
-
 
 io.dropwizard.metrics
 metrics-core
@@ -2788,14 +2782,8 @@
 
 
 io.netty
-netty-all
-${netty-all.version}
-
-
-io.netty
-netty
-${netty.version}
-provided
+netty-handler
+${netty-handler.version}
 
 
 org.codehaus.janino
@@ -2961,6 +2949,11 @@
 snappy-java
 ${snappy-java.version}
 
+
+io.netty
+netty
+${netty3.version}
+
 
 
 
diff --git a/src/kylin-it/pom.xml b/src/kylin-it/pom.xml
index 01282cf457..4272d86bf6 100644
--- a/src/kylin-it/pom.xml
+++ b/src/kylin-it/pom.xml
@@ -97,15 +97,6 @@
 commons-cli
 
 
-
-io.netty
-netty-all
-
-
-io.netty
-netty
-provided
-
 
 org.codehaus.janino
 janino
diff --git a/src/kylin-server-it/pom.xml b/src/kylin-server-it/pom.xml
index 9c60c7bb48..8cd256e983 100644
--- a/src/kylin-server-it/pom.xml
+++ b/src/kylin-server-it/pom.xml
@@ -106,15 +106,6 @@
 commons-cli
 
 
-
-io.netty
-netty-all
-
-
-io.netty
-netty
-provided
-
 
 org.codehaus.janino
 janino
diff --git a/src/server/pom.xml b/src/server/pom.xml
index fdf7d8182e..deb02b3ade 100644
--- a/src/server/pom.xml
+++ b/src/server/pom.xml
@@ -443,6 +443,7 @@
 net.sf.py4j,
 com.h2database,
 jdk.tools,
+io.netty
 
 
 unused
diff --git a/src/streaming/pom.xml b/src/streaming/pom.xml
index 105755ad83..e03dc67f0c 100644
--- a/src/streaming/pom.xml
+++ b/src/streaming/pom.xml
@@ -159,11 +159,6 @@
 test
 3.4.0
 
-
-io.netty
-netty
-test
-
 
 
 org.apache.spark
@@ -206,4 +201,4 @@
 
 
 
-
\ No newline at end of file
+



(kylin) 04/15: KYLIN-5760 Support matching model exactly for list jobs

2024-03-29 Thread liyang
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 b15367e3e2682b195966f5b59dbf09f8867a792e
Author: Hang Jia <754332...@qq.com>
AuthorDate: Thu Jun 29 14:24:12 2023 +0800

KYLIN-5760 Support matching model exactly for list jobs
---
 .../kap/secondstorage/metadata/TableFlow.java  | 13 ++
 .../kylin/rest/controller/JobController.java   |  4 +-
 .../kylin/rest/controller/v2/JobControllerV2.java  |  2 +-
 .../kylin/rest/controller/JobControllerTest.java   |  6 +--
 .../rest/controller/v2/JobControllerV2Test.java| 11 ++---
 .../org/apache/kylin/rest/request/JobFilter.java   |  2 +
 .../org/apache/kylin/rest/service/JobService.java  |  5 +++
 .../apache/kylin/rest/service/JobServiceTest.java  | 49 ++
 .../apache/kylin/rest/service/ModelService.java|  9 ++--
 9 files changed, 77 insertions(+), 24 deletions(-)

diff --git 
a/outdated/second-storage/core/src/main/java/io/kyligence/kap/secondstorage/metadata/TableFlow.java
 
b/outdated/second-storage/core/src/main/java/io/kyligence/kap/secondstorage/metadata/TableFlow.java
index a4add8edca..908f591e13 100644
--- 
a/outdated/second-storage/core/src/main/java/io/kyligence/kap/secondstorage/metadata/TableFlow.java
+++ 
b/outdated/second-storage/core/src/main/java/io/kyligence/kap/secondstorage/metadata/TableFlow.java
@@ -29,6 +29,7 @@ import java.util.stream.Collectors;
 
 import org.apache.commons.collections.CollectionUtils;
 import org.apache.kylin.common.persistence.RootPersistentEntity;
+import org.apache.kylin.metadata.MetadataConstants;
 import org.apache.kylin.metadata.cube.model.LayoutEntity;
 
 import com.fasterxml.jackson.annotation.JsonManagedReference;
@@ -72,6 +73,8 @@ public class TableFlow extends RootPersistentEntity
 return new Builder();
 }
 
+public static final String TABLEFLOW_RESOURCE_ROOT = "/clickhouse_data";
+
 protected transient Manager manager;
 @Override
 public void setManager(Manager manager) {
@@ -171,6 +174,16 @@ public class TableFlow extends RootPersistentEntity
 });
 }
 
+@Override
+public String getResourcePath() {
+return concatResourcePath(getUuid(), manager.project);
+}
+
+public static String concatResourcePath(String name, String project) {
+return new 
StringBuilder().append("/").append(project).append(TABLEFLOW_RESOURCE_ROOT)
+
.append("/").append(name).append(MetadataConstants.FILE_SURFIX).toString();
+}
+
 @Override
 public boolean equals(Object o) {
 if (this == o) return true;
diff --git 
a/src/data-loading-server/src/main/java/org/apache/kylin/rest/controller/JobController.java
 
b/src/data-loading-server/src/main/java/org/apache/kylin/rest/controller/JobController.java
index ea3e921baa..e47d01b658 100644
--- 
a/src/data-loading-server/src/main/java/org/apache/kylin/rest/controller/JobController.java
+++ 
b/src/data-loading-server/src/main/java/org/apache/kylin/rest/controller/JobController.java
@@ -94,6 +94,7 @@ public class JobController extends BaseController {
 @RequestParam(value = "time_filter") Integer timeFilter,
 @RequestParam(value = "subject", required = false) String subject,
 @RequestParam(value = "key", required = false) String key,
+@RequestParam(value = "exact", required = false, defaultValue = 
"false") boolean exactMatch,
 @RequestParam(value = "project", required = false) String project,
 @RequestParam(value = "page_offset", required = false, 
defaultValue = "0") Integer pageOffset,
 @RequestParam(value = "page_size", required = false, defaultValue 
= "10") Integer pageSize,
@@ -101,7 +102,8 @@ public class JobController extends BaseController {
 @RequestParam(value = "reverse", required = false, defaultValue = 
"true") boolean reverse) {
 jobService.checkJobStatus(statuses);
 checkRequiredArg("time_filter", timeFilter);
-JobFilter jobFilter = new JobFilter(statuses, jobNames, timeFilter, 
subject, key, project, sortBy, reverse);
+JobFilter jobFilter = new JobFilter(statuses, jobNames, timeFilter, 
subject, key, exactMatch, project, sortBy,
+reverse);
 DataResult> executables;
 if (!StringUtils.isEmpty(project)) {
 executables = jobService.listJobs(jobFilter, pageOffset, pageSize);
diff --git 
a/src/data-loading-server/src/main/java/org/apache/kylin/rest/controller/v2/JobControllerV2.java
 
b/src/data-loading-server/src/main/java/org/apache/kylin/rest/controller/v2/JobControllerV2.java
index 720238fb53..6844578785 100644
--- 
a/src/data-loading-server/src/main/java/org/apache/kylin/rest/

(kylin) 03/15: KYLIN-5762 Initialize job scheduler encounters NPE

2024-03-29 Thread liyang
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 6816947de43cc1f3a7101c06a1d32d623a36ef06
Author: sibingzhang <74443791+sibingzh...@users.noreply.github.com>
AuthorDate: Wed Jun 28 18:28:54 2023 +0800

KYLIN-5762 Initialize job scheduler encounters NPE

Co-authored-by: sibing.zhang 
---
 .../java/org/apache/kylin/job/execution/ExecutableContext.java   | 9 ++---
 .../java/org/apache/kylin/job/execution/ExecutableThread.java| 1 +
 .../src/main/java/org/apache/kylin/job/runners/JobRunner.java| 3 ++-
 .../org/apache/kylin/job/execution/ExecutableContextTest.java| 4 +++-
 .../org/apache/kylin/job/execution/NExecutableManagerTest.java   | 2 +-
 .../java/org/apache/kylin/rest/service/DagJobServiceTest.java| 8 
 6 files changed, 17 insertions(+), 10 deletions(-)

diff --git 
a/src/core-job/src/main/java/org/apache/kylin/job/execution/ExecutableContext.java
 
b/src/core-job/src/main/java/org/apache/kylin/job/execution/ExecutableContext.java
index 16c9e9f576..fea0a74f09 100644
--- 
a/src/core-job/src/main/java/org/apache/kylin/job/execution/ExecutableContext.java
+++ 
b/src/core-job/src/main/java/org/apache/kylin/job/execution/ExecutableContext.java
@@ -23,10 +23,10 @@ import java.util.Map;
 import java.util.Set;
 import java.util.concurrent.ConcurrentMap;
 
-import org.apache.kylin.guava30.shaded.common.collect.Sets;
 import org.apache.kylin.common.KylinConfig;
-
 import org.apache.kylin.guava30.shaded.common.collect.Maps;
+import org.apache.kylin.guava30.shaded.common.collect.Sets;
+
 import lombok.Getter;
 import lombok.Setter;
 import lombok.extern.slf4j.Slf4j;
@@ -68,7 +68,6 @@ public class ExecutableContext {
 
 // Only used when the job starts scheduling
 public void addRunningJob(Executable executable) {
-runningJobThreads.put(executable.getId(), Thread.currentThread());
 runningJobs.put(executable.getId(), executable);
 runningJobInfos.put(executable.getId(), System.currentTimeMillis());
 }
@@ -84,6 +83,10 @@ public class ExecutableContext {
 return runningJobThreads.get(executable.getId());
 }
 
+public void addRunningJobThread(Executable executable) {
+runningJobThreads.put(executable.getId(), Thread.currentThread());
+}
+
 public Map getRunningJobs() {
 return Collections.unmodifiableMap(runningJobs);
 }
diff --git 
a/src/core-job/src/main/java/org/apache/kylin/job/execution/ExecutableThread.java
 
b/src/core-job/src/main/java/org/apache/kylin/job/execution/ExecutableThread.java
index 61140daeec..162eed1daa 100644
--- 
a/src/core-job/src/main/java/org/apache/kylin/job/execution/ExecutableThread.java
+++ 
b/src/core-job/src/main/java/org/apache/kylin/job/execution/ExecutableThread.java
@@ -50,6 +50,7 @@ public class ExecutableThread extends Thread {
 try (SetThreadName ignored = new 
SetThreadName("JobWorker(project:%s,jobid:%s)", project, jobIdSimple);
 SetLogCategory logCategory = new SetLogCategory("schedule")) {
 context.addRunningJob(executable);
+context.addRunningJobThread(executable);
 dagExecutable.executeDagExecutable(dagExecutablesMap, executable, 
context);
 } finally {
 context.removeRunningJob(executable);
diff --git 
a/src/core-job/src/main/java/org/apache/kylin/job/runners/JobRunner.java 
b/src/core-job/src/main/java/org/apache/kylin/job/runners/JobRunner.java
index 3e839f57f4..b8cd19bed0 100644
--- a/src/core-job/src/main/java/org/apache/kylin/job/runners/JobRunner.java
+++ b/src/core-job/src/main/java/org/apache/kylin/job/runners/JobRunner.java
@@ -18,13 +18,13 @@
 package org.apache.kylin.job.runners;
 
 import org.apache.kylin.common.KylinConfig;
+import org.apache.kylin.common.logging.SetLogCategory;
 import org.apache.kylin.common.util.SetThreadName;
 import org.apache.kylin.job.exception.ExecuteException;
 import org.apache.kylin.job.exception.JobStoppedNonVoluntarilyException;
 import org.apache.kylin.job.exception.JobStoppedVoluntarilyException;
 import org.apache.kylin.job.execution.AbstractExecutable;
 import org.apache.kylin.job.impl.threadpool.NDefaultScheduler;
-import org.apache.kylin.common.logging.SetLogCategory;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -50,6 +50,7 @@ public class JobRunner extends AbstractDefaultSchedulerRunner 
{
 val jobIdSimple = executable.getId().substring(0, 8);
 try (SetThreadName ignored = new 
SetThreadName("JobWorker(project:%s,jobid:%s)", project, jobIdSimple);
 SetLogCategory logCategory = new SetLogCategory("schedule")) {
+context.addRunningJobThread(executable);
 executable.execute(context);
 // trigger the next step asap
 fetcherRunner.scheduleNext();
diff --git 
a/s

(kylin) 02/15: KYLIN-5733 TDS template modify to English

2024-03-29 Thread liyang
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 387e68d0a669b84d269341a8a4127c5b70d6bf55
Author: fanfanAlice <41991994+fanfanal...@users.noreply.github.com>
AuthorDate: Tue Jun 27 17:20:58 2023 +0800

KYLIN-5733 TDS template modify to English
---
 .../src/main/resources/bisync/tds/tableau.connector.template.xml| 2 +-
 src/modeling-service/src/main/resources/bisync/tds/tableau.template.xml | 2 +-
 .../src/test/resources/bisync_tableau/nmodel_basic_all_cols.tds | 2 +-
 .../src/test/resources/bisync_tableau/nmodel_basic_inner_all_cols.tds   | 2 +-
 .../resources/bisync_tableau/nmodel_full_measure_test.connector.tds | 2 +-
 .../bisync_tableau/nmodel_full_measure_test.connector_admin.tds | 2 +-
 .../resources/bisync_tableau/nmodel_full_measure_test.connector_cc.tds  | 2 +-
 .../bisync_tableau/nmodel_full_measure_test.connector_cc_admin.tds  | 2 +-
 .../bisync_tableau/nmodel_full_measure_test.connector_hierarchies.tds   | 2 +-
 .../nmodel_full_measure_test.connector_no_hierarchies.tds   | 2 +-
 .../bisync_tableau/nmodel_full_measure_test.connector_permission.tds| 2 +-
 .../nmodel_full_measure_test.connector_permission_agg_index_col.tds | 2 +-
 .../nmodel_full_measure_test.connector_permission_all_col.tds   | 2 +-
 .../nmodel_full_measure_test.connector_permission_no_measure.tds| 2 +-
 .../bisync_tableau/nmodel_full_measure_test.connector_user.tds  | 2 +-
 .../nmodel_full_measure_test.connector_user_agg_index_col.tds   | 2 +-
 .../bisync_tableau/nmodel_full_measure_test.table_index_connector.tds   | 2 +-
 .../src/test/resources/bisync_tableau/nmodel_full_measure_test.tds  | 2 +-
 18 files changed, 18 insertions(+), 18 deletions(-)

diff --git 
a/src/modeling-service/src/main/resources/bisync/tds/tableau.connector.template.xml
 
b/src/modeling-service/src/main/resources/bisync/tds/tableau.connector.template.xml
index f410cfdb71..a83940f9b6 100755
--- 
a/src/modeling-service/src/main/resources/bisync/tds/tableau.connector.template.xml
+++ 
b/src/modeling-service/src/main/resources/bisync/tds/tableau.connector.template.xml
@@ -25,6 +25,6 @@
   
   
   
-
+
   
 
diff --git 
a/src/modeling-service/src/main/resources/bisync/tds/tableau.template.xml 
b/src/modeling-service/src/main/resources/bisync/tds/tableau.template.xml
index a72b454dfc..16a2ef2b7f 100644
--- a/src/modeling-service/src/main/resources/bisync/tds/tableau.template.xml
+++ b/src/modeling-service/src/main/resources/bisync/tds/tableau.template.xml
@@ -27,6 +27,6 @@
 
 
 
-
+
 
 
diff --git 
a/src/modeling-service/src/test/resources/bisync_tableau/nmodel_basic_all_cols.tds
 
b/src/modeling-service/src/test/resources/bisync_tableau/nmodel_basic_all_cols.tds
index f1a91e41f4..6477036203 100644
--- 
a/src/modeling-service/src/test/resources/bisync_tableau/nmodel_basic_all_cols.tds
+++ 
b/src/modeling-service/src/test/resources/bisync_tableau/nmodel_basic_all_cols.tds
@@ -544,6 +544,6 @@
   
   
   
-
+
   
 
diff --git 
a/src/modeling-service/src/test/resources/bisync_tableau/nmodel_basic_inner_all_cols.tds
 
b/src/modeling-service/src/test/resources/bisync_tableau/nmodel_basic_inner_all_cols.tds
index 6b84dddcbb..edf95da259 100644
--- 
a/src/modeling-service/src/test/resources/bisync_tableau/nmodel_basic_inner_all_cols.tds
+++ 
b/src/modeling-service/src/test/resources/bisync_tableau/nmodel_basic_inner_all_cols.tds
@@ -541,6 +541,6 @@
 
   
   
-
+
   
 
diff --git 
a/src/modeling-service/src/test/resources/bisync_tableau/nmodel_full_measure_test.connector.tds
 
b/src/modeling-service/src/test/resources/bisync_tableau/nmodel_full_measure_test.connector.tds
index ac3e77ff62..7b0a31f9b9 100644
--- 
a/src/modeling-service/src/test/resources/bisync_tableau/nmodel_full_measure_test.connector.tds
+++ 
b/src/modeling-service/src/test/resources/bisync_tableau/nmodel_full_measure_test.connector.tds
@@ -120,6 +120,6 @@
   
   
   
-
+
   
 
diff --git 
a/src/modeling-service/src/test/resources/bisync_tableau/nmodel_full_measure_test.connector_admin.tds
 
b/src/modeling-service/src/test/resources/bisync_tableau/nmodel_full_measure_test.connector_admin.tds
index f02667d2a2..ceaad43004 100644
--- 
a/src/modeling-service/src/test/resources/bisync_tableau/nmodel_full_measure_test.connector_admin.tds
+++ 
b/src/modeling-service/src/test/resources/bisync_tableau/nmodel_full_measure_test.connector_admin.tds
@@ -120,6 +120,6 @@
   
   
   
-
+
   
 
diff --git 
a/src/modeling-service/src/test/resources/bisync_tableau/nmodel_full_measure_test.connector_cc.tds
 
b/src/modeling-service/src/test/resources/bisync_tableau/nmodel_full_measure_test.connector_cc.tds
index 4663e549bc..91017c63d1 100644
--- 
a/src/modeling-service/src/test/resources/bisync_t

(kylin) 01/15: KYLIN-5732 Upgrade snappy-java to fix vulnerabilities

2024-03-29 Thread liyang
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 3ec3063135f6b99cb4f7934d056a6ca7fd4a1e5e
Author: Yinghao Lin <39019287+yhca...@users.noreply.github.com>
AuthorDate: Tue Jun 20 16:23:34 2023 +0800

KYLIN-5732 Upgrade snappy-java to fix vulnerabilities
---
 pom.xml | 8 
 1 file changed, 8 insertions(+)

diff --git a/pom.xml b/pom.xml
index 534e8bcca6..904f18cb80 100644
--- a/pom.xml
+++ b/pom.xml
@@ -371,6 +371,7 @@
 2.13.4.2
 9.23
 1.2.1
+1.1.10.1
 
 
 
@@ -2954,6 +2955,13 @@
 ${system-lambda.version}
 test
 
+
+
+org.xerial.snappy
+snappy-java
+${snappy-java.version}
+
+
 
 
 



(kylin) 13/15: KYLIN-5741 punctuation optimized

2024-03-29 Thread liyang
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 227e7a068360978133f8188cff859723cea458bf
Author: zhong.zhu 
AuthorDate: Tue Dec 19 11:52:18 2023 +0800

KYLIN-5741 punctuation optimized
---
 .../org/apache/kylin/common/msg/CnMessage.java |   2 +-
 .../kylin/rest/service/MetaStoreService.java   |  24 ++--
 .../org/apache/spark/sql/udf/CeilFloorTest.scala   | 139 +++--
 .../apache/kylin/helper/MetadataToolHelper.java|  20 +--
 4 files changed, 94 insertions(+), 91 deletions(-)

diff --git 
a/src/core-common/src/main/java/org/apache/kylin/common/msg/CnMessage.java 
b/src/core-common/src/main/java/org/apache/kylin/common/msg/CnMessage.java
index ed626ec5d1..09c3925756 100644
--- a/src/core-common/src/main/java/org/apache/kylin/common/msg/CnMessage.java
+++ b/src/core-common/src/main/java/org/apache/kylin/common/msg/CnMessage.java
@@ -32,7 +32,7 @@ public class CnMessage extends Message {
 private static final String TASK_TIMEOUT = "执行超时";
 
 private static final String PARAMETER_EMPTY = "请输入参数 “%s” 的值。";
-private static final String PARAMETER_MUST_BE_POSITIVE_NUMBER= "参数 %s 
的值必须为非负数.";
+private static final String PARAMETER_MUST_BE_POSITIVE_NUMBER= "参数 %s 
的值必须为非负数。";
 
 protected CnMessage() {
 
diff --git 
a/src/modeling-service/src/main/java/org/apache/kylin/rest/service/MetaStoreService.java
 
b/src/modeling-service/src/main/java/org/apache/kylin/rest/service/MetaStoreService.java
index bf44347d69..4976131faa 100644
--- 
a/src/modeling-service/src/main/java/org/apache/kylin/rest/service/MetaStoreService.java
+++ 
b/src/modeling-service/src/main/java/org/apache/kylin/rest/service/MetaStoreService.java
@@ -75,6 +75,10 @@ import org.apache.kylin.common.util.JsonUtil;
 import org.apache.kylin.common.util.MetadataChecker;
 import org.apache.kylin.common.util.Pair;
 import org.apache.kylin.common.util.RandomUtil;
+import org.apache.kylin.guava30.shaded.common.collect.Lists;
+import org.apache.kylin.guava30.shaded.common.collect.Maps;
+import org.apache.kylin.guava30.shaded.common.collect.Sets;
+import org.apache.kylin.guava30.shaded.common.io.ByteSource;
 import org.apache.kylin.helper.MetadataToolHelper;
 import org.apache.kylin.helper.RoutineToolHelper;
 import org.apache.kylin.metadata.cube.model.IndexEntity;
@@ -99,6 +103,10 @@ import org.apache.kylin.metadata.project.NProjectManager;
 import org.apache.kylin.metadata.project.ProjectInstance;
 import org.apache.kylin.metadata.query.util.QueryHisStoreUtil;
 import org.apache.kylin.metadata.realization.RealizationStatusEnum;
+import org.apache.kylin.metadata.recommendation.candidate.JdbcRawRecStore;
+import org.apache.kylin.metadata.recommendation.candidate.RawRecItem;
+import org.apache.kylin.metadata.recommendation.candidate.RawRecManager;
+import org.apache.kylin.metadata.recommendation.ref.OptRecManagerV2;
 import org.apache.kylin.metadata.view.LogicalView;
 import org.apache.kylin.metadata.view.LogicalViewManager;
 import org.apache.kylin.rest.aspect.Transaction;
@@ -121,16 +129,6 @@ import 
org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 import org.springframework.web.multipart.MultipartFile;
 
-import org.apache.kylin.guava30.shaded.common.collect.Lists;
-import org.apache.kylin.guava30.shaded.common.collect.Maps;
-import org.apache.kylin.guava30.shaded.common.collect.Sets;
-import org.apache.kylin.guava30.shaded.common.io.ByteSource;
-
-import org.apache.kylin.metadata.recommendation.candidate.JdbcRawRecStore;
-import org.apache.kylin.metadata.recommendation.candidate.RawRecItem;
-import org.apache.kylin.metadata.recommendation.candidate.RawRecManager;
-import org.apache.kylin.metadata.recommendation.ref.OptRecManagerV2;
-
 import lombok.Setter;
 import lombok.val;
 import lombok.var;
@@ -466,9 +464,9 @@ public class MetaStoreService extends BasicService {
 if (config.isDDLLogicalViewEnabled() && 
missTableDesc.isLogicalView()) {
 LogicalView logicalView = 
LogicalViewManager.getInstance(config).get(missTableDesc.getName());
 if (logicalView != null && 
!targetProject.equalsIgnoreCase(logicalView.getCreatedProject())) {
-throw new KylinException(FAILED_CREATE_MODEL, 
String.format(Locale.ROOT,
-" Logical View %s can only add in project %s",
-missTableDesc.getName(), 
logicalView.getCreatedProject()));
+throw new KylinException(FAILED_CREATE_MODEL,
+String.format(Locale.ROOT, " Logical View %s can 
only add in project %s",
+missTableDesc.getName(), 
logicalView.getCreatedProject()));
 }
 }
 }
dif

(kylin) 09/15: KYLIN-5741 change all epoch when empty projects request

2024-03-29 Thread liyang
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 7cd3fd0ecc8ce95ef4f21a84abd1ed251d4e54a4
Author: Yu Gan 
AuthorDate: Thu Jun 29 19:00:05 2023 +0800

KYLIN-5741 change all epoch when empty projects request
---
 .../kylin/rest/controller/NEpochController.java   |  9 -
 .../kylin/rest/controller/NEpochControllerTest.java   | 19 ---
 2 files changed, 20 insertions(+), 8 deletions(-)

diff --git 
a/src/common-server/src/main/java/org/apache/kylin/rest/controller/NEpochController.java
 
b/src/common-server/src/main/java/org/apache/kylin/rest/controller/NEpochController.java
index 7f9f1ff00b..ac194caa73 100644
--- 
a/src/common-server/src/main/java/org/apache/kylin/rest/controller/NEpochController.java
+++ 
b/src/common-server/src/main/java/org/apache/kylin/rest/controller/NEpochController.java
@@ -36,6 +36,9 @@ import org.springframework.web.bind.annotation.ResponseBody;
 
 import io.swagger.annotations.ApiOperation;
 
+import java.util.ArrayList;
+import java.util.Objects;
+
 @Controller
 @RequestMapping(value = "/api/epoch", produces = { HTTP_VND_APACHE_KYLIN_JSON 
})
 public class NEpochController extends NBasicController {
@@ -48,7 +51,11 @@ public class NEpochController extends NBasicController {
 @PostMapping(value = "", produces = { HTTP_VND_APACHE_KYLIN_JSON, 
HTTP_VND_APACHE_KYLIN_V4_PUBLIC_JSON })
 @ResponseBody
 public EnvelopeResponse updateEpochOwner(@RequestBody EpochRequest 
epochRequest) {
-checkCollectionRequiredArg("projects", epochRequest.getProjects());
+if (Objects.isNull(epochRequest.getProjects())) {
+// Avoid following NPEs.
+epochRequest.setProjects(new ArrayList<>(0));
+}
+// Empty projects has specified meanings: all projects do change epoch.
 epochRequest.getProjects().forEach(this::checkProjectName);
 checkRequiredArg("force", epochRequest.getForce());
 epochService.updateEpoch(epochRequest.getProjects(), 
epochRequest.getForce(), epochRequest.isClient());
diff --git 
a/src/common-server/src/test/java/org/apache/kylin/rest/controller/NEpochControllerTest.java
 
b/src/common-server/src/test/java/org/apache/kylin/rest/controller/NEpochControllerTest.java
index 80e0b3bf04..523d95e2c8 100644
--- 
a/src/common-server/src/test/java/org/apache/kylin/rest/controller/NEpochControllerTest.java
+++ 
b/src/common-server/src/test/java/org/apache/kylin/rest/controller/NEpochControllerTest.java
@@ -96,17 +96,12 @@ public class NEpochControllerTest extends 
NLocalFileMetadataTestCase {
 mockMvc.perform(MockMvcRequestBuilders.post("/api/epoch")
 .content(JsonUtil.writeValueAsString(mapRequest2))
 
.contentType(MediaType.APPLICATION_JSON).accept(MediaType.parseMediaType(HTTP_VND_APACHE_KYLIN_V4_PUBLIC_JSON)))
-.andExpect(MockMvcResultMatchers.status().is5xxServerError());
-request.setProjects(Lists.newArrayList());
-mockMvc.perform(MockMvcRequestBuilders.post("/api/epoch")
-.content(JsonUtil.writeValueAsString(request))
-
.contentType(MediaType.APPLICATION_JSON).accept(MediaType.parseMediaType(HTTP_VND_APACHE_KYLIN_V4_PUBLIC_JSON)))
-.andExpect(MockMvcResultMatchers.status().is5xxServerError());
+.andExpect(MockMvcResultMatchers.status().isOk());
 request.setProjects(Lists.newArrayList());
 mockMvc.perform(MockMvcRequestBuilders.post("/api/epoch")
 .content(JsonUtil.writeValueAsString(request))
 
.contentType(MediaType.APPLICATION_JSON).accept(MediaType.parseMediaType(HTTP_VND_APACHE_KYLIN_V4_PUBLIC_JSON)))
-.andExpect(MockMvcResultMatchers.status().is5xxServerError());
+.andExpect(MockMvcResultMatchers.status().isOk());
 request.setProjects(Arrays.asList("DEFAULT"));
 mockMvc.perform(MockMvcRequestBuilders.post("/api/epoch")
 .content(JsonUtil.writeValueAsString(request))
@@ -114,6 +109,16 @@ public class NEpochControllerTest extends 
NLocalFileMetadataTestCase {
 .andExpect(MockMvcResultMatchers.status().isOk());
 }
 
+@Test
+public void testUpdateEpochOwnerWithEmptyProjects() throws Exception {
+val request = new EpochRequest();
+request.setForce(false);
+mockMvc.perform(MockMvcRequestBuilders.post("/api/epoch")
+.content(JsonUtil.writeValueAsString(request))
+
.contentType(MediaType.APPLICATION_JSON).accept(MediaType.parseMediaType(HTTP_VND_APACHE_KYLIN_V4_PUBLIC_JSON)))
+.andExpect(MockMvcResultMatchers.status().isOk());
+}
+
 @Test
 public void testUpdateAllEpochOwner() throws Exception {
 val request = mockStreamingEpochRequest();



(kylin) 15/15: update spark version to 3.2.0-kylin-4.6.12.0

2024-03-29 Thread liyang
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 bcd4220ef2556eaab318d7e2fa4d6e3c1d9fe312
Author: Yu Gan 
AuthorDate: Sat Jul 8 10:08:47 2023 +0800

update spark version to 3.2.0-kylin-4.6.12.0
---
 pom.xml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/pom.xml b/pom.xml
index 8bfc1dd630..9b68f4a83d 100644
--- a/pom.xml
+++ b/pom.xml
@@ -126,7 +126,7 @@
 
 2.0.2
 
-3.2.0-kylin-4.6.9.0
+3.2.0-kylin-4.6.12.0
 
 0.9.2-kylin-r4
 



(kylin) 07/15: KYLIN-5762 Initialize job scheduler encounters NPE

2024-03-29 Thread liyang
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 1d665a82829a82fc9a51181378aa87de1a98dea2
Author: huangsheng 
AuthorDate: Fri Jun 30 10:43:50 2023 +0800

KYLIN-5762 Initialize job scheduler encounters NPE
---
 .../apache/kylin/rest/service/ProjectService.java  |  8 +++
 .../apache/kylin/common/constant/Constants.java|  1 +
 .../org/apache/kylin/common/msg/CnMessage.java |  6 +
 .../java/org/apache/kylin/common/msg/Message.java  |  7 ++
 .../job/impl/threadpool/NDefaultScheduler.java | 21 ++---
 .../apache/kylin/job/runners/FetcherRunner.java|  3 +--
 .../job/impl/threadpool/NDefaultSchedulerTest.java | 21 +
 .../kylin/rest/service/ProjectServiceTest.java | 26 ++
 8 files changed, 83 insertions(+), 10 deletions(-)

diff --git 
a/src/common-service/src/main/java/org/apache/kylin/rest/service/ProjectService.java
 
b/src/common-service/src/main/java/org/apache/kylin/rest/service/ProjectService.java
index d32d8b261e..416f577e0e 100644
--- 
a/src/common-service/src/main/java/org/apache/kylin/rest/service/ProjectService.java
+++ 
b/src/common-service/src/main/java/org/apache/kylin/rest/service/ProjectService.java
@@ -25,6 +25,7 @@ import static 
org.apache.kylin.common.constant.Constants.KYLIN_SOURCE_JDBC_PASS_
 import static 
org.apache.kylin.common.constant.Constants.KYLIN_SOURCE_JDBC_SOURCE_ENABLE_KEY;
 import static 
org.apache.kylin.common.constant.Constants.KYLIN_SOURCE_JDBC_SOURCE_NAME_KEY;
 import static 
org.apache.kylin.common.constant.Constants.KYLIN_SOURCE_JDBC_USER_KEY;
+import static 
org.apache.kylin.common.constant.Constants.KYLIN_JOB_MAX_CONCURRENT_JOBS;
 import static 
org.apache.kylin.common.constant.NonCustomProjectLevelConfig.DATASOURCE_TYPE;
 import static 
org.apache.kylin.common.exception.ServerErrorCode.DATABASE_NOT_EXIST;
 import static 
org.apache.kylin.common.exception.ServerErrorCode.DUPLICATE_PROJECT_NAME;
@@ -82,6 +83,7 @@ import org.apache.kylin.guava30.shaded.common.base.Strings;
 import org.apache.kylin.guava30.shaded.common.collect.Lists;
 import org.apache.kylin.guava30.shaded.common.collect.Maps;
 import org.apache.kylin.guava30.shaded.common.collect.Sets;
+import org.apache.kylin.guava30.shaded.common.primitives.Ints;
 import org.apache.kylin.job.constant.JobStatusEnum;
 import org.apache.kylin.job.execution.AbstractExecutable;
 import org.apache.kylin.job.execution.NExecutableManager;
@@ -431,6 +433,12 @@ public class ProjectService extends BasicService {
 if (projectInstance == null) {
 throw new KylinException(PROJECT_NOT_EXIST, project);
 }
+if (overrideKylinProps.containsKey(KYLIN_JOB_MAX_CONCURRENT_JOBS)) {
+val maxConcurrentJobs = 
Ints.tryParse(overrideKylinProps.get(KYLIN_JOB_MAX_CONCURRENT_JOBS));
+if (Objects.isNull(maxConcurrentJobs) || maxConcurrentJobs < 0)
+throw new KylinException(INVALID_PARAMETER,
+
MsgPicker.getMsg().getIllegalNegative(KYLIN_JOB_MAX_CONCURRENT_JOBS));
+}
 encryptJdbcPassInOverrideKylinProps(overrideKylinProps);
 projectManager.updateProject(project, copyForWrite -> 
copyForWrite.getOverrideKylinProps()
 .putAll(KylinConfig.trimKVFromMap(overrideKylinProps)));
diff --git 
a/src/core-common/src/main/java/org/apache/kylin/common/constant/Constants.java 
b/src/core-common/src/main/java/org/apache/kylin/common/constant/Constants.java
index a49d012fa2..6f3a9e1f13 100644
--- 
a/src/core-common/src/main/java/org/apache/kylin/common/constant/Constants.java
+++ 
b/src/core-common/src/main/java/org/apache/kylin/common/constant/Constants.java
@@ -48,6 +48,7 @@ public class Constants {
 public static final String KYLIN_SOURCE_JDBC_CONNECTION_URL_KEY = 
"kylin.source.jdbc.connection-url";
 public static final String KYLIN_SOURCE_JDBC_USER_KEY = 
"kylin.source.jdbc.user";
 public static final String KYLIN_SOURCE_JDBC_DRIVER_KEY = 
"kylin.source.jdbc.driver";
+public static final String KYLIN_JOB_MAX_CONCURRENT_JOBS = 
"kylin.job.max-concurrent-jobs";
 
 public static final String UNLIMITED = "Unlimited";
 public static final String TRACE_ID = "traceId";
diff --git 
a/src/core-common/src/main/java/org/apache/kylin/common/msg/CnMessage.java 
b/src/core-common/src/main/java/org/apache/kylin/common/msg/CnMessage.java
index c62f52156d..ed626ec5d1 100644
--- a/src/core-common/src/main/java/org/apache/kylin/common/msg/CnMessage.java
+++ b/src/core-common/src/main/java/org/apache/kylin/common/msg/CnMessage.java
@@ -32,6 +32,7 @@ public class CnMessage extends Message {
 private static final String TASK_TIMEOUT = "执行超时";
 
 private static final String PARAMETER_EMPTY = "请输入参数 “%s” 的值。"

(kylin) 06/15: KYLIN-5742 Make the query result of duplicate group sets same as Spark

2024-03-29 Thread liyang
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 c396134127b17e741e6ead1197589afe7bb773d7
Author: fengguangyuan 
AuthorDate: Fri Jun 30 15:28:07 2023 +0800

KYLIN-5742 Make the query result of duplicate group sets same as Spark

Co-authored-by: Guangyuan Feng 
---
 pom.xml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/pom.xml b/pom.xml
index a61ca736d4..83adcd3e33 100644
--- a/pom.xml
+++ b/pom.xml
@@ -135,7 +135,7 @@
 0.3.0
 
 
-1.116.0-kylin-4.x-r029
+1.116.0-kylin-4.x-r031
 4.x_1.10-r01
 
 



svn commit: r1915437 [1/5] - in /kylin/site: ./ about/ blog/ blog/2015/01/25/introduce-data-model/ blog/2015/06/10/release-v0.7.1-incubating/ blog/2015/08/13/kylin-dictionary/ blog/2015/08/15/fast-cub

2024-01-28 Thread liyang
Author: liyang
Date: Mon Jan 29 02:47:55 2024
New Revision: 1915437

URL: http://svn.apache.org/viewvc?rev=1915437=rev
Log:
kylin 4.0.4 release

Modified:
kylin/site/about/index.html
kylin/site/blog/2015/01/25/introduce-data-model/index.html
kylin/site/blog/2015/06/10/release-v0.7.1-incubating/index.html
kylin/site/blog/2015/08/13/kylin-dictionary/index.html
kylin/site/blog/2015/08/15/fast-cubing/index.html
kylin/site/blog/2015/09/06/release-v1.0-incubating/index.html
kylin/site/blog/2015/09/09/fast-cubing-on-spark/index.html
kylin/site/blog/2015/09/25/hybrid-model/index.html
kylin/site/blog/2015/10/14/Apache-Kylin-Meetup/index.html
kylin/site/blog/2015/10/25/release-v1.1-incubating/index.html
kylin/site/blog/2015/12/23/release-v1.2/index.html
kylin/site/blog/2015/12/25/support-powerbi-tableau9/index.html
kylin/site/blog/2016/02/03/streaming-cubing/index.html
kylin/site/blog/2016/02/18/new-aggregation-group/index.html
kylin/site/blog/2016/03/16/release-v1.3.0/index.html
kylin/site/blog/2016/03/17/release-v1.5.0/index.html
kylin/site/blog/2016/03/19/approximate-topn-measure/index.html
kylin/site/blog/2016/04/12/release-v1.5.1/index.html
kylin/site/blog/2016/05/26/release-v1.5.2/index.html
kylin/site/blog/2016/05/29/raw-measure-in-kylin/index.html
kylin/site/blog/2016/06/10/diagnosis-tool/index.html
kylin/site/blog/2016/06/10/standalone-hbase-cluster/index.html
kylin/site/blog/2016/07/28/release-v1.5.3/index.html
kylin/site/blog/2016/08/01/count-distinct-in-kylin/index.html
kylin/site/blog/2016/08/27/query-metrics-in-kylin/index.html
kylin/site/blog/2016/10/18/new-nrt-streaming/index.html
kylin/site/blog/2016/11/16/window-function/index.html
kylin/site/blog/2016/11/28/intersect-count/index.html
kylin/site/blog/2016/12/04/release-v1.6.0/index.html
kylin/site/blog/2017/02/23/by-layer-spark-cubing/index.html
kylin/site/blog/2017/02/25/v2.0.0-beta-ready/index.html
kylin/site/blog/2017/04/01/percentile-measure/index.html
kylin/site/blog/2017/07/21/Improving-Spark-Cubing/index.html
kylin/site/blog/2018/01/01/kylin-and-superset/index.html
kylin/site/blog/2018/03/04/release-v2.3.0/index.html
kylin/site/blog/2018/05/08/redash-kylin-plugin-strikingly/index.html
kylin/site/blog/2018/07/16/Star-Schema-Benchmark-on-Apache-Kylin/index.html
kylin/site/blog/2018/09/20/release-v2.5.0/index.html

kylin/site/blog/2018/12/12/why-did-meituan-develop-kylin-on-druid-part1-of-2/index.html
kylin/site/blog/2019/01/16/introduce-data-source-sdk-v2.6.0/index.html
kylin/site/blog/2019/01/17/cisco-throughput-5x/index.html
kylin/site/blog/2019/01/18/release-v2.6.0/index.html
kylin/site/blog/2019/04/12/rt-streaming-design/index.html
kylin/site/blog/2019/04/19/release-v3.0.0-alpha/index.html
kylin/site/blog/2019/05/29/kylin-2.4.1-to-2.6.1/index.html

kylin/site/blog/2019/06/26/use-python-for-data-science-with-apache-kylin/index.html
kylin/site/blog/2019/07/01/deep-dive-real-time-olap/index.html

kylin/site/blog/2019/07/30/detailed-analysis-of-refine-query-cache/index.html
kylin/site/blog/2019/09/22/kylin-tableau/index.html
kylin/site/blog/2021/06/17/Why-did-Youzan-choose-Kylin4/index.html

kylin/site/blog/2021/07/02/Apache-Kylin4-A-new-storage-and-compute-architecture/index.html

kylin/site/blog/2021/08/03/How-Meituan-Dominates-Online-Shopping-with-Apache-Kylin/index.html

kylin/site/blog/2021/10/21/Local-Cache-and-Soft-Affinity-Scheduling/index.html
kylin/site/blog/2022/01/12/The-Future-Of-Kylin/index.html
kylin/site/blog/2022/03/17/kylin4-now-supporting-aws-glue-catalog/index.html
kylin/site/blog/2022/03/31/how-to-use-excel-to-query-kylin/index.html
kylin/site/blog/2022/04/20/kylin4-on-cloud-part1/index.html
kylin/site/blog/2022/04/20/kylin4-on-cloud-part2/index.html
kylin/site/blog/index.html
kylin/site/cn/blog/index.html
kylin/site/cn/development/datasource_sdk.html
kylin/site/cn/development/howto_setup_frontend_registry.html
kylin/site/cn/development40/howto_setup_frontend_registry.html
kylin/site/cn/docs24/install/kylin_docker.html
kylin/site/cn/docs30/install/kylin_docker.html
kylin/site/cn/docs30/install/kylin_on_kubernetes.html
kylin/site/cn/docs31/install/kylin_docker.html
kylin/site/cn/docs31/install/kylin_on_kubernetes.html
kylin/site/cn_blog/2015/10/25/release-v1.1-incubating/index.html
kylin/site/cn_blog/2015/12/23/release-v1.2/index.html
kylin/site/cn_blog/2015/12/25/support-powerbi-tableau9/index.html
kylin/site/cn_blog/2016/03/16/release-v1.3.0/index.html
kylin/site/cn_blog/2016/03/17/release-v1.5.0/index.html
kylin/site/cn_blog/2016/04/12/release-v1.5.1/index.html
kylin/site/cn_blog/2016/05/26/release-v1.5.2/index.html
kylin/site/cn_blog/2016/07/28/release-v1.5.3/index.html
kylin/site/cn_blog/2016/12/04/release-v1.6.0

svn commit: r1915437 [4/5] - in /kylin/site: ./ about/ blog/ blog/2015/01/25/introduce-data-model/ blog/2015/06/10/release-v0.7.1-incubating/ blog/2015/08/13/kylin-dictionary/ blog/2015/08/15/fast-cub

2024-01-28 Thread liyang
Modified: kylin/site/docs30/install/index.html
URL: 
http://svn.apache.org/viewvc/kylin/site/docs30/install/index.html?rev=1915437=1915436=1915437=diff
==
--- kylin/site/docs30/install/index.html (original)
+++ kylin/site/docs30/install/index.html Mon Jan 29 02:47:55 2024
@@ -144,7 +144,7 @@ var _hmt = _hmt || [];
   
 Docs
 
-  Kylin 4.0.2
+  Kylin 4.0.4
   Kylin 3.1.3
   Kylin 2.4.0
   Archive

Modified: kylin/site/docs30/install/kylin_aws_emr.html
URL: 
http://svn.apache.org/viewvc/kylin/site/docs30/install/kylin_aws_emr.html?rev=1915437=1915436=1915437=diff
==
--- kylin/site/docs30/install/kylin_aws_emr.html (original)
+++ kylin/site/docs30/install/kylin_aws_emr.html Mon Jan 29 02:47:55 2024
@@ -144,7 +144,7 @@ var _hmt = _hmt || [];
   
 Docs
 
-  Kylin 4.0.2
+  Kylin 4.0.4
   Kylin 3.1.3
   Kylin 2.4.0
   Archive

Modified: kylin/site/docs30/install/kylin_cluster.html
URL: 
http://svn.apache.org/viewvc/kylin/site/docs30/install/kylin_cluster.html?rev=1915437=1915436=1915437=diff
==
--- kylin/site/docs30/install/kylin_cluster.html (original)
+++ kylin/site/docs30/install/kylin_cluster.html Mon Jan 29 02:47:55 2024
@@ -144,7 +144,7 @@ var _hmt = _hmt || [];
   
 Docs
 
-  Kylin 4.0.2
+  Kylin 4.0.4
   Kylin 3.1.3
   Kylin 2.4.0
   Archive

Modified: kylin/site/docs30/install/kylin_docker.html
URL: 
http://svn.apache.org/viewvc/kylin/site/docs30/install/kylin_docker.html?rev=1915437=1915436=1915437=diff
==
--- kylin/site/docs30/install/kylin_docker.html (original)
+++ kylin/site/docs30/install/kylin_docker.html Mon Jan 29 02:47:55 2024
@@ -144,7 +144,7 @@ var _hmt = _hmt || [];
   
 Docs
 
-  Kylin 4.0.2
+  Kylin 4.0.4
   Kylin 3.1.3
   Kylin 2.4.0
   Archive

Modified: kylin/site/docs30/install/kylin_on_kubernetes.html
URL: 
http://svn.apache.org/viewvc/kylin/site/docs30/install/kylin_on_kubernetes.html?rev=1915437=1915436=1915437=diff
==
--- kylin/site/docs30/install/kylin_on_kubernetes.html (original)
+++ kylin/site/docs30/install/kylin_on_kubernetes.html Mon Jan 29 02:47:55 2024
@@ -144,7 +144,7 @@ var _hmt = _hmt || [];
   
 Docs
 
-  Kylin 4.0.2
+  Kylin 4.0.4
   Kylin 3.1.3
   Kylin 2.4.0
   Archive

Modified: kylin/site/docs30/release_notes.html
URL: 
http://svn.apache.org/viewvc/kylin/site/docs30/release_notes.html?rev=1915437=1915436=1915437=diff
==
--- kylin/site/docs30/release_notes.html (original)
+++ kylin/site/docs30/release_notes.html Mon Jan 29 02:47:55 2024
@@ -144,7 +144,7 @@ var _hmt = _hmt || [];
   
 Docs
 
-  Kylin 4.0.2
+  Kylin 4.0.4
   Kylin 3.1.3
   Kylin 2.4.0
   Archive

Modified: kylin/site/docs30/security.html
URL: 
http://svn.apache.org/viewvc/kylin/site/docs30/security.html?rev=1915437=1915436=1915437=diff
==
--- kylin/site/docs30/security.html (original)
+++ kylin/site/docs30/security.html Mon Jan 29 02:47:55 2024
@@ -144,7 +144,7 @@ var _hmt = _hmt || [];
   
 Docs
 
-  Kylin 4.0.2
+  Kylin 4.0.4
   Kylin 3.1.3
   Kylin 2.4.0
   Archive

Modified: kylin/site/docs30/tutorial/Qlik.html
URL: 
http://svn.apache.org/viewvc/kylin/site/docs30/tutorial/Qlik.html?rev=1915437=1915436=1915437=diff
==
--- kylin/site/docs30/tutorial/Qlik.html (original)
+++ kylin/site/docs30/tutorial/Qlik.html Mon Jan 29 02:47:55 2024
@@ -144,7 +144,7 @@ var _hmt = _hmt || [];
   
 Docs
 
-  Kylin 4.0.2
+  Kylin 4.0.4
   Kylin 3.1.3
   Kylin 2.4.0
   Archive

Modified: kylin/site/docs30/tutorial/acl.html
URL: 
http://svn.apache.org/viewvc/kylin/site/docs30/tutorial/acl.html?rev=1915437=1915436=1915437=diff
==
--- kylin/site/docs30/tutorial/acl.html (original)
+++ kylin/site/docs30/tutorial/acl.html Mon 

svn commit: r1915437 [3/5] - in /kylin/site: ./ about/ blog/ blog/2015/01/25/introduce-data-model/ blog/2015/06/10/release-v0.7.1-incubating/ blog/2015/08/13/kylin-dictionary/ blog/2015/08/15/fast-cub

2024-01-28 Thread liyang
Modified: kylin/site/docs/tutorial/project_level_acl.html
URL: 
http://svn.apache.org/viewvc/kylin/site/docs/tutorial/project_level_acl.html?rev=1915437=1915436=1915437=diff
==
--- kylin/site/docs/tutorial/project_level_acl.html (original)
+++ kylin/site/docs/tutorial/project_level_acl.html Mon Jan 29 02:47:55 2024
@@ -144,7 +144,7 @@ var _hmt = _hmt || [];
   
 Docs
 
-  Kylin 4.0.2
+  Kylin 4.0.4
   Kylin 3.1.3
   Kylin 2.4.0
   Archive

Modified: kylin/site/docs/tutorial/query_pushdown.html
URL: 
http://svn.apache.org/viewvc/kylin/site/docs/tutorial/query_pushdown.html?rev=1915437=1915436=1915437=diff
==
--- kylin/site/docs/tutorial/query_pushdown.html (original)
+++ kylin/site/docs/tutorial/query_pushdown.html Mon Jan 29 02:47:55 2024
@@ -144,7 +144,7 @@ var _hmt = _hmt || [];
   
 Docs
 
-  Kylin 4.0.2
+  Kylin 4.0.4
   Kylin 3.1.3
   Kylin 2.4.0
   Archive

Modified: kylin/site/docs/tutorial/quick_start_for_mdx.html
URL: 
http://svn.apache.org/viewvc/kylin/site/docs/tutorial/quick_start_for_mdx.html?rev=1915437=1915436=1915437=diff
==
--- kylin/site/docs/tutorial/quick_start_for_mdx.html (original)
+++ kylin/site/docs/tutorial/quick_start_for_mdx.html Mon Jan 29 02:47:55 2024
@@ -144,7 +144,7 @@ var _hmt = _hmt || [];
   
 Docs
 
-  Kylin 4.0.2
+  Kylin 4.0.4
   Kylin 3.1.3
   Kylin 2.4.0
   Archive

Modified: kylin/site/docs/tutorial/setup_systemcube.html
URL: 
http://svn.apache.org/viewvc/kylin/site/docs/tutorial/setup_systemcube.html?rev=1915437=1915436=1915437=diff
==
--- kylin/site/docs/tutorial/setup_systemcube.html (original)
+++ kylin/site/docs/tutorial/setup_systemcube.html Mon Jan 29 02:47:55 2024
@@ -144,7 +144,7 @@ var _hmt = _hmt || [];
   
 Docs
 
-  Kylin 4.0.2
+  Kylin 4.0.4
   Kylin 3.1.3
   Kylin 2.4.0
   Archive

Modified: kylin/site/docs/tutorial/sql_reference.html
URL: 
http://svn.apache.org/viewvc/kylin/site/docs/tutorial/sql_reference.html?rev=1915437=1915436=1915437=diff
==
--- kylin/site/docs/tutorial/sql_reference.html (original)
+++ kylin/site/docs/tutorial/sql_reference.html Mon Jan 29 02:47:55 2024
@@ -144,7 +144,7 @@ var _hmt = _hmt || [];
   
 Docs
 
-  Kylin 4.0.2
+  Kylin 4.0.4
   Kylin 3.1.3
   Kylin 2.4.0
   Archive

Modified: kylin/site/docs/tutorial/squirrel.html
URL: 
http://svn.apache.org/viewvc/kylin/site/docs/tutorial/squirrel.html?rev=1915437=1915436=1915437=diff
==
--- kylin/site/docs/tutorial/squirrel.html (original)
+++ kylin/site/docs/tutorial/squirrel.html Mon Jan 29 02:47:55 2024
@@ -144,7 +144,7 @@ var _hmt = _hmt || [];
   
 Docs
 
-  Kylin 4.0.2
+  Kylin 4.0.4
   Kylin 3.1.3
   Kylin 2.4.0
   Archive

Modified: kylin/site/docs/tutorial/superset.html
URL: 
http://svn.apache.org/viewvc/kylin/site/docs/tutorial/superset.html?rev=1915437=1915436=1915437=diff
==
--- kylin/site/docs/tutorial/superset.html (original)
+++ kylin/site/docs/tutorial/superset.html Mon Jan 29 02:47:55 2024
@@ -144,7 +144,7 @@ var _hmt = _hmt || [];
   
 Docs
 
-  Kylin 4.0.2
+  Kylin 4.0.4
   Kylin 3.1.3
   Kylin 2.4.0
   Archive

Modified: kylin/site/docs/tutorial/tableau.html
URL: 
http://svn.apache.org/viewvc/kylin/site/docs/tutorial/tableau.html?rev=1915437=1915436=1915437=diff
==
--- kylin/site/docs/tutorial/tableau.html (original)
+++ kylin/site/docs/tutorial/tableau.html Mon Jan 29 02:47:55 2024
@@ -144,7 +144,7 @@ var _hmt = _hmt || [];
   
 Docs
 
-  Kylin 4.0.2
+  Kylin 4.0.4
   Kylin 3.1.3
   Kylin 2.4.0
   Archive

Modified: kylin/site/docs/tutorial/tableau_91.html
URL: 
http://svn.apache.org/viewvc/kylin/site/docs/tutorial/tableau_91.html?rev=1915437=1915436=1915437=diff
==

svn commit: r1915437 [2/5] - in /kylin/site: ./ about/ blog/ blog/2015/01/25/introduce-data-model/ blog/2015/06/10/release-v0.7.1-incubating/ blog/2015/08/13/kylin-dictionary/ blog/2015/08/15/fast-cub

2024-01-28 Thread liyang
Modified: kylin/site/cn_blog/2015/12/25/support-powerbi-tableau9/index.html
URL: 
http://svn.apache.org/viewvc/kylin/site/cn_blog/2015/12/25/support-powerbi-tableau9/index.html?rev=1915437=1915436=1915437=diff
==
--- kylin/site/cn_blog/2015/12/25/support-powerbi-tableau9/index.html (original)
+++ kylin/site/cn_blog/2015/12/25/support-powerbi-tableau9/index.html Mon Jan 
29 02:47:55 2024
@@ -143,7 +143,7 @@ var _hmt = _hmt || [];
   
 Docs
 
-  Kylin 4.0.2
+  Kylin 4.0.4
   Kylin 3.1.3
   Kylin 2.4.0
   Archive

Modified: kylin/site/cn_blog/2016/03/16/release-v1.3.0/index.html
URL: 
http://svn.apache.org/viewvc/kylin/site/cn_blog/2016/03/16/release-v1.3.0/index.html?rev=1915437=1915436=1915437=diff
==
--- kylin/site/cn_blog/2016/03/16/release-v1.3.0/index.html (original)
+++ kylin/site/cn_blog/2016/03/16/release-v1.3.0/index.html Mon Jan 29 02:47:55 
2024
@@ -143,7 +143,7 @@ var _hmt = _hmt || [];
   
 Docs
 
-  Kylin 4.0.2
+  Kylin 4.0.4
   Kylin 3.1.3
   Kylin 2.4.0
   Archive

Modified: kylin/site/cn_blog/2016/03/17/release-v1.5.0/index.html
URL: 
http://svn.apache.org/viewvc/kylin/site/cn_blog/2016/03/17/release-v1.5.0/index.html?rev=1915437=1915436=1915437=diff
==
--- kylin/site/cn_blog/2016/03/17/release-v1.5.0/index.html (original)
+++ kylin/site/cn_blog/2016/03/17/release-v1.5.0/index.html Mon Jan 29 02:47:55 
2024
@@ -143,7 +143,7 @@ var _hmt = _hmt || [];
   
 Docs
 
-  Kylin 4.0.2
+  Kylin 4.0.4
   Kylin 3.1.3
   Kylin 2.4.0
   Archive

Modified: kylin/site/cn_blog/2016/04/12/release-v1.5.1/index.html
URL: 
http://svn.apache.org/viewvc/kylin/site/cn_blog/2016/04/12/release-v1.5.1/index.html?rev=1915437=1915436=1915437=diff
==
--- kylin/site/cn_blog/2016/04/12/release-v1.5.1/index.html (original)
+++ kylin/site/cn_blog/2016/04/12/release-v1.5.1/index.html Mon Jan 29 02:47:55 
2024
@@ -143,7 +143,7 @@ var _hmt = _hmt || [];
   
 Docs
 
-  Kylin 4.0.2
+  Kylin 4.0.4
   Kylin 3.1.3
   Kylin 2.4.0
   Archive

Modified: kylin/site/cn_blog/2016/05/26/release-v1.5.2/index.html
URL: 
http://svn.apache.org/viewvc/kylin/site/cn_blog/2016/05/26/release-v1.5.2/index.html?rev=1915437=1915436=1915437=diff
==
--- kylin/site/cn_blog/2016/05/26/release-v1.5.2/index.html (original)
+++ kylin/site/cn_blog/2016/05/26/release-v1.5.2/index.html Mon Jan 29 02:47:55 
2024
@@ -143,7 +143,7 @@ var _hmt = _hmt || [];
   
 Docs
 
-  Kylin 4.0.2
+  Kylin 4.0.4
   Kylin 3.1.3
   Kylin 2.4.0
   Archive

Modified: kylin/site/cn_blog/2016/07/28/release-v1.5.3/index.html
URL: 
http://svn.apache.org/viewvc/kylin/site/cn_blog/2016/07/28/release-v1.5.3/index.html?rev=1915437=1915436=1915437=diff
==
--- kylin/site/cn_blog/2016/07/28/release-v1.5.3/index.html (original)
+++ kylin/site/cn_blog/2016/07/28/release-v1.5.3/index.html Mon Jan 29 02:47:55 
2024
@@ -143,7 +143,7 @@ var _hmt = _hmt || [];
   
 Docs
 
-  Kylin 4.0.2
+  Kylin 4.0.4
   Kylin 3.1.3
   Kylin 2.4.0
   Archive

Modified: kylin/site/cn_blog/2016/12/04/release-v1.6.0/index.html
URL: 
http://svn.apache.org/viewvc/kylin/site/cn_blog/2016/12/04/release-v1.6.0/index.html?rev=1915437=1915436=1915437=diff
==
--- kylin/site/cn_blog/2016/12/04/release-v1.6.0/index.html (original)
+++ kylin/site/cn_blog/2016/12/04/release-v1.6.0/index.html Mon Jan 29 02:47:55 
2024
@@ -143,7 +143,7 @@ var _hmt = _hmt || [];
   
 Docs
 
-  Kylin 4.0.2
+  Kylin 4.0.4
   Kylin 3.1.3
   Kylin 2.4.0
   Archive

Modified: kylin/site/cn_blog/2017/02/25/v2.0.0-beta-ready/index.html
URL: 
http://svn.apache.org/viewvc/kylin/site/cn_blog/2017/02/25/v2.0.0-beta-ready/index.html?rev=1915437=1915436=1915437=diff
==
--- kylin/site/cn_blog/2017/02/25/v2.0.0-beta-ready/index.html (original)
+++ kylin/site/cn_blog/2017/02/25/v2.0.0-beta-ready/index.html Mon Jan 29 
02:47:55 2024
@@ 

svn commit: r1915437 [5/5] - in /kylin/site: ./ about/ blog/ blog/2015/01/25/introduce-data-model/ blog/2015/06/10/release-v0.7.1-incubating/ blog/2015/08/13/kylin-dictionary/ blog/2015/08/15/fast-cub

2024-01-28 Thread liyang
Modified: kylin/site/docs31/tutorial/realtime_olap.html
URL: 
http://svn.apache.org/viewvc/kylin/site/docs31/tutorial/realtime_olap.html?rev=1915437=1915436=1915437=diff
==
--- kylin/site/docs31/tutorial/realtime_olap.html (original)
+++ kylin/site/docs31/tutorial/realtime_olap.html Mon Jan 29 02:47:55 2024
@@ -144,7 +144,7 @@ var _hmt = _hmt || [];
   
 Docs
 
-  Kylin 4.0.2
+  Kylin 4.0.4
   Kylin 3.1.3
   Kylin 2.4.0
   Archive

Modified: kylin/site/docs31/tutorial/setup_jdbc_datasource.html
URL: 
http://svn.apache.org/viewvc/kylin/site/docs31/tutorial/setup_jdbc_datasource.html?rev=1915437=1915436=1915437=diff
==
--- kylin/site/docs31/tutorial/setup_jdbc_datasource.html (original)
+++ kylin/site/docs31/tutorial/setup_jdbc_datasource.html Mon Jan 29 02:47:55 
2024
@@ -144,7 +144,7 @@ var _hmt = _hmt || [];
   
 Docs
 
-  Kylin 4.0.2
+  Kylin 4.0.4
   Kylin 3.1.3
   Kylin 2.4.0
   Archive

Modified: kylin/site/docs31/tutorial/setup_systemcube.html
URL: 
http://svn.apache.org/viewvc/kylin/site/docs31/tutorial/setup_systemcube.html?rev=1915437=1915436=1915437=diff
==
--- kylin/site/docs31/tutorial/setup_systemcube.html (original)
+++ kylin/site/docs31/tutorial/setup_systemcube.html Mon Jan 29 02:47:55 2024
@@ -144,7 +144,7 @@ var _hmt = _hmt || [];
   
 Docs
 
-  Kylin 4.0.2
+  Kylin 4.0.4
   Kylin 3.1.3
   Kylin 2.4.0
   Archive

Modified: kylin/site/docs31/tutorial/spark.html
URL: 
http://svn.apache.org/viewvc/kylin/site/docs31/tutorial/spark.html?rev=1915437=1915436=1915437=diff
==
--- kylin/site/docs31/tutorial/spark.html (original)
+++ kylin/site/docs31/tutorial/spark.html Mon Jan 29 02:47:55 2024
@@ -144,7 +144,7 @@ var _hmt = _hmt || [];
   
 Docs
 
-  Kylin 4.0.2
+  Kylin 4.0.4
   Kylin 3.1.3
   Kylin 2.4.0
   Archive

Modified: kylin/site/docs31/tutorial/sql_reference.html
URL: 
http://svn.apache.org/viewvc/kylin/site/docs31/tutorial/sql_reference.html?rev=1915437=1915436=1915437=diff
==
--- kylin/site/docs31/tutorial/sql_reference.html (original)
+++ kylin/site/docs31/tutorial/sql_reference.html Mon Jan 29 02:47:55 2024
@@ -144,7 +144,7 @@ var _hmt = _hmt || [];
   
 Docs
 
-  Kylin 4.0.2
+  Kylin 4.0.4
   Kylin 3.1.3
   Kylin 2.4.0
   Archive

Modified: kylin/site/docs31/tutorial/squirrel.html
URL: 
http://svn.apache.org/viewvc/kylin/site/docs31/tutorial/squirrel.html?rev=1915437=1915436=1915437=diff
==
--- kylin/site/docs31/tutorial/squirrel.html (original)
+++ kylin/site/docs31/tutorial/squirrel.html Mon Jan 29 02:47:55 2024
@@ -144,7 +144,7 @@ var _hmt = _hmt || [];
   
 Docs
 
-  Kylin 4.0.2
+  Kylin 4.0.4
   Kylin 3.1.3
   Kylin 2.4.0
   Archive

Modified: kylin/site/docs31/tutorial/superset.html
URL: 
http://svn.apache.org/viewvc/kylin/site/docs31/tutorial/superset.html?rev=1915437=1915436=1915437=diff
==
--- kylin/site/docs31/tutorial/superset.html (original)
+++ kylin/site/docs31/tutorial/superset.html Mon Jan 29 02:47:55 2024
@@ -144,7 +144,7 @@ var _hmt = _hmt || [];
   
 Docs
 
-  Kylin 4.0.2
+  Kylin 4.0.4
   Kylin 3.1.3
   Kylin 2.4.0
   Archive

Modified: kylin/site/docs31/tutorial/tableau.html
URL: 
http://svn.apache.org/viewvc/kylin/site/docs31/tutorial/tableau.html?rev=1915437=1915436=1915437=diff
==
--- kylin/site/docs31/tutorial/tableau.html (original)
+++ kylin/site/docs31/tutorial/tableau.html Mon Jan 29 02:47:55 2024
@@ -144,7 +144,7 @@ var _hmt = _hmt || [];
   
 Docs
 
-  Kylin 4.0.2
+  Kylin 4.0.4
   Kylin 3.1.3
   Kylin 2.4.0
   Archive

Modified: kylin/site/docs31/tutorial/tableau_91.html
URL: 
http://svn.apache.org/viewvc/kylin/site/docs31/tutorial/tableau_91.html?rev=1915437=1915436=1915437=diff

svn commit: r66903 - /release/kylin/apache-kylin-4.0.4/

2024-01-28 Thread liyang
Author: liyang
Date: Mon Jan 29 01:09:29 2024
New Revision: 66903

Log:
release 4.0.4

Added:
release/kylin/apache-kylin-4.0.4/
release/kylin/apache-kylin-4.0.4/apache-kylin-4.0.4-bin-spark3.tar.gz   
(with props)
release/kylin/apache-kylin-4.0.4/apache-kylin-4.0.4-bin-spark3.tar.gz.asc
release/kylin/apache-kylin-4.0.4/apache-kylin-4.0.4-bin-spark3.tar.gz.sha256
release/kylin/apache-kylin-4.0.4/apache-kylin-4.0.4-source-release.zip   
(with props)
release/kylin/apache-kylin-4.0.4/apache-kylin-4.0.4-source-release.zip.asc

release/kylin/apache-kylin-4.0.4/apache-kylin-4.0.4-source-release.zip.sha256

Added: release/kylin/apache-kylin-4.0.4/apache-kylin-4.0.4-bin-spark3.tar.gz
==
Binary file - no diff available.

Propchange: 
release/kylin/apache-kylin-4.0.4/apache-kylin-4.0.4-bin-spark3.tar.gz
--
svn:mime-type = application/octet-stream

Added: release/kylin/apache-kylin-4.0.4/apache-kylin-4.0.4-bin-spark3.tar.gz.asc
==
--- release/kylin/apache-kylin-4.0.4/apache-kylin-4.0.4-bin-spark3.tar.gz.asc 
(added)
+++ release/kylin/apache-kylin-4.0.4/apache-kylin-4.0.4-bin-spark3.tar.gz.asc 
Mon Jan 29 01:09:29 2024
@@ -0,0 +1,16 @@
+-BEGIN PGP SIGNATURE-
+
+iQIzBAABCgAdFiEEz0iPJCu8Oohdt8bfaF9bXdJU3okFAmW1a4QACgkQaF9bXdJU
+3omBFA/9E/W4YcpaPbCM9COtQZcvaUMpDYnvyk1TeSxa/ovGDBVLMUmO+mMPyiOj
+6JV2WQ5esiZyR1/Z6aZD96eXgOMnAEIYZPy318xuvKCycqfkjJcE+JmpwNTWODAJ
+VDH+PsD/g0HYnDXF+Aqyy6Leez0QIxsVLFuwdskinr/dhR7DRFbdMOD+sOYcC1H0
+tj9dWFCRaaLtJ4zsu7r3eIIACfP/WRvU5fC7jT5LczeRcHiASgg3JE3UsWvZmCew
+UucQg6INh+tKilZwpna7fQ4dQHtyX5C2IRdfdHElfYdSnd+skZDC9kexOuX5/1lp
+Hp0obF1fqzA/yxqTttZUiqL5BqSzfqzidqAVgH2VpBuIIlOYMuQ7IuO3XN9r9zWa
+Bj5vrlO0SU11/xH0mwTRmhtsA6+ovXdJ0gGYdgBQhTtnPu2WD+oXN9V+2cklXGRc
+E70aIqaKmc8M8uxaabFw2aqwdFn+FLS3rO867srxQZlJ1xkU+w0Yb5gPQnXBNLeV
+v7sU4O/fwGzh3HuNVVnf+G8o5X8wdX0mY3xOUmEUXixSX0n4GKWffAXo4ROGflKe
+LG/6yvedqhADJGoviucPgWn3P6DIz3d3uvVXNhx1MLyDRiPuXLfzXN2Cj6gHCutW
+q8ohMi6WgfKcyBJ+9XmsLa4xDxnaRbx0uE5fIM/QqQPaC9QWhpU=
+=Fz2z
+-END PGP SIGNATURE-

Added: 
release/kylin/apache-kylin-4.0.4/apache-kylin-4.0.4-bin-spark3.tar.gz.sha256
==
--- 
release/kylin/apache-kylin-4.0.4/apache-kylin-4.0.4-bin-spark3.tar.gz.sha256 
(added)
+++ 
release/kylin/apache-kylin-4.0.4/apache-kylin-4.0.4-bin-spark3.tar.gz.sha256 
Mon Jan 29 01:09:29 2024
@@ -0,0 +1 @@
+102cbe845299813e379bb0618935e6b5388157d78acbfb3b78919ae43adf32eb  
apache-kylin-4.0.4-bin-spark3.tar.gz

Added: release/kylin/apache-kylin-4.0.4/apache-kylin-4.0.4-source-release.zip
==
Binary file - no diff available.

Propchange: 
release/kylin/apache-kylin-4.0.4/apache-kylin-4.0.4-source-release.zip
--
svn:mime-type = application/octet-stream

Added: 
release/kylin/apache-kylin-4.0.4/apache-kylin-4.0.4-source-release.zip.asc
==
--- release/kylin/apache-kylin-4.0.4/apache-kylin-4.0.4-source-release.zip.asc 
(added)
+++ release/kylin/apache-kylin-4.0.4/apache-kylin-4.0.4-source-release.zip.asc 
Mon Jan 29 01:09:29 2024
@@ -0,0 +1,17 @@
+-BEGIN PGP SIGNATURE-
+Version: GnuPG v2.0.14 (GNU/Linux)
+
+iQIcBAABCgAGBQJlqq51AAoJEGhfW13SVN6Jzs4P/A4GJezdspBL3q+lbq/vhpzP
+3bAc4+3rFwl67tn1n+iaT15NHt3P1Ntn1irt29xTx4V9z/O80/HN6+S3aArLBt1y
+Erla6YK2DlxdJKnDqNGalxqonsfVKlG4r8qQMwhnGNiqYkeEQel6pdBgAGfnVKuG
+V2LAdBJCs5RhLDpqK8tIT8FpI+ac9Lww27LWyd3dIQ9Z15m/72BG8QQCP/pDobxr
+4q8H2irUGh3IVG3Fdk2SuKgeAddlWFtivAQlJjXLULgFZNe4Y5L9z65TrnyG2ZTp
+EoHceQkGv92t54p5G7gcNiULsQsbblKiJIH32i4z0skPgp0o+X9wXvcFIGmZdsHn
+33KRiqccWQW782PR1tKBaIj2gPfum0evhIp7osYXhqH0bpW4/nnU4Ujc60Dgx2/g
+aK+/qg0eWHIDm2sklyeQFwvWBEgdjsbNuI+vbuB8mxsD0lNy1kCogpg7Lo1scPNP
+lQraMT9+z+jYWQ0LMH1V3530tBnytDWXCSA1EA6rylETAnOXIk1EgiinCu8yip6U
+4aTnqw+xOiO6KYr69kfDtel6LKmahrmqThiaMZ6qy/x09+u2dhMoW7rN+Zs9xXjk
+s1z/T89TvRQKEpiBCX9hditAEfNpgytYa4GgOT5oJBwGUf+20jGxU7MbhZF6oqKQ
+Y4lOV7eFCuqJMmy3XVNO
+=zo2f
+-END PGP SIGNATURE-

Added: 
release/kylin/apache-kylin-4.0.4/apache-kylin-4.0.4-source-release.zip.sha256
==
--- 
release/kylin/apache-kylin-4.0.4/apache-kylin-4.0.4-source-release.zip.sha256 
(added)
+++ 
release/kylin/apache-kylin-4.0.4/apache-kylin-4.0.4-source-release.zip.sha256 
Mon Jan 29 01:09:29 2024
@@ -0,0 +1 @@
+21b338aae14a71357650b35f473381cf325a9781adf1f6c9954cae9b4027cfe2
\ No newline at end of file




  1   2   3   4   5   6   7   8   9   10   >