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 <liy...@apache.org> Authored: Fri Dec 16 18:16:56 2016 +0800 Committer: Li Yang <liy...@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();