Repository: carbondata Updated Branches: refs/heads/master 6d40d3a98 -> a37a2ff7f
[CARBONDATA-2753] Fix Compatibility issues Dictionary path is set to the AbsolteTableIdentifier. So that the child tables/dependent tables can use the dictionary path of parent/own This closes #2530 Project: http://git-wip-us.apache.org/repos/asf/carbondata/repo Commit: http://git-wip-us.apache.org/repos/asf/carbondata/commit/a37a2ff7 Tree: http://git-wip-us.apache.org/repos/asf/carbondata/tree/a37a2ff7 Diff: http://git-wip-us.apache.org/repos/asf/carbondata/diff/a37a2ff7 Branch: refs/heads/master Commit: a37a2ff7f450a297590d4e97ec81ec5c56a9cc4a Parents: 6d40d3a Author: dhatchayani <dhatcha.offic...@gmail.com> Authored: Thu Jul 19 19:13:24 2018 +0530 Committer: manishgupta88 <tomanishgupt...@gmail.com> Committed: Wed Jul 25 13:52:33 2018 +0530 ---------------------------------------------------------------------- .../core/metadata/AbsoluteTableIdentifier.java | 12 ++++++++ .../core/metadata/schema/table/CarbonTable.java | 6 +++- .../carbondata/core/scan/filter/FilterUtil.java | 29 ++++++++------------ .../TestBlockletDataMapFactory.java | 6 ++++ 4 files changed, 34 insertions(+), 19 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/carbondata/blob/a37a2ff7/core/src/main/java/org/apache/carbondata/core/metadata/AbsoluteTableIdentifier.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/org/apache/carbondata/core/metadata/AbsoluteTableIdentifier.java b/core/src/main/java/org/apache/carbondata/core/metadata/AbsoluteTableIdentifier.java index 3ea1f60..4cd33f6 100644 --- a/core/src/main/java/org/apache/carbondata/core/metadata/AbsoluteTableIdentifier.java +++ b/core/src/main/java/org/apache/carbondata/core/metadata/AbsoluteTableIdentifier.java @@ -36,6 +36,11 @@ public class AbsoluteTableIdentifier implements Serializable { */ private String tablePath; + /** + * dictionary path of the table + */ + private String dictionaryPath; + /** * carbon table identifier which will have table name and table database @@ -146,4 +151,11 @@ public class AbsoluteTableIdentifier implements Serializable { return carbonTableIdentifier.toString(); } + public String getDictionaryPath() { + return dictionaryPath; + } + + public void setDictionaryPath(String dictionaryPath) { + this.dictionaryPath = dictionaryPath; + } } http://git-wip-us.apache.org/repos/asf/carbondata/blob/a37a2ff7/core/src/main/java/org/apache/carbondata/core/metadata/schema/table/CarbonTable.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/org/apache/carbondata/core/metadata/schema/table/CarbonTable.java b/core/src/main/java/org/apache/carbondata/core/metadata/schema/table/CarbonTable.java index 995f943..850a791 100644 --- a/core/src/main/java/org/apache/carbondata/core/metadata/schema/table/CarbonTable.java +++ b/core/src/main/java/org/apache/carbondata/core/metadata/schema/table/CarbonTable.java @@ -805,7 +805,11 @@ public class CarbonTable implements Serializable { * @return absolute table identifier */ public AbsoluteTableIdentifier getAbsoluteTableIdentifier() { - return tableInfo.getOrCreateAbsoluteTableIdentifier(); + AbsoluteTableIdentifier absoluteTableIdentifier = + tableInfo.getOrCreateAbsoluteTableIdentifier(); + absoluteTableIdentifier.setDictionaryPath( + tableInfo.getFactTable().getTableProperties().get(CarbonCommonConstants.DICTIONARY_PATH)); + return absoluteTableIdentifier; } /** http://git-wip-us.apache.org/repos/asf/carbondata/blob/a37a2ff7/core/src/main/java/org/apache/carbondata/core/scan/filter/FilterUtil.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/org/apache/carbondata/core/scan/filter/FilterUtil.java b/core/src/main/java/org/apache/carbondata/core/scan/filter/FilterUtil.java index 0587b33..bae608f 100644 --- a/core/src/main/java/org/apache/carbondata/core/scan/filter/FilterUtil.java +++ b/core/src/main/java/org/apache/carbondata/core/scan/filter/FilterUtil.java @@ -56,12 +56,10 @@ import org.apache.carbondata.core.keygenerator.KeyGenerator; import org.apache.carbondata.core.keygenerator.factory.KeyGeneratorFactory; import org.apache.carbondata.core.keygenerator.mdkey.MultiDimKeyVarLengthGenerator; import org.apache.carbondata.core.metadata.AbsoluteTableIdentifier; -import org.apache.carbondata.core.metadata.CarbonMetadata; import org.apache.carbondata.core.metadata.ColumnIdentifier; import org.apache.carbondata.core.metadata.datatype.DataType; import org.apache.carbondata.core.metadata.datatype.DataTypes; import org.apache.carbondata.core.metadata.encoder.Encoding; -import org.apache.carbondata.core.metadata.schema.table.CarbonTable; import org.apache.carbondata.core.metadata.schema.table.column.CarbonColumn; import org.apache.carbondata.core.metadata.schema.table.column.CarbonDimension; import org.apache.carbondata.core.metadata.schema.table.column.CarbonMeasure; @@ -1386,22 +1384,17 @@ public final class FilterUtil { CarbonDimension carbonDimension) throws IOException { String dictionaryPath = null; ColumnIdentifier columnIdentifier = carbonDimension.getColumnIdentifier(); - CarbonTable carbonTable = CarbonMetadata.getInstance() - .getCarbonTable(dictionarySourceAbsoluteTableIdentifier.getDatabaseName(), - dictionarySourceAbsoluteTableIdentifier.getTableName()); - if (null != carbonTable) { - dictionaryPath = carbonTable.getTableInfo().getFactTable().getTableProperties() - .get(CarbonCommonConstants.DICTIONARY_PATH); - if (null != carbonDimension.getColumnSchema().getParentColumnTableRelations() - && carbonDimension.getColumnSchema().getParentColumnTableRelations().size() == 1) { - dictionarySourceAbsoluteTableIdentifier = QueryUtil - .getTableIdentifierForColumn(carbonDimension); - columnIdentifier = new ColumnIdentifier( - carbonDimension.getColumnSchema().getParentColumnTableRelations().get(0).getColumnId(), - carbonDimension.getColumnProperties(), carbonDimension.getDataType()); - } else { - dictionarySourceAbsoluteTableIdentifier = carbonTable.getAbsoluteTableIdentifier(); - } + String dicPath = dictionarySourceAbsoluteTableIdentifier.getDictionaryPath(); + if (null != dicPath && !dicPath.trim().isEmpty()) { + dictionaryPath = dicPath; + } + if (null != carbonDimension.getColumnSchema().getParentColumnTableRelations() + && carbonDimension.getColumnSchema().getParentColumnTableRelations().size() == 1) { + dictionarySourceAbsoluteTableIdentifier = + QueryUtil.getTableIdentifierForColumn(carbonDimension); + columnIdentifier = new ColumnIdentifier( + carbonDimension.getColumnSchema().getParentColumnTableRelations().get(0).getColumnId(), + carbonDimension.getColumnProperties(), carbonDimension.getDataType()); } DictionaryColumnUniqueIdentifier dictionaryColumnUniqueIdentifier = new DictionaryColumnUniqueIdentifier(dictionarySourceAbsoluteTableIdentifier, http://git-wip-us.apache.org/repos/asf/carbondata/blob/a37a2ff7/core/src/test/java/org/apache/carbondata/core/indexstore/blockletindex/TestBlockletDataMapFactory.java ---------------------------------------------------------------------- diff --git a/core/src/test/java/org/apache/carbondata/core/indexstore/blockletindex/TestBlockletDataMapFactory.java b/core/src/test/java/org/apache/carbondata/core/indexstore/blockletindex/TestBlockletDataMapFactory.java index 8c234b5..d2a6f18 100644 --- a/core/src/test/java/org/apache/carbondata/core/indexstore/blockletindex/TestBlockletDataMapFactory.java +++ b/core/src/test/java/org/apache/carbondata/core/indexstore/blockletindex/TestBlockletDataMapFactory.java @@ -77,6 +77,12 @@ public class TestBlockletDataMapFactory { UUID.randomUUID().toString()); Deencapsulation.setField(tableInfo, "identifier", absoluteTableIdentifier); Deencapsulation.setField(carbonTable, "tableInfo", tableInfo); + new MockUp<CarbonTable>() { + @Mock + public AbsoluteTableIdentifier getAbsoluteTableIdentifier(){ + return absoluteTableIdentifier; + } + }; blockletDataMapFactory = new BlockletDataMapFactory(carbonTable, new DataMapSchema()); Deencapsulation.setField(blockletDataMapFactory, "cache", CacheProvider.getInstance().createCache(CacheType.DRIVER_BLOCKLET_DATAMAP));