switch (type) { case BOOLEAN: return new StructField(fieldName, DataTypes.BOOLEAN); case INT: if (logicalType instanceof LogicalTypes.Date) { return new StructField(fieldName, DataTypes.DATE); } else { return new StructField(fieldName, DataTypes.INT); return new StructField(fieldName, DataTypes.TIMESTAMP); } else { return new StructField(fieldName, DataTypes.LONG); return new StructField(fieldName, DataTypes.DOUBLE); case ENUM: case STRING: return new StructField(fieldName, DataTypes.STRING); case FLOAT: return new StructField(fieldName, DataTypes.FLOAT); case MAP: StructField keyField = new StructField(fieldName + ".key", DataTypes.STRING); StructField valueField = prepareSubFields(fieldName + ".value", childSchema.getValueType()); if (null != valueField) { keyValueFields.add(valueField); StructField mapKeyValueField =
/** * Throw exception if {@param field} name is repeated */ private void checkRepeatColumnName(StructField field, String parentName) { checkRepeatColumnName( new StructField(parentName + "." + field.getFieldName(), field.getDataType(), field.getChildren())); }
StructField arrayField = prepareSubFields(fieldName, ((ArrayType) dataType).getElementType()); arrayFields.add(arrayField); return new StructField(fieldName, DataTypes.createArrayType(arrayField.getDataType()), arrayFields); } else if (DataTypes.isStructType(dataType)) { structFields.add(prepareSubFields(field.getFieldName(), field.getDataType())); return new StructField(fieldName, DataTypes.createStructType(structFields), structFields); } else if (DataTypes.isMapType(dataType)) { MapType mapType = (MapType) dataType; StructField keyField = new StructField(fieldName + ".key", mapType.getKeyType()); StructField valueField = prepareSubFields(fieldName + ".value", mapType.getValueType()); mapFields.add(keyField); mapFields.add(valueField); StructField field = new StructField(fieldName + ".val", DataTypes.createStructType(mapFields)); MapType mapDataType = DataTypes.createMapType(keyField.getDataType(), field.getDataType()); List<StructField> mapStructField = new ArrayList<>(); mapStructField.add(field); return new StructField(fieldName, mapDataType, mapStructField); } else { return new StructField(fieldName, dataType);
DataTypes.createArrayType(field.getChildren().get(0).getDataType()); tableSchemaBuilder .addColumn(new StructField(field.getFieldName(), complexType), valIndex, false, isInvertedIdxColumn > -1); } else if (field.getDataType().getName().equalsIgnoreCase("STRUCT")) { for (StructField childFld : field.getChildren()) { structFieldsArray .add(new StructField(childFld.getFieldName(), childFld.getDataType())); .addColumn(new StructField(field.getFieldName(), complexType), valIndex, false, isInvertedIdxColumn > -1); } else if (field.getDataType().getName().equalsIgnoreCase("MAP")) { field.getChildren().get(0).getDataType()); tableSchemaBuilder .addColumn(new StructField(field.getFieldName(), mapType), valIndex, false, isInvertedIdxColumn > -1); .addColumn(new StructField(field.getFieldName(), field.getDataType()), valIndex, isSortColumn > -1, isInvertedIdxColumn > -1); if (isSortColumn > -1) {
for (ProjectionDimension dim : queryDimension) { fields[dim.getOrdinal()] = new StructField(dim.getColumnName(), dim.getDimension().getDataType()); || dataType == DataTypes.FLOAT || dataType == DataTypes.BYTE) { fields[msr.getOrdinal()] = new StructField(msr.getColumnName(), msr.getMeasure().getDataType()); } else if (DataTypes.isDecimal(dataType)) { fields[msr.getOrdinal()] = new StructField(msr.getColumnName(), DataTypes.createDecimalType(msr.getMeasure().getPrecision(), msr.getMeasure().getScale())); } else { fields[msr.getOrdinal()] = new StructField(msr.getColumnName(), DataTypes.DOUBLE);
if (DataTypes.isArrayType(field.getDataType())) { String colName = getColNameForArray(valIndex); addColumn(new StructField(colName, ((ArrayType) field.getDataType()).getElementType()), field.getFieldName(), valIndex, false, true, isInvertedIdxColumn); } else if (DataTypes.isStructType(field.getDataType()) addColumn(new StructField(colName, ((MapType) field.getDataType()).getValueType()), parentFieldName, valIndex, false, true, isInvertedIdxColumn);