You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@kylin.apache.org by li...@apache.org on 2016/12/16 10:17:02 UTC

[2/2] kylin git commit: pending PK/FK

pending PK/FK


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

Branch: refs/heads/KYLIN-2283
Commit: 5a27f0331f3cadf772926ce45a13731b7a7b6bdd
Parents: 32b00d1
Author: Li Yang <li...@apache.org>
Authored: Fri Dec 16 18:16:56 2016 +0800
Committer: Li Yang <li...@apache.org>
Committed: Fri Dec 16 18:16:56 2016 +0800

----------------------------------------------------------------------
 .../kylin/source/datagen/ColumnGenConfig.java   |  3 +-
 .../kylin/source/datagen/ColumnGenerator.java   | 35 +++++++++++++++-----
 2 files changed, 29 insertions(+), 9 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/kylin/blob/5a27f033/core-metadata/src/main/java/org/apache/kylin/source/datagen/ColumnGenConfig.java
----------------------------------------------------------------------
diff --git a/core-metadata/src/main/java/org/apache/kylin/source/datagen/ColumnGenConfig.java b/core-metadata/src/main/java/org/apache/kylin/source/datagen/ColumnGenConfig.java
index f174eef..1aac954 100644
--- a/core-metadata/src/main/java/org/apache/kylin/source/datagen/ColumnGenConfig.java
+++ b/core-metadata/src/main/java/org/apache/kylin/source/datagen/ColumnGenConfig.java
@@ -23,6 +23,7 @@ import java.util.List;
 import java.util.Map;
 
 import org.apache.kylin.metadata.model.ColumnDesc;
+import org.apache.kylin.metadata.model.DataModelDesc;
 
 public class ColumnGenConfig {
 
@@ -48,7 +49,7 @@ public class ColumnGenConfig {
     double genNullPct;
     boolean order;
     
-    public ColumnGenConfig(ColumnDesc col) {
+    public ColumnGenConfig(ColumnDesc col, DataModelDesc model) {
         init(col.getName(), col.getDataGen());
     }
 

http://git-wip-us.apache.org/repos/asf/kylin/blob/5a27f033/core-metadata/src/main/java/org/apache/kylin/source/datagen/ColumnGenerator.java
----------------------------------------------------------------------
diff --git a/core-metadata/src/main/java/org/apache/kylin/source/datagen/ColumnGenerator.java b/core-metadata/src/main/java/org/apache/kylin/source/datagen/ColumnGenerator.java
index 9ffc9f6..55cbcf9 100644
--- a/core-metadata/src/main/java/org/apache/kylin/source/datagen/ColumnGenerator.java
+++ b/core-metadata/src/main/java/org/apache/kylin/source/datagen/ColumnGenerator.java
@@ -20,7 +20,6 @@ package org.apache.kylin.source.datagen;
 
 import java.util.ArrayList;
 import java.util.Collections;
-import java.util.HashSet;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Random;
@@ -38,13 +37,11 @@ public class ColumnGenerator {
     final private ColumnGenConfig conf;
     final private ColumnDesc targetCol;
     final private int targetRows;
-    final private ModelDataGenerator modelGen;
 
     public ColumnGenerator(ColumnDesc col, int nRows, ModelDataGenerator modelGen) {
-        this.conf = new ColumnGenConfig(col);
+        this.conf = new ColumnGenConfig(col, modelGen.getModle());
         this.targetCol = col;
         this.targetRows = nRows;
-        this.modelGen = modelGen;
     }
     
     public Iterator<String> generate() {
@@ -52,7 +49,7 @@ public class ColumnGenerator {
         if (conf.isID) {
             result = new IDIter(conf.idStart);
         } else if (conf.isRandom) {
-            result = new RandomIter(targetCol.getType(), conf.randFormat, conf.randStart, conf.randEnd, conf.cardinality));
+            result = new RandomIter(targetCol.getType(), conf.randFormat, conf.randStart, conf.randEnd, conf.cardinality);
         } else {
             result = new DiscreteIter(conf.values);
         }
@@ -78,12 +75,13 @@ public class ColumnGenerator {
         private String format;
         private int randStart;
         private int randEnd;
+        private Random rand = new Random();
 
         public RandomIter(DataType type, String format, int randStart, int randEnd, int cardinality) {
             if (type.isStringFamily()) {
                 // string
                 Preconditions.checkArgument(format.contains(ColumnGenConfig.$RANDOM));
-                initStartEndRange(randStart, randEnd, cardinality);
+                initNumberRange(randStart, randEnd, cardinality);
             } else if (type.isTimeFamily()) {
                 // time
                 format = StringUtil.noBlank(format, DateFormat.DEFAULT_DATETIME_PATTERN_WITHOUT_MILLISECONDS);
@@ -94,9 +92,10 @@ public class ColumnGenerator {
                 initDateTimeRange(randStart, randEnd, cardinality);
             } else if (type.isIntegerFamily()) {
                 // integer
-                initStartEndRange(randStart, randEnd, cardinality);
+                initNumberRange(randStart, randEnd, cardinality);
             } else if (type.isNumberFamily()) {
                 // double
+                initNumberRange(randStart, randEnd, 0);
             } else {
                 throw new IllegalArgumentException();
             }
@@ -119,7 +118,7 @@ public class ColumnGenerator {
             this.randEnd = randEnd;
         }
 
-        private void initStartEndRange(int randStart, int randEnd, int cardinality) {
+        private void initNumberRange(int randStart, int randEnd, int cardinality) {
             if (randStart == 0 && randEnd == 0) {
                 randStart = 10000;
                 randEnd = 100000;
@@ -142,19 +141,39 @@ public class ColumnGenerator {
         public String next() {
             if (type.isStringFamily()) {
                 // string
+                return format.replace(ColumnGenConfig.$RANDOM, "" + randomInt());
             } else if (type.isTimeFamily()) {
                 // time
+                return DateFormat.formatToTimeStr(randomMillis(), format);
             } else if (type.isDateTimeFamily()) {
                 // date
+                return DateFormat.formatToDateStr(randomMillis(), format);
             } else if (type.isIntegerFamily()) {
                 // integer
+                return "" + randomInt();
             } else if (type.isNumberFamily()) {
                 // double
+                return "" + randomDouble();
             } else {
                 throw new IllegalStateException();
             }
         }
 
+        private int randomInt() {
+            return randStart + rand.nextInt(randEnd - randStart);
+        }
+        
+        private double randomDouble() {
+            return randStart + (double) rand.nextInt(100 * (randEnd - randStart)) / 100D;
+        }
+        
+        private long randomMillis() {
+            int secondsInYear = 3600 * 24 * 365;
+            long year = randStart + rand.nextInt(randEnd - randStart) - 1970;
+            long second = year * secondsInYear + rand.nextInt(secondsInYear);
+            return second * 1000;
+        }
+
         @Override
         public void remove() {
             throw new UnsupportedOperationException();