in xtable-core/src/main/java/org/apache/xtable/delta/DeltaPartitionExtractor.java [356:400]
private StructField getGeneratedField(InternalPartitionField internalPartitionField) {
String generatedExpression;
DataType dataType;
String currPartitionColumnName = getGeneratedColumnName(internalPartitionField);
switch (internalPartitionField.getTransformType()) {
case YEAR:
generatedExpression =
String.format(YEAR_FUNCTION, internalPartitionField.getSourceField().getPath());
dataType = DataTypes.IntegerType;
break;
case MONTH:
case HOUR:
generatedExpression =
String.format(
DATE_FORMAT_FUNCTION,
internalPartitionField.getSourceField().getPath(),
getDateFormat(internalPartitionField.getTransformType()));
dataType = DataTypes.StringType;
break;
case DAY:
generatedExpression =
String.format(CAST_FUNCTION, internalPartitionField.getSourceField().getPath());
dataType = DataTypes.DateType;
break;
case BUCKET:
generatedExpression =
String.format(
BUCKET_FUNCTION,
internalPartitionField.getSourceField().getPath(),
Integer.MAX_VALUE,
(int)
internalPartitionField
.getTransformOptions()
.get(InternalPartitionField.NUM_BUCKETS));
dataType = DataTypes.IntegerType;
break;
default:
throw new PartitionSpecException("Invalid transform type");
}
Map<String, String> generatedExpressionMetadata =
Collections.singletonMap(DELTA_GENERATION_EXPRESSION, generatedExpression);
Metadata partitionFieldMetadata =
new Metadata(ScalaUtils.convertJavaMapToScala(generatedExpressionMetadata));
return new StructField(currPartitionColumnName, dataType, true, partitionFieldMetadata);
}