You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@kylin.apache.org by sh...@apache.org on 2016/10/20 06:28:03 UTC

[3/4] kylin git commit: KYLIN-2112 Allow a column be a dimension as well as "group by" column in TopN measure

KYLIN-2112 Allow a column be a dimension as well as "group by" column in TopN measure	


Project: http://git-wip-us.apache.org/repos/asf/kylin/repo
Commit: http://git-wip-us.apache.org/repos/asf/kylin/commit/501c12a3
Tree: http://git-wip-us.apache.org/repos/asf/kylin/tree/501c12a3
Diff: http://git-wip-us.apache.org/repos/asf/kylin/diff/501c12a3

Branch: refs/heads/master
Commit: 501c12a3002f2d116a328fdad229f4b16e5bde75
Parents: 0deabb6
Author: shaofengshi <sh...@apache.org>
Authored: Thu Oct 20 13:31:39 2016 +0800
Committer: shaofengshi <sh...@apache.org>
Committed: Thu Oct 20 14:27:52 2016 +0800

----------------------------------------------------------------------
 .../model/validation/rule/FunctionRule.java     | 46 +++++++++-----------
 .../kylin/measure/topn/TopNMeasureType.java     |  2 -
 ...test_kylin_cube_with_slr_left_join_desc.json | 24 ++++++++++
 3 files changed, 44 insertions(+), 28 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/kylin/blob/501c12a3/core-cube/src/main/java/org/apache/kylin/cube/model/validation/rule/FunctionRule.java
----------------------------------------------------------------------
diff --git a/core-cube/src/main/java/org/apache/kylin/cube/model/validation/rule/FunctionRule.java b/core-cube/src/main/java/org/apache/kylin/cube/model/validation/rule/FunctionRule.java
index 792f18d..bcc9010 100644
--- a/core-cube/src/main/java/org/apache/kylin/cube/model/validation/rule/FunctionRule.java
+++ b/core-cube/src/main/java/org/apache/kylin/cube/model/validation/rule/FunctionRule.java
@@ -62,10 +62,10 @@ public class FunctionRule implements IValidatorRule<CubeDesc> {
     public void validate(CubeDesc cube, ValidateContext context) {
         List<MeasureDesc> measures = cube.getMeasures();
 
-        if (validateMeasureNamesDuplicated(measures, context)) {
-            return;
-        }
-
+        if (validateMeasureNamesDuplicated(measures, context)) {
+            return;
+        }
+
         List<FunctionDesc> countFuncs = new ArrayList<FunctionDesc>();
 
         Iterator<MeasureDesc> it = measures.iterator();
@@ -126,12 +126,6 @@ public class FunctionRule implements IValidatorRule<CubeDesc> {
                     groupByCol = groupByCol.getNextParameter();
                 }
 
-                if (duplicatedCol.size() > 0) {
-                    context.addResult(ResultLevel.ERROR, "Couldn't use " + duplicatedCol.toString() + " in Top-N as it is already defined as dimension.");
-                    return;
-
-                }
-
             }
         }
 
@@ -189,20 +183,20 @@ public class FunctionRule implements IValidatorRule<CubeDesc> {
         }
 
     }
-
-    /**
-     * @param measures
-     */
-    private boolean validateMeasureNamesDuplicated(List<MeasureDesc> measures, ValidateContext context) {
-        Set<String> nameSet = new HashSet<>();
-        for (MeasureDesc measure: measures){
-            if (nameSet.contains(measure.getName())){
-                context.addResult(ResultLevel.ERROR, "There is duplicated measure's name: " + measure.getName());
-                return true;
-            } else {
-                nameSet.add(measure.getName());
-            }
-        }
-        return false;
-    }
+
+    /**
+     * @param measures
+     */
+    private boolean validateMeasureNamesDuplicated(List<MeasureDesc> measures, ValidateContext context) {
+        Set<String> nameSet = new HashSet<>();
+        for (MeasureDesc measure: measures){
+            if (nameSet.contains(measure.getName())){
+                context.addResult(ResultLevel.ERROR, "There is duplicated measure's name: " + measure.getName());
+                return true;
+            } else {
+                nameSet.add(measure.getName());
+            }
+        }
+        return false;
+    }
 }

http://git-wip-us.apache.org/repos/asf/kylin/blob/501c12a3/core-metadata/src/main/java/org/apache/kylin/measure/topn/TopNMeasureType.java
----------------------------------------------------------------------
diff --git a/core-metadata/src/main/java/org/apache/kylin/measure/topn/TopNMeasureType.java b/core-metadata/src/main/java/org/apache/kylin/measure/topn/TopNMeasureType.java
index 2f93b77..3173bc1 100644
--- a/core-metadata/src/main/java/org/apache/kylin/measure/topn/TopNMeasureType.java
+++ b/core-metadata/src/main/java/org/apache/kylin/measure/topn/TopNMeasureType.java
@@ -239,8 +239,6 @@ public class TopNMeasureType extends MeasureType<TopNCounter<ByteArray>> {
             }
         }
 
-        if (unmatchedDimensions.containsAll(literalCol) == false)
-            return null;
         if (digest.groupbyColumns.containsAll(literalCol) == false)
             return null;
 

http://git-wip-us.apache.org/repos/asf/kylin/blob/501c12a3/examples/test_case_data/localmeta/cube_desc/test_kylin_cube_with_slr_left_join_desc.json
----------------------------------------------------------------------
diff --git a/examples/test_case_data/localmeta/cube_desc/test_kylin_cube_with_slr_left_join_desc.json b/examples/test_case_data/localmeta/cube_desc/test_kylin_cube_with_slr_left_join_desc.json
index 5dbee21..ff2af55 100644
--- a/examples/test_case_data/localmeta/cube_desc/test_kylin_cube_with_slr_left_join_desc.json
+++ b/examples/test_case_data/localmeta/cube_desc/test_kylin_cube_with_slr_left_join_desc.json
@@ -148,6 +148,23 @@
         "returntype": "hllc(12)"
       },
       "dependent_measure_ref": null
+    }, {
+      "name" : "TOP_SELLER",
+      "function" : {
+        "expression" : "TOP_N",
+        "parameter" : {
+          "type" : "column",
+          "value" : "PRICE",
+          "next_parameter" : {
+            "type" : "column",
+            "value" : "SELLER_ID",
+            "next_parameter" : null
+          }
+        },
+        "returntype" : "topn(100)",
+        "configuration": {"topn.encoding.SELLER_ID" : "int:4"}
+      },
+      "dependent_measure_ref" : null
     }
   ],
   "rowkey": {
@@ -221,6 +238,13 @@
             ]
           }
         ]
+      },
+      {
+        "name" : "F3",
+        "columns" : [ {
+          "qualifier" : "M",
+          "measure_refs" : [ "TOP_SELLER" ]
+        } ]
       }
     ]
   },