in xtable-core/src/main/java/org/apache/xtable/delta/DeltaPartitionExtractor.java [460:517]
private static ParsedGeneratedExpr buildFromString(String partitionColumnName, String expr) {
if (expr.contains("YEAR")) {
return ParsedGeneratedExpr.builder()
.generatedExprType(GeneratedExprType.YEAR)
.partitionColumnName(partitionColumnName)
.sourceColumn(extractColumnName(expr, YEAR_PATTERN))
.internalPartitionTransformType(PartitionTransformType.YEAR)
.build();
} else if (expr.contains("MONTH")) {
return ParsedGeneratedExpr.builder()
.generatedExprType(GeneratedExprType.MONTH)
.partitionColumnName(partitionColumnName)
.sourceColumn(extractColumnName(expr, MONTH_PATTERN))
.internalPartitionTransformType(PartitionTransformType.MONTH)
.build();
} else if (expr.contains("DAY")) {
return ParsedGeneratedExpr.builder()
.generatedExprType(GeneratedExprType.DAY)
.partitionColumnName(partitionColumnName)
.sourceColumn(extractColumnName(expr, DAY_PATTERN))
.internalPartitionTransformType(PartitionTransformType.DAY)
.build();
} else if (expr.contains("HOUR")) {
return ParsedGeneratedExpr.builder()
.generatedExprType(GeneratedExprType.HOUR)
.partitionColumnName(partitionColumnName)
.sourceColumn(extractColumnName(expr, HOUR_PATTERN))
.internalPartitionTransformType(PartitionTransformType.HOUR)
.build();
} else if (expr.contains("CAST")) {
return ParsedGeneratedExpr.builder()
.generatedExprType(GeneratedExprType.CAST)
.partitionColumnName(partitionColumnName)
.sourceColumn(extractColumnName(expr, CAST_PATTERN))
.internalPartitionTransformType(PartitionTransformType.DAY)
.build();
} else if (expr.contains("DATE_FORMAT")) {
Matcher matcher = DATE_FORMAT_PATTERN.matcher(expr);
if (matcher.find()) {
/*
* from DATE_FORMAT(source_col, 'yyyy-MM-dd-HH') the code below extracts yyyy-MM-dd-HH.
*/
String fieldName = matcher.group(1);
String dateFormatExpr = matcher.group(2);
return ParsedGeneratedExpr.builder()
.generatedExprType(GeneratedExprType.DATE_FORMAT)
.partitionColumnName(partitionColumnName)
.sourceColumn(fieldName)
.internalPartitionTransformType(computeInternalPartitionTransform(dateFormatExpr))
.build();
} else {
throw new IllegalArgumentException("Could not extract values from: " + expr);
}
} else {
throw new IllegalArgumentException(
"Unsupported expression for generated expression: " + expr);
}
}