blob: fa2cf50afe647b8fdad03ec2c784a7c9a84e2791 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.carbondata.core.metadata.converter;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.carbondata.common.exceptions.DeprecatedFeatureException;
import org.apache.carbondata.core.constants.CarbonCommonConstants;
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.BucketingInfo;
import org.apache.carbondata.core.metadata.schema.PartitionInfo;
import org.apache.carbondata.core.metadata.schema.SchemaEvolution;
import org.apache.carbondata.core.metadata.schema.SchemaEvolutionEntry;
import org.apache.carbondata.core.metadata.schema.partition.PartitionType;
import org.apache.carbondata.core.metadata.schema.table.CarbonTable;
import org.apache.carbondata.core.metadata.schema.table.RelationIdentifier;
import org.apache.carbondata.core.metadata.schema.table.TableInfo;
import org.apache.carbondata.core.metadata.schema.table.TableSchema;
import org.apache.carbondata.core.metadata.schema.table.column.ColumnSchema;
import org.apache.carbondata.core.metadata.schema.table.column.ParentColumnTableRelation;
import org.apache.carbondata.core.util.CarbonUtil;
/**
* Thrift schema to carbon schema converter and vice versa
*/
public class ThriftWrapperSchemaConverterImpl implements SchemaConverter {
/* (non-Javadoc)
* Converts from wrapper to thrift schema evolution entry
*/
@Override
public org.apache.carbondata.format.SchemaEvolutionEntry
fromWrapperToExternalSchemaEvolutionEntry(SchemaEvolutionEntry wrapperSchemaEvolutionEntry) {
org.apache.carbondata.format.SchemaEvolutionEntry thriftSchemaEvolutionEntry =
new org.apache.carbondata.format.SchemaEvolutionEntry(
wrapperSchemaEvolutionEntry.getTimeStamp());
if (null != wrapperSchemaEvolutionEntry.getAdded()) {
List<org.apache.carbondata.format.ColumnSchema> thriftAddedColumns =
new ArrayList<org.apache.carbondata.format.ColumnSchema>();
for (ColumnSchema wrapperColumnSchema : wrapperSchemaEvolutionEntry.getAdded()) {
thriftAddedColumns.add(fromWrapperToExternalColumnSchema(wrapperColumnSchema));
}
thriftSchemaEvolutionEntry.setAdded(thriftAddedColumns);
}
if (null != wrapperSchemaEvolutionEntry.getRemoved()) {
List<org.apache.carbondata.format.ColumnSchema> thriftRemovedColumns =
new ArrayList<org.apache.carbondata.format.ColumnSchema>();
for (ColumnSchema wrapperColumnSchema : wrapperSchemaEvolutionEntry.getRemoved()) {
thriftRemovedColumns.add(fromWrapperToExternalColumnSchema(wrapperColumnSchema));
}
thriftSchemaEvolutionEntry.setRemoved(thriftRemovedColumns);
}
return thriftSchemaEvolutionEntry;
}
/* (non-Javadoc)
* converts from wrapper to thrift schema evolution
*/
@Override
public org.apache.carbondata.format.SchemaEvolution fromWrapperToExternalSchemaEvolution(
SchemaEvolution wrapperSchemaEvolution) {
List<org.apache.carbondata.format.SchemaEvolutionEntry> thriftSchemaEvolEntryList =
new ArrayList<org.apache.carbondata.format.SchemaEvolutionEntry>();
for (SchemaEvolutionEntry schemaEvolutionEntry : wrapperSchemaEvolution
.getSchemaEvolutionEntryList()) {
thriftSchemaEvolEntryList
.add(fromWrapperToExternalSchemaEvolutionEntry(schemaEvolutionEntry));
}
return new org.apache.carbondata.format.SchemaEvolution(thriftSchemaEvolEntryList);
}
/**
* converts from wrapper to external encoding
*
* @param encoder
* @return
*/
private org.apache.carbondata.format.Encoding fromWrapperToExternalEncoding(Encoding encoder) {
if (null == encoder) {
return null;
}
switch (encoder) {
case DICTIONARY:
return org.apache.carbondata.format.Encoding.DICTIONARY;
case DELTA:
return org.apache.carbondata.format.Encoding.DELTA;
case RLE:
return org.apache.carbondata.format.Encoding.RLE;
case INVERTED_INDEX:
return org.apache.carbondata.format.Encoding.INVERTED_INDEX;
case DIRECT_COMPRESS_VARCHAR:
return org.apache.carbondata.format.Encoding.DIRECT_COMPRESS_VARCHAR;
case BIT_PACKED:
return org.apache.carbondata.format.Encoding.BIT_PACKED;
case DIRECT_DICTIONARY:
return org.apache.carbondata.format.Encoding.DIRECT_DICTIONARY;
case INT_LENGTH_COMPLEX_CHILD_BYTE_ARRAY:
return org.apache.carbondata.format.Encoding.INT_LENGTH_COMPLEX_CHILD_BYTE_ARRAY;
default:
return org.apache.carbondata.format.Encoding.DICTIONARY;
}
}
/**
* convert from wrapper to external data type
*
* @param dataType
* @return
*/
private org.apache.carbondata.format.DataType fromWrapperToExternalDataType(DataType dataType) {
if (null == dataType) {
return null;
}
// data type object maybe created by GSON, use id to compare the type instead of object address
if (dataType.getId() == DataTypes.BOOLEAN.getId()) {
return org.apache.carbondata.format.DataType.BOOLEAN;
} else if (dataType.getId() == DataTypes.STRING.getId()) {
return org.apache.carbondata.format.DataType.STRING;
} else if (dataType.getId() == DataTypes.INT.getId()) {
return org.apache.carbondata.format.DataType.INT;
} else if (dataType.getId() == DataTypes.SHORT.getId()) {
return org.apache.carbondata.format.DataType.SHORT;
} else if (dataType.getId() == DataTypes.LONG.getId()) {
return org.apache.carbondata.format.DataType.LONG;
} else if (dataType.getId() == DataTypes.DOUBLE.getId()) {
return org.apache.carbondata.format.DataType.DOUBLE;
} else if (DataTypes.isDecimal(dataType)) {
return org.apache.carbondata.format.DataType.DECIMAL;
} else if (dataType.getId() == DataTypes.DATE.getId()) {
return org.apache.carbondata.format.DataType.DATE;
} else if (dataType.getId() == DataTypes.TIMESTAMP.getId()) {
return org.apache.carbondata.format.DataType.TIMESTAMP;
} else if (dataType.getId() == DataTypes.BINARY.getId()) {
return org.apache.carbondata.format.DataType.BINARY;
} else if (DataTypes.isArrayType(dataType)) {
return org.apache.carbondata.format.DataType.ARRAY;
} else if (DataTypes.isStructType(dataType)) {
return org.apache.carbondata.format.DataType.STRUCT;
} else if (DataTypes.isMapType(dataType)) {
return org.apache.carbondata.format.DataType.MAP;
} else if (dataType.getId() == DataTypes.VARCHAR.getId()) {
return org.apache.carbondata.format.DataType.VARCHAR;
} else if (dataType.getId() == DataTypes.FLOAT.getId()) {
return org.apache.carbondata.format.DataType.FLOAT;
} else if (dataType.getId() == DataTypes.BYTE.getId()) {
return org.apache.carbondata.format.DataType.BYTE;
} else {
return org.apache.carbondata.format.DataType.STRING;
}
}
/* (non-Javadoc)
* convert from wrapper to external column schema
*/
@Override
public org.apache.carbondata.format.ColumnSchema fromWrapperToExternalColumnSchema(
ColumnSchema wrapperColumnSchema) {
List<org.apache.carbondata.format.Encoding> encoders =
new ArrayList<org.apache.carbondata.format.Encoding>();
for (Encoding encoder : wrapperColumnSchema.getEncodingList()) {
encoders.add(fromWrapperToExternalEncoding(encoder));
}
org.apache.carbondata.format.ColumnSchema thriftColumnSchema =
new org.apache.carbondata.format.ColumnSchema(
fromWrapperToExternalDataType(
wrapperColumnSchema.getDataType()),
wrapperColumnSchema.getColumnName(),
wrapperColumnSchema.getColumnUniqueId(),
true,
encoders,
wrapperColumnSchema.isDimensionColumn());
thriftColumnSchema.setColumn_group_id(-1);
if (DataTypes.isDecimal(wrapperColumnSchema.getDataType())) {
thriftColumnSchema.setScale(wrapperColumnSchema.getScale());
thriftColumnSchema.setPrecision(wrapperColumnSchema.getPrecision());
} else {
thriftColumnSchema.setScale(-1);
thriftColumnSchema.setPrecision(-1);
}
thriftColumnSchema.setNum_child(wrapperColumnSchema.getNumberOfChild());
thriftColumnSchema.setDefault_value(wrapperColumnSchema.getDefaultValue());
thriftColumnSchema.setColumnProperties(wrapperColumnSchema.getColumnProperties());
thriftColumnSchema.setInvisible(wrapperColumnSchema.isInvisible());
thriftColumnSchema.setColumnReferenceId(wrapperColumnSchema.getColumnReferenceId());
thriftColumnSchema.setSchemaOrdinal(wrapperColumnSchema.getSchemaOrdinal());
thriftColumnSchema.setSpatialColumn(wrapperColumnSchema.isSpatialColumn());
if (wrapperColumnSchema.isSortColumn()) {
Map<String, String> properties = wrapperColumnSchema.getColumnProperties();
if (null == properties) {
properties = new HashMap<String, String>();
thriftColumnSchema.setColumnProperties(properties);
}
properties.put(CarbonCommonConstants.SORT_COLUMNS, "true");
}
if (null != wrapperColumnSchema.getAggFunction() && !wrapperColumnSchema.getAggFunction()
.isEmpty()) {
thriftColumnSchema.setAggregate_function(wrapperColumnSchema.getAggFunction());
} else if (null != wrapperColumnSchema.getTimeSeriesFunction() && !wrapperColumnSchema
.getTimeSeriesFunction().isEmpty()) {
thriftColumnSchema.setAggregate_function(wrapperColumnSchema.getTimeSeriesFunction());
} else {
thriftColumnSchema.setAggregate_function("");
}
List<ParentColumnTableRelation> parentColumnTableRelations =
wrapperColumnSchema.getParentColumnTableRelations();
if (null != parentColumnTableRelations) {
thriftColumnSchema.setParentColumnTableRelations(
wrapperToThriftRelationList(parentColumnTableRelations));
}
return thriftColumnSchema;
}
private org.apache.carbondata.format.PartitionType fromWrapperToExternalPartitionType(
PartitionType wrapperPartitionType) {
if (null == wrapperPartitionType) {
return null;
}
switch (wrapperPartitionType) {
case HASH:
case LIST:
case RANGE:
case RANGE_INTERVAL:
DeprecatedFeatureException.customPartitionNotSupported();
return null;
default:
return org.apache.carbondata.format.PartitionType.NATIVE_HIVE;
}
}
private org.apache.carbondata.format.PartitionInfo fromWrapperToExternalPartitionInfo(
PartitionInfo wrapperPartitionInfo) {
List<org.apache.carbondata.format.ColumnSchema> thriftColumnSchema =
new ArrayList<org.apache.carbondata.format.ColumnSchema>();
for (ColumnSchema wrapperColumnSchema : wrapperPartitionInfo.getColumnSchemaList()) {
thriftColumnSchema.add(fromWrapperToExternalColumnSchema(wrapperColumnSchema));
}
return new org.apache.carbondata.format.PartitionInfo(thriftColumnSchema,
fromWrapperToExternalPartitionType(wrapperPartitionInfo.getPartitionType()));
}
/* (non-Javadoc)
* convert from wrapper to external tableschema
*/
@Override
public org.apache.carbondata.format.TableSchema fromWrapperToExternalTableSchema(
TableSchema wrapperTableSchema) {
List<org.apache.carbondata.format.ColumnSchema> thriftColumnSchema =
new ArrayList<org.apache.carbondata.format.ColumnSchema>();
for (ColumnSchema wrapperColumnSchema : wrapperTableSchema.getListOfColumns()) {
thriftColumnSchema.add(fromWrapperToExternalColumnSchema(wrapperColumnSchema));
}
org.apache.carbondata.format.SchemaEvolution schemaEvolution =
fromWrapperToExternalSchemaEvolution(wrapperTableSchema.getSchemaEvolution());
org.apache.carbondata.format.TableSchema externalTableSchema =
new org.apache.carbondata.format.TableSchema(
wrapperTableSchema.getTableId(), thriftColumnSchema, schemaEvolution);
externalTableSchema.setTableProperties(wrapperTableSchema.getTableProperties());
if (wrapperTableSchema.getBucketingInfo() != null) {
externalTableSchema.setBucketingInfo(
fromWrapperToExternalBucketingInfo(wrapperTableSchema.getBucketingInfo()));
}
if (wrapperTableSchema.getPartitionInfo() != null) {
externalTableSchema.setPartitionInfo(
fromWrapperToExternalPartitionInfo(wrapperTableSchema.getPartitionInfo()));
}
return externalTableSchema;
}
private org.apache.carbondata.format.BucketingInfo fromWrapperToExternalBucketingInfo(
BucketingInfo bucketingInfo) {
List<org.apache.carbondata.format.ColumnSchema> thriftColumnSchema =
new ArrayList<org.apache.carbondata.format.ColumnSchema>();
for (ColumnSchema wrapperColumnSchema : bucketingInfo.getListOfColumns()) {
thriftColumnSchema.add(fromWrapperToExternalColumnSchema(wrapperColumnSchema));
}
return new org.apache.carbondata.format.BucketingInfo(thriftColumnSchema,
bucketingInfo.getNumOfRanges());
}
/* (non-Javadoc)
* convert from wrapper to external tableinfo
*/
@Override
public org.apache.carbondata.format.TableInfo fromWrapperToExternalTableInfo(
TableInfo wrapperTableInfo, String dbName, String tableName) {
org.apache.carbondata.format.TableSchema thriftFactTable =
fromWrapperToExternalTableSchema(wrapperTableInfo.getFactTable());
return new org.apache.carbondata.format.TableInfo(thriftFactTable, new ArrayList<>());
}
private List<org.apache.carbondata.format.RelationIdentifier> fromWrapperToExternalRI(
List<RelationIdentifier> relationIdentifiersList) {
List<org.apache.carbondata.format.RelationIdentifier> thriftRelationIdentifierList =
new ArrayList<>();
for (RelationIdentifier relationIdentifier : relationIdentifiersList) {
org.apache.carbondata.format.RelationIdentifier thriftRelationIdentifier =
new org.apache.carbondata.format.RelationIdentifier();
thriftRelationIdentifier.setDatabaseName(relationIdentifier.getDatabaseName());
thriftRelationIdentifier.setTableName(relationIdentifier.getTableName());
thriftRelationIdentifier.setTableId(relationIdentifier.getTableId());
thriftRelationIdentifierList.add(thriftRelationIdentifier);
}
return thriftRelationIdentifierList;
}
private List<org.apache.carbondata.format.ParentColumnTableRelation> wrapperToThriftRelationList(
List<ParentColumnTableRelation> wrapperColumnRelations) {
List<org.apache.carbondata.format.ParentColumnTableRelation> thriftColumnRelationList =
new ArrayList<>();
for (ParentColumnTableRelation wrapperColumnRelation : wrapperColumnRelations) {
org.apache.carbondata.format.ParentColumnTableRelation thriftColumnTableRelation =
new org.apache.carbondata.format.ParentColumnTableRelation();
thriftColumnTableRelation.setColumnId(wrapperColumnRelation.getColumnId());
thriftColumnTableRelation.setColumnName(wrapperColumnRelation.getColumnName());
org.apache.carbondata.format.RelationIdentifier thriftRelationIdentifier =
new org.apache.carbondata.format.RelationIdentifier();
thriftRelationIdentifier
.setDatabaseName(wrapperColumnRelation.getRelationIdentifier().getDatabaseName());
thriftRelationIdentifier
.setTableName(wrapperColumnRelation.getRelationIdentifier().getTableName());
thriftRelationIdentifier
.setTableId(wrapperColumnRelation.getRelationIdentifier().getTableId());
thriftColumnTableRelation.setRelationIdentifier(thriftRelationIdentifier);
thriftColumnRelationList.add(thriftColumnTableRelation);
}
return thriftColumnRelationList;
}
/* (non-Javadoc)
* convert from external to wrapper schema evolution entry
*/
@Override
public SchemaEvolutionEntry fromExternalToWrapperSchemaEvolutionEntry(
org.apache.carbondata.format.SchemaEvolutionEntry externalSchemaEvolutionEntry) {
SchemaEvolutionEntry wrapperSchemaEvolutionEntry = new SchemaEvolutionEntry();
wrapperSchemaEvolutionEntry.setTimeStamp(externalSchemaEvolutionEntry.getTime_stamp());
List<ColumnSchema> wrapperAddedColumns = new ArrayList<ColumnSchema>();
if (null != externalSchemaEvolutionEntry.getAdded()) {
for (org.apache.carbondata.format.ColumnSchema externalColumnSchema :
externalSchemaEvolutionEntry.getAdded()) {
wrapperAddedColumns.add(fromExternalToWrapperColumnSchema(externalColumnSchema));
}
}
List<ColumnSchema> wrapperRemovedColumns = new ArrayList<ColumnSchema>();
if (null != externalSchemaEvolutionEntry.getRemoved()) {
for (org.apache.carbondata.format.ColumnSchema externalColumnSchema :
externalSchemaEvolutionEntry.getRemoved()) {
wrapperRemovedColumns.add(fromExternalToWrapperColumnSchema(externalColumnSchema));
}
}
wrapperSchemaEvolutionEntry.setAdded(wrapperAddedColumns);
wrapperSchemaEvolutionEntry.setRemoved(wrapperRemovedColumns);
return wrapperSchemaEvolutionEntry;
}
/* (non-Javadoc)
* convert from external to wrapper schema evolution
*/
@Override
public SchemaEvolution fromExternalToWrapperSchemaEvolution(
org.apache.carbondata.format.SchemaEvolution externalSchemaEvolution) {
List<SchemaEvolutionEntry> wrapperSchemaEvolEntryList = new ArrayList<SchemaEvolutionEntry>();
for (org.apache.carbondata.format.SchemaEvolutionEntry schemaEvolutionEntry :
externalSchemaEvolution.getSchema_evolution_history()) {
wrapperSchemaEvolEntryList
.add(fromExternalToWrapperSchemaEvolutionEntry(schemaEvolutionEntry));
}
SchemaEvolution wrapperSchemaEvolution = new SchemaEvolution();
wrapperSchemaEvolution.setSchemaEvolutionEntryList(wrapperSchemaEvolEntryList);
return wrapperSchemaEvolution;
}
/**
* convert from external to wrapper encoding
*
* @param encoder
* @return
*/
private Encoding fromExternalToWrapperEncoding(org.apache.carbondata.format.Encoding encoder) {
if (null == encoder) {
return null;
}
switch (encoder) {
case DICTIONARY:
return Encoding.DICTIONARY;
case DELTA:
return Encoding.DELTA;
case RLE:
return Encoding.RLE;
case INVERTED_INDEX:
return Encoding.INVERTED_INDEX;
case DIRECT_COMPRESS_VARCHAR:
return Encoding.DIRECT_COMPRESS_VARCHAR;
case BIT_PACKED:
return Encoding.BIT_PACKED;
case INT_LENGTH_COMPLEX_CHILD_BYTE_ARRAY:
return Encoding.INT_LENGTH_COMPLEX_CHILD_BYTE_ARRAY;
case DIRECT_DICTIONARY:
return Encoding.DIRECT_DICTIONARY;
default:
return Encoding.DICTIONARY;
}
}
/**
* convert from external to wrapper data type
*
* @param dataType
* @return
*/
private DataType fromExternalToWrapperDataType(org.apache.carbondata.format.DataType dataType,
int precision, int scale) {
if (null == dataType) {
return null;
}
switch (dataType) {
case BOOLEAN:
return DataTypes.BOOLEAN;
case STRING:
return DataTypes.STRING;
case INT:
return DataTypes.INT;
case SHORT:
return DataTypes.SHORT;
case LONG:
return DataTypes.LONG;
case DOUBLE:
return DataTypes.DOUBLE;
case DECIMAL:
return DataTypes.createDecimalType(precision, scale);
case TIMESTAMP:
return DataTypes.TIMESTAMP;
case DATE:
return DataTypes.DATE;
case BINARY:
return DataTypes.BINARY;
case ARRAY:
return DataTypes.createDefaultArrayType();
case STRUCT:
return DataTypes.createDefaultStructType();
case MAP:
return DataTypes.createDefaultMapType();
case VARCHAR:
return DataTypes.VARCHAR;
case FLOAT:
return DataTypes.FLOAT;
case BYTE:
return DataTypes.BYTE;
default:
return DataTypes.STRING;
}
}
/* (non-Javadoc)
* convert from external to wrapper column schema
*/
@Override
public ColumnSchema fromExternalToWrapperColumnSchema(
org.apache.carbondata.format.ColumnSchema externalColumnSchema) {
ColumnSchema wrapperColumnSchema = new ColumnSchema();
wrapperColumnSchema.setColumnUniqueId(externalColumnSchema.getColumn_id());
wrapperColumnSchema.setColumnName(externalColumnSchema.getColumn_name());
wrapperColumnSchema.setDataType(
fromExternalToWrapperDataType(
externalColumnSchema.data_type,
externalColumnSchema.precision,
externalColumnSchema.scale));
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.setScale(externalColumnSchema.getScale());
wrapperColumnSchema.setDefaultValue(externalColumnSchema.getDefault_value());
wrapperColumnSchema.setInvisible(externalColumnSchema.isInvisible());
wrapperColumnSchema.setColumnReferenceId(externalColumnSchema.getColumnReferenceId());
wrapperColumnSchema.setSchemaOrdinal(externalColumnSchema.getSchemaOrdinal());
wrapperColumnSchema.setSpatialColumn(externalColumnSchema.isSpatialColumn());
wrapperColumnSchema.setSortColumn(false);
Map<String, String> properties = externalColumnSchema.getColumnProperties();
if (properties != null) {
String sortColumns = properties.get(CarbonCommonConstants.SORT_COLUMNS);
if (sortColumns != null) {
wrapperColumnSchema.setSortColumn(true);
}
wrapperColumnSchema.setColumnProperties(externalColumnSchema.getColumnProperties());
}
wrapperColumnSchema.setFunction(externalColumnSchema.getAggregate_function());
List<org.apache.carbondata.format.ParentColumnTableRelation> parentColumnTableRelation =
externalColumnSchema.getParentColumnTableRelations();
if (null != parentColumnTableRelation) {
wrapperColumnSchema.setParentColumnTableRelations(
fromExternalToWrapperParentTableColumnRelations(parentColumnTableRelation));
}
return wrapperColumnSchema;
}
private PartitionType fromExternalToWrapperPartitionType(
org.apache.carbondata.format.PartitionType externalPartitionType) {
if (null == externalPartitionType) {
return null;
}
switch (externalPartitionType) {
case HASH:
case LIST:
case RANGE:
case RANGE_INTERVAL:
DeprecatedFeatureException.customPartitionNotSupported();
return null;
default:
return PartitionType.NATIVE_HIVE;
}
}
private PartitionInfo fromExternalToWrapperPartitionInfo(
org.apache.carbondata.format.PartitionInfo externalPartitionInfo) {
List<ColumnSchema> wrapperColumnSchema = new ArrayList<ColumnSchema>();
for (org.apache.carbondata.format.ColumnSchema columnSchema :
externalPartitionInfo.getPartition_columns()) {
wrapperColumnSchema.add(fromExternalToWrapperColumnSchema(columnSchema));
}
return new PartitionInfo(wrapperColumnSchema,
fromExternalToWrapperPartitionType(externalPartitionInfo.getPartition_type()));
}
/* (non-Javadoc)
* convert from external to wrapper table schema
*/
@Override
public TableSchema fromExternalToWrapperTableSchema(
org.apache.carbondata.format.TableSchema externalTableSchema, String tableName) {
TableSchema wrapperTableSchema = new TableSchema();
wrapperTableSchema.setTableId(externalTableSchema.getTable_id());
wrapperTableSchema.setTableName(tableName);
wrapperTableSchema.setTableProperties(externalTableSchema.getTableProperties());
List<ColumnSchema> listOfColumns = new ArrayList<ColumnSchema>();
for (org.apache.carbondata.format.ColumnSchema externalColumnSchema : externalTableSchema
.getTable_columns()) {
listOfColumns.add(fromExternalToWrapperColumnSchema(externalColumnSchema));
}
if (null != externalTableSchema.tableProperties) {
CarbonUtil
.setLocalDictColumnsToWrapperSchema(listOfColumns, externalTableSchema.tableProperties,
externalTableSchema.tableProperties
.get(CarbonCommonConstants.LOCAL_DICTIONARY_ENABLE));
}
wrapperTableSchema.setListOfColumns(listOfColumns);
wrapperTableSchema.setSchemaEvolution(
fromExternalToWrapperSchemaEvolution(externalTableSchema.getSchema_evolution()));
if (externalTableSchema.isSetBucketingInfo()) {
wrapperTableSchema.setBucketingInfo(
fromExternalToWrapperBucketingInfo(externalTableSchema.bucketingInfo));
}
if (externalTableSchema.getPartitionInfo() != null) {
wrapperTableSchema.setPartitionInfo(
fromExternalToWrapperPartitionInfo(externalTableSchema.getPartitionInfo()));
}
return wrapperTableSchema;
}
private BucketingInfo fromExternalToWrapperBucketingInfo(
org.apache.carbondata.format.BucketingInfo externalBucketInfo) {
List<ColumnSchema> listOfColumns = new ArrayList<ColumnSchema>();
for (org.apache.carbondata.format.ColumnSchema externalColumnSchema :
externalBucketInfo.table_columns) {
listOfColumns.add(fromExternalToWrapperColumnSchema(externalColumnSchema));
}
return new BucketingInfo(listOfColumns, externalBucketInfo.number_of_buckets);
}
/* (non-Javadoc)
* convert from external to wrapper table info
*/
@Override
public TableInfo fromExternalToWrapperTableInfo(
org.apache.carbondata.format.TableInfo externalTableInfo,
String dbName,
String tableName,
String tablePath) {
TableInfo wrapperTableInfo = new TableInfo();
List<org.apache.carbondata.format.SchemaEvolutionEntry> schemaEvolutionList =
externalTableInfo.getFact_table().getSchema_evolution().getSchema_evolution_history();
wrapperTableInfo.setLastUpdatedTime(
schemaEvolutionList.get(schemaEvolutionList.size() - 1).getTime_stamp());
wrapperTableInfo.setDatabaseName(dbName);
wrapperTableInfo.setTableUniqueName(CarbonTable.buildUniqueName(dbName, tableName));
wrapperTableInfo.setFactTable(
fromExternalToWrapperTableSchema(externalTableInfo.getFact_table(), tableName));
wrapperTableInfo.setTablePath(tablePath);
return wrapperTableInfo;
}
private List<ParentColumnTableRelation> fromExternalToWrapperParentTableColumnRelations(
List<org.apache.carbondata.format.ParentColumnTableRelation> thriftParentColumnRelation) {
List<ParentColumnTableRelation> parentColumnTableRelationList = new ArrayList<>();
for (org.apache.carbondata.format.ParentColumnTableRelation carbonTableRelation :
thriftParentColumnRelation) {
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;
}
}