/** * @return number of children for complex type */ public int getNumberOfChild() { return columnSchema.getNumberOfChild(); }
/** * traverse through the columns of complex column specified in local dictionary exclude * @param allColumns * @param dimensionOrdinal * @param childColumnCount * @return */ private static int unsetLocalDictForComplexColumns(List<ColumnSchema> allColumns, int dimensionOrdinal, int childColumnCount) { for (int i = 0; i < childColumnCount; i++) { ColumnSchema column = allColumns.get(dimensionOrdinal); if (column.getNumberOfChild() > 0) { dimensionOrdinal++; // Dimension ordinal will take value from recursive functions so as to skip the // child columns of the complex column. dimensionOrdinal = unsetLocalDictForComplexColumns(allColumns, dimensionOrdinal, column.getNumberOfChild()); } else { dimensionOrdinal++; } } return dimensionOrdinal; }
ColumnSchema columnSchema = listOfColumns.get(dimensionOrdinal); if (columnSchema.isDimensionColumn()) { if (columnSchema.getNumberOfChild() > 0) { CarbonDimension complexDimension = new CarbonDimension(columnSchema, dimensionOrdinal++, -1, complexDimensionOrdinal++); complexDimension.initializeChildDimensionsList(columnSchema.getNumberOfChild()); parentDimension.getListOfChildDimensions().add(complexDimension); dimensionOrdinal = readAllComplexTypeChildren(dimensionOrdinal, columnSchema.getNumberOfChild(), listOfColumns, complexDimension, complexDimensionOrdinal); } else {
ColumnSchema columnSchema = listOfColumns.get(dimensionOrdinal); if (columnSchema.isDimensionColumn()) { if (columnSchema.getNumberOfChild() > 0) { CarbonDimension complexDimension = new CarbonDimension(columnSchema, dimensionOrdinal++, columnSchema.getSchemaOrdinal(), -1, -1); complexDimension.initializeChildDimensionsList(columnSchema.getNumberOfChild()); parentDimension.getListOfChildDimensions().add(complexDimension); dimensionOrdinal = readAllComplexTypeChildrens(dimensionOrdinal, columnSchema.getNumberOfChild(), listOfColumns, complexDimension, primitiveDimensions); } else {
&& !isComplexDimensionStarted && columnSchema.getNumberOfChild() == 0) { cardinalityIndexForNormalDimensionColumn.add(tableOrdinal); if (columnSchema.isSortColumn()) { carbonDimension = new CarbonDimension(columnSchema, dimensonOrdinal++, -1, ++complexTypeOrdinal); carbonDimension.initializeChildDimensionsList(columnSchema.getNumberOfChild()); complexDimensions.add(carbonDimension); isComplexDimensionStarted = true; int previouseOrdinal = dimensonOrdinal; dimensonOrdinal = readAllComplexTypeChildren(dimensonOrdinal, columnSchema.getNumberOfChild(), columnsInTable, carbonDimension, complexTypeOrdinal); int numberOfChildrenDimensionAdded = dimensonOrdinal - previouseOrdinal;
/** * traverse through the columns of complex column specified in local dictionary include, * and set local dictionary for all the string and varchar child columns * @param allColumns * @param dimensionOrdinal * @param childColumnCount * @return */ private static int setLocalDictForComplexColumns(List<ColumnSchema> allColumns, int dimensionOrdinal, int childColumnCount) { for (int i = 0; i < childColumnCount; i++) { ColumnSchema column = allColumns.get(dimensionOrdinal); if (column.getNumberOfChild() > 0) { dimensionOrdinal++; setLocalDictForComplexColumns(allColumns, dimensionOrdinal, column.getNumberOfChild()); } else { if (column.isDimensionColumn() && (column.getDataType().equals(DataTypes.STRING) || column.getDataType().equals(DataTypes.VARCHAR)) && !column.hasEncoding(Encoding.DICTIONARY)) { column.setLocalDictColumn(true); } } dimensionOrdinal++; } return dimensionOrdinal; }
ColumnSchema columnSchema = listOfColumns.get(i); if (columnSchema.isDimensionColumn()) { if (columnSchema.getNumberOfChild() > 0) { CarbonDimension complexDimension = new CarbonDimension(columnSchema, dimensionOrdinal++, columnSchema.getSchemaOrdinal(), -1, ++complexTypeOrdinal); complexDimension.initializeChildDimensionsList(columnSchema.getNumberOfChild()); allDimensions.add(complexDimension); dimensionOrdinal = readAllComplexTypeChildrens(dimensionOrdinal, columnSchema.getNumberOfChild(), listOfColumns, complexDimension, primitiveDimensions); i = dimensionOrdinal - 1;
ordinal = setLocalDictForComplexColumns(columns, ordinal, column.getNumberOfChild()); i = ordinal - 1; } else { && column.getDataType().isComplexType()) { ordinal = i + 1; ordinal = setLocalDictForComplexColumns(columns, ordinal, column.getNumberOfChild()); i = ordinal - 1; } else if ( ordinal = i + 1; ordinal = unsetLocalDictForComplexColumns(columns, ordinal, column.getNumberOfChild()); i = ordinal - 1; } else { .isComplexType()) { ordinal = i + 1; ordinal = setLocalDictForComplexColumns(columns, ordinal, column.getNumberOfChild()); i = ordinal - 1; } else {
thriftColumnSchema.setPrecision(-1); thriftColumnSchema.setNum_child(wrapperColumnSchema.getNumberOfChild()); thriftColumnSchema.setDefault_value(wrapperColumnSchema.getDefaultValue()); thriftColumnSchema.setColumnProperties(wrapperColumnSchema.getColumnProperties());