Repository: kylin Updated Branches: refs/heads/master c8d4136b0 -> a6e3ccd7b
minor, various code review Project: http://git-wip-us.apache.org/repos/asf/kylin/repo Commit: http://git-wip-us.apache.org/repos/asf/kylin/commit/d4a18c11 Tree: http://git-wip-us.apache.org/repos/asf/kylin/tree/d4a18c11 Diff: http://git-wip-us.apache.org/repos/asf/kylin/diff/d4a18c11 Branch: refs/heads/master Commit: d4a18c113131dc316d78ad98e1eaf1fb18af95c7 Parents: c8d4136 Author: Yang Li <liy...@apache.org> Authored: Sat Nov 19 15:04:10 2016 +0800 Committer: Yang Li <liy...@apache.org> Committed: Sat Nov 19 15:04:10 2016 +0800 ---------------------------------------------------------------------- .../org/apache/kylin/cube/kv/RowKeyEncoder.java | 14 +++---- .../storage/gtrecord/CubeScanRangePlanner.java | 9 +++-- .../mr/steps/NumberDictionaryForestTest.java | 39 ++++++++++++++++++++ .../kylin/provision/BuildCubeWithEngine.java | 5 +-- 4 files changed, 52 insertions(+), 15 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/kylin/blob/d4a18c11/core-cube/src/main/java/org/apache/kylin/cube/kv/RowKeyEncoder.java ---------------------------------------------------------------------- diff --git a/core-cube/src/main/java/org/apache/kylin/cube/kv/RowKeyEncoder.java b/core-cube/src/main/java/org/apache/kylin/cube/kv/RowKeyEncoder.java index ff37752..672e1bc 100644 --- a/core-cube/src/main/java/org/apache/kylin/cube/kv/RowKeyEncoder.java +++ b/core-cube/src/main/java/org/apache/kylin/cube/kv/RowKeyEncoder.java @@ -42,8 +42,8 @@ public class RowKeyEncoder extends AbstractRowKeyEncoder { private RowKeyColumnIO colIO; protected boolean enableSharding; - private int UHCOffset = -1;//it's a offset to the beginning of body - private int UHCLength = -1; + private int uhcOffset = -1;//it's a offset to the beginning of body + private int uhcLength = -1; public RowKeyEncoder(CubeSegment cubeSeg, Cuboid cuboid) { super(cubeSeg, cuboid); @@ -55,8 +55,8 @@ public class RowKeyEncoder extends AbstractRowKeyEncoder { colIO = new RowKeyColumnIO(cubeSeg.getDimensionEncodingMap()); for (TblColRef column : cuboid.getColumns()) { if (shardByColumns.contains(column)) { - UHCOffset = bodyLength; - UHCLength = colIO.getColumnLength(column); + uhcOffset = bodyLength; + uhcLength = colIO.getColumnLength(column); } bodyLength += colIO.getColumnLength(column); } @@ -72,8 +72,8 @@ public class RowKeyEncoder extends AbstractRowKeyEncoder { protected short calculateShard(byte[] key) { if (enableSharding) { - int shardSeedOffset = UHCOffset == -1 ? 0 : UHCOffset; - int shardSeedLength = UHCLength == -1 ? bodyLength : UHCLength; + int shardSeedOffset = uhcOffset == -1 ? 0 : uhcOffset; + int shardSeedLength = uhcLength == -1 ? bodyLength : uhcLength; short cuboidShardNum = cubeSeg.getCuboidShardNum(cuboid.getId()); short shardOffset = ShardingHash.getShard(key, RowConstants.ROWKEY_SHARD_AND_CUBOID_LEN + shardSeedOffset, shardSeedLength, cuboidShardNum); return ShardingHash.normalize(cubeSeg.getCuboidBaseShard(cuboid.getId()), shardOffset, cubeSeg.getTotalShards(cuboid.getId())); @@ -102,7 +102,7 @@ public class RowKeyEncoder extends AbstractRowKeyEncoder { } //ByteArray representing dimension does not have extra header - public void encodeDims(GTRecord record, ImmutableBitSet selectedCols, ByteArray buf, byte defaultValue) { + private void encodeDims(GTRecord record, ImmutableBitSet selectedCols, ByteArray buf, byte defaultValue) { int pos = 0; for (int i = 0; i < selectedCols.trueBitCount(); i++) { int c = selectedCols.trueBitAt(i); http://git-wip-us.apache.org/repos/asf/kylin/blob/d4a18c11/core-storage/src/main/java/org/apache/kylin/storage/gtrecord/CubeScanRangePlanner.java ---------------------------------------------------------------------- diff --git a/core-storage/src/main/java/org/apache/kylin/storage/gtrecord/CubeScanRangePlanner.java b/core-storage/src/main/java/org/apache/kylin/storage/gtrecord/CubeScanRangePlanner.java index b011f40..8d5a3d4 100644 --- a/core-storage/src/main/java/org/apache/kylin/storage/gtrecord/CubeScanRangePlanner.java +++ b/core-storage/src/main/java/org/apache/kylin/storage/gtrecord/CubeScanRangePlanner.java @@ -71,7 +71,7 @@ public class CubeScanRangePlanner extends ScanRangePlannerBase { protected StorageContext context; - public CubeScanRangePlanner(CubeSegment cubeSegment, Cuboid cuboid, TupleFilter filter, Set<TblColRef> dimensions, Set<TblColRef> groupbyDims, // + public CubeScanRangePlanner(CubeSegment cubeSegment, Cuboid cuboid, TupleFilter filter, Set<TblColRef> dimensions, Set<TblColRef> groupByDims, // Collection<FunctionDesc> metrics, StorageContext context) { this.context = context; @@ -96,11 +96,12 @@ public class CubeScanRangePlanner extends ScanRangePlannerBase { //start key GTRecord compare to stop key GTRecord this.rangeStartEndComparator = RecordComparators.getRangeStartEndComparator(comp); - //replace the constant values in filter to dictionary codes - this.gtFilter = GTUtil.convertFilterColumnsAndConstants(filter, gtInfo, mapping.getCuboidDimensionsInGTOrder(), groupbyDims); + //replace the constant values in filter to dictionary codes + Set<TblColRef> groupByPushDown = Sets.newHashSet(groupByDims); + this.gtFilter = GTUtil.convertFilterColumnsAndConstants(filter, gtInfo, mapping.getCuboidDimensionsInGTOrder(), groupByPushDown); this.gtDimensions = mapping.makeGridTableColumns(dimensions); - this.gtAggrGroups = mapping.makeGridTableColumns(replaceDerivedColumns(groupbyDims, cubeSegment.getCubeDesc())); + this.gtAggrGroups = mapping.makeGridTableColumns(replaceDerivedColumns(groupByPushDown, cubeSegment.getCubeDesc())); this.gtAggrMetrics = mapping.makeGridTableColumns(metrics); this.gtAggrFuncs = mapping.makeAggrFuncs(metrics); http://git-wip-us.apache.org/repos/asf/kylin/blob/d4a18c11/engine-mr/src/test/java/org/apache/kylin/engine/mr/steps/NumberDictionaryForestTest.java ---------------------------------------------------------------------- diff --git a/engine-mr/src/test/java/org/apache/kylin/engine/mr/steps/NumberDictionaryForestTest.java b/engine-mr/src/test/java/org/apache/kylin/engine/mr/steps/NumberDictionaryForestTest.java index 33dca01..47b10e8 100644 --- a/engine-mr/src/test/java/org/apache/kylin/engine/mr/steps/NumberDictionaryForestTest.java +++ b/engine-mr/src/test/java/org/apache/kylin/engine/mr/steps/NumberDictionaryForestTest.java @@ -111,6 +111,45 @@ public class NumberDictionaryForestTest { dict2.dump(System.out); } + + @Test + public void testMerge() { + // mimic the logic as in MergeCuboidMapper + NumberDictionaryForestBuilder b1 = new NumberDictionaryForestBuilder(); + b1.addValue("0"); + b1.addValue("3"); + b1.addValue("23"); + TrieDictionaryForest<String> dict1 = b1.build(); + + NumberDictionaryForestBuilder b2 = new NumberDictionaryForestBuilder(); + b2.addValue("0"); + b2.addValue("2"); + b2.addValue("3"); + b2.addValue("15"); + b2.addValue("23"); + TrieDictionaryForest<String> dict2 = b2.build(); + + assertTrue(dict1.getSizeOfId() == dict2.getSizeOfId()); + assertTrue(dict1.getSizeOfValue() == dict2.getSizeOfValue()); + + byte[] buf = new byte[dict1.getSizeOfValue()]; + + { + int len = dict1.getValueBytesFromId(0, buf, 0); + int newId = dict2.getIdFromValueBytes(buf, 0, len); + assertTrue(newId == 0); + } + { + int len = dict1.getValueBytesFromId(1, buf, 0); + int newId = dict2.getIdFromValueBytes(buf, 0, len); + assertTrue(newId == 2); + } + { + int len = dict1.getValueBytesFromId(2, buf, 0); + int newId = dict2.getIdFromValueBytes(buf, 0, len); + assertTrue(newId == 4); + } + } private static TrieDictionaryForest<String> testSerialize(TrieDictionaryForest<String> dict) { try { http://git-wip-us.apache.org/repos/asf/kylin/blob/d4a18c11/kylin-it/src/test/java/org/apache/kylin/provision/BuildCubeWithEngine.java ---------------------------------------------------------------------- diff --git a/kylin-it/src/test/java/org/apache/kylin/provision/BuildCubeWithEngine.java b/kylin-it/src/test/java/org/apache/kylin/provision/BuildCubeWithEngine.java index c3902a2..3b88dab 100644 --- a/kylin-it/src/test/java/org/apache/kylin/provision/BuildCubeWithEngine.java +++ b/kylin-it/src/test/java/org/apache/kylin/provision/BuildCubeWithEngine.java @@ -247,10 +247,6 @@ public class BuildCubeWithEngine { } } - private void assertJobSuccess() { - - } - @SuppressWarnings("unused") // called by reflection private boolean testInnerJoinCubeWithSlr() throws Exception { @@ -433,6 +429,7 @@ public class BuildCubeWithEngine { return 0; } + @SuppressWarnings("unused") private void checkHFilesInHBase(CubeSegment segment) throws IOException { Configuration conf = HBaseConfiguration.create(HadoopUtil.getCurrentConfiguration()); String tableName = segment.getStorageLocationIdentifier();