Github user jackylk commented on a diff in the pull request: https://github.com/apache/carbondata/pull/2055#discussion_r174694130 --- Diff: core/src/main/java/org/apache/carbondata/core/util/CarbonUtil.java --- @@ -2068,6 +2079,202 @@ private static void updateDecimalType(TableInfo tableInfo) { return tableInfo; } + public static ColumnSchema thriftColumnSchmeaToWrapperColumnSchema( + org.apache.carbondata.format.ColumnSchema externalColumnSchema) { + ColumnSchema wrapperColumnSchema = new ColumnSchema(); + wrapperColumnSchema.setColumnUniqueId(externalColumnSchema.getColumn_id()); + wrapperColumnSchema.setColumnName(externalColumnSchema.getColumn_name()); + wrapperColumnSchema.setColumnar(externalColumnSchema.isColumnar()); + DataType dataType = thriftDataTyopeToWrapperDataType(externalColumnSchema.data_type); + if (DataTypes.isDecimal(dataType)) { + DecimalType decimalType = (DecimalType) dataType; + decimalType.setPrecision(externalColumnSchema.getPrecision()); + decimalType.setScale(externalColumnSchema.getScale()); + } + wrapperColumnSchema.setDataType(dataType); + wrapperColumnSchema.setDimensionColumn(externalColumnSchema.isDimension()); + List<Encoding> encoders = new ArrayList<Encoding>(); + for (org.apache.carbondata.format.Encoding encoder : externalColumnSchema.getEncoders()) { + encoders.add(fromExternalToWrapperEncoding(encoder)); + } + wrapperColumnSchema.setEncodingList(encoders); + wrapperColumnSchema.setNumberOfChild(externalColumnSchema.getNum_child()); + wrapperColumnSchema.setPrecision(externalColumnSchema.getPrecision()); + wrapperColumnSchema.setColumnGroup(externalColumnSchema.getColumn_group_id()); + wrapperColumnSchema.setScale(externalColumnSchema.getScale()); + wrapperColumnSchema.setDefaultValue(externalColumnSchema.getDefault_value()); + wrapperColumnSchema.setSchemaOrdinal(externalColumnSchema.getSchemaOrdinal()); + Map<String, String> properties = externalColumnSchema.getColumnProperties(); + if (properties != null) { + if (properties.get(CarbonCommonConstants.SORT_COLUMNS) != null) { + wrapperColumnSchema.setSortColumn(true); + } + } + wrapperColumnSchema.setFunction(externalColumnSchema.getAggregate_function()); + List<org.apache.carbondata.format.ParentColumnTableRelation> parentColumnTableRelation = + externalColumnSchema.getParentColumnTableRelations(); + if (null != parentColumnTableRelation) { + wrapperColumnSchema.setParentColumnTableRelations( + fromThriftToWrapperParentTableColumnRelations(parentColumnTableRelation)); + } + return wrapperColumnSchema; + } + + static List<ParentColumnTableRelation> fromThriftToWrapperParentTableColumnRelations( + List<org.apache.carbondata.format.ParentColumnTableRelation> thirftParentColumnRelation) { + List<ParentColumnTableRelation> parentColumnTableRelationList = new ArrayList<>(); + for (org.apache.carbondata.format.ParentColumnTableRelation carbonTableRelation : + thirftParentColumnRelation) { + RelationIdentifier relationIdentifier = + new RelationIdentifier(carbonTableRelation.getRelationIdentifier().getDatabaseName(), + carbonTableRelation.getRelationIdentifier().getTableName(), + carbonTableRelation.getRelationIdentifier().getTableId()); + ParentColumnTableRelation parentColumnTableRelation = + new ParentColumnTableRelation(relationIdentifier, carbonTableRelation.getColumnId(), + carbonTableRelation.getColumnName()); + parentColumnTableRelationList.add(parentColumnTableRelation); + } + return parentColumnTableRelationList; + } + + static Encoding fromExternalToWrapperEncoding( + org.apache.carbondata.format.Encoding encoderThrift) { + switch (encoderThrift) { + case DICTIONARY: + return Encoding.DICTIONARY; + case DELTA: + return Encoding.DELTA; + case RLE: + return Encoding.RLE; + case INVERTED_INDEX: + return Encoding.INVERTED_INDEX; + case BIT_PACKED: + return Encoding.BIT_PACKED; + case DIRECT_DICTIONARY: + return Encoding.DIRECT_DICTIONARY; + default: + throw new IllegalArgumentException(encoderThrift.toString() + " is not supported"); + } + } + + static DataType thriftDataTyopeToWrapperDataType( + org.apache.carbondata.format.DataType dataTypeThrift) { + switch (dataTypeThrift) { + case BOOLEAN: + return DataTypes.BOOLEAN; + case STRING: + return DataTypes.STRING; + case SHORT: + return DataTypes.SHORT; + case INT: + return DataTypes.INT; + case LONG: + return DataTypes.LONG; + case DOUBLE: + return DataTypes.DOUBLE; + case DECIMAL: + return DataTypes.createDefaultDecimalType(); + case DATE: + return DataTypes.DATE; + case TIMESTAMP: + return DataTypes.TIMESTAMP; + case ARRAY: + return DataTypes.createDefaultArrayType(); + case STRUCT: + return DataTypes.createDefaultStructType(); + default: + return DataTypes.STRING; + } + } + + public static List<String> getFilePathExternalFilePath(String path) { + + // return the list of carbondata files in the given path. + CarbonFile segment = FileFactory.getCarbonFile(path, FileFactory.getFileType(path)); + CarbonFile[] dataFiles = segment.listFiles(new CarbonFileFilter() { + @Override public boolean accept(CarbonFile file) { + + if (file.getName().endsWith(CarbonCommonConstants.FACT_FILE_EXT)) { + return true; + } + return false; + } + }); + List<String> filePaths = new ArrayList<>(dataFiles.length); + for (CarbonFile dfiles : dataFiles) { + filePaths.add(dfiles.getAbsolutePath()); + } + return filePaths; + } + + /** + * This method will read the schema file from a given path + * + * @param schemaFilePath + * @return + */ + public static org.apache.carbondata.format.TableInfo inferSchemaFileExternalTable( --- End diff -- rename to `inferSchema`
---