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/30 08:56:57 UTC
[08/50] [abbrv] kylin git commit: KYLIN-2322 make
TrieDictionaryForest configurable, off by default
KYLIN-2322 make TrieDictionaryForest configurable, off by default
Project: http://git-wip-us.apache.org/repos/asf/kylin/repo
Commit: http://git-wip-us.apache.org/repos/asf/kylin/commit/a78b6509
Tree: http://git-wip-us.apache.org/repos/asf/kylin/tree/a78b6509
Diff: http://git-wip-us.apache.org/repos/asf/kylin/diff/a78b6509
Branch: refs/heads/master-cdh5.7
Commit: a78b6509f8727a53e26c57b2e5a14adc0ff88b73
Parents: 4f466a0
Author: Yang Li <li...@apache.org>
Authored: Mon Dec 26 21:12:20 2016 +0800
Committer: Yang Li <li...@apache.org>
Committed: Mon Dec 26 21:14:01 2016 +0800
----------------------------------------------------------------------
.../apache/kylin/common/KylinConfigBase.java | 4 ++
.../apache/kylin/dict/DictionaryGenerator.java | 64 ++++++++++++++++++--
2 files changed, 63 insertions(+), 5 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/kylin/blob/a78b6509/core-common/src/main/java/org/apache/kylin/common/KylinConfigBase.java
----------------------------------------------------------------------
diff --git a/core-common/src/main/java/org/apache/kylin/common/KylinConfigBase.java b/core-common/src/main/java/org/apache/kylin/common/KylinConfigBase.java
index da93388..8080577 100644
--- a/core-common/src/main/java/org/apache/kylin/common/KylinConfigBase.java
+++ b/core-common/src/main/java/org/apache/kylin/common/KylinConfigBase.java
@@ -216,6 +216,10 @@ abstract public class KylinConfigBase implements Serializable {
// DICTIONARY & SNAPSHOT
// ============================================================================
+ public boolean isUseForestTrieDictionary() {
+ return Boolean.parseBoolean(getOptional("kylin.dictionary.use-forest-trie", "false"));
+ }
+
public int getTrieDictionaryForestMaxTrieSizeMB() {
return Integer.parseInt(getOptional("kylin.dictionary.forest-trie-max-mb", "500"));
}
http://git-wip-us.apache.org/repos/asf/kylin/blob/a78b6509/core-dictionary/src/main/java/org/apache/kylin/dict/DictionaryGenerator.java
----------------------------------------------------------------------
diff --git a/core-dictionary/src/main/java/org/apache/kylin/dict/DictionaryGenerator.java b/core-dictionary/src/main/java/org/apache/kylin/dict/DictionaryGenerator.java
index cd13d59..6f4f2c4 100644
--- a/core-dictionary/src/main/java/org/apache/kylin/dict/DictionaryGenerator.java
+++ b/core-dictionary/src/main/java/org/apache/kylin/dict/DictionaryGenerator.java
@@ -23,6 +23,7 @@ import java.util.ArrayList;
import java.util.List;
import org.apache.commons.lang.StringUtils;
+import org.apache.kylin.common.KylinConfig;
import org.apache.kylin.common.util.DateFormat;
import org.apache.kylin.common.util.Dictionary;
import org.apache.kylin.metadata.datatype.DataType;
@@ -49,10 +50,12 @@ public class DictionaryGenerator {
builder = new DateDictBuilder();
else
builder = new TimeDictBuilder();
- } else if (dataType.isNumberFamily()) {
- builder = new NumberDictBuilder();
} else {
- builder = new StringDictBuilder();
+ boolean useForest = KylinConfig.getInstanceFromEnv().isUseForestTrieDictionary();
+ if (dataType.isNumberFamily())
+ builder = useForest ? new NumberTrieDictForestBuilder() : new NumberTrieDictBuilder();
+ else
+ builder = useForest ? new StringTrieDictForestBuilder() : new StringTrieDictBuilder();
}
return builder;
}
@@ -168,7 +171,32 @@ public class DictionaryGenerator {
}
}
- private static class StringDictBuilder implements IDictionaryBuilder {
+ private static class StringTrieDictBuilder implements IDictionaryBuilder {
+ int baseId;
+ TrieDictionaryBuilder builder;
+
+ @Override
+ public void init(DictionaryInfo info, int baseId) throws IOException {
+ this.baseId = baseId;
+ this.builder = new TrieDictionaryBuilder(new StringBytesConverter());
+ }
+
+ @Override
+ public boolean addValue(String value) {
+ if (value == null)
+ return false;
+
+ builder.addValue(value);
+ return true;
+ }
+
+ @Override
+ public Dictionary<String> build() throws IOException {
+ return builder.build(baseId);
+ }
+ }
+
+ private static class StringTrieDictForestBuilder implements IDictionaryBuilder {
TrieDictionaryForestBuilder builder;
@Override
@@ -191,7 +219,33 @@ public class DictionaryGenerator {
}
}
- private static class NumberDictBuilder implements IDictionaryBuilder {
+ @SuppressWarnings("deprecation")
+ private static class NumberTrieDictBuilder implements IDictionaryBuilder {
+ int baseId;
+ NumberDictionaryBuilder builder;
+
+ @Override
+ public void init(DictionaryInfo info, int baseId) throws IOException {
+ this.baseId = baseId;
+ this.builder = new NumberDictionaryBuilder(new StringBytesConverter());
+ }
+
+ @Override
+ public boolean addValue(String value) {
+ if (StringUtils.isBlank(value)) // empty string is treated as null
+ return false;
+
+ builder.addValue(value);
+ return true;
+ }
+
+ @Override
+ public Dictionary<String> build() throws IOException {
+ return builder.build(baseId);
+ }
+ }
+
+ private static class NumberTrieDictForestBuilder implements IDictionaryBuilder {
NumberDictionaryForestBuilder builder;
@Override