in xtable-core/src/main/java/org/apache/xtable/hudi/HudiPartitionValuesExtractor.java [47:81]
public List<PartitionValue> extractPartitionValues(
List<InternalPartitionField> partitionColumns, String partitionPath) {
if (partitionColumns == null) {
return Collections.emptyList();
}
int totalNumberOfPartitions = partitionColumns.size();
List<PartitionValue> result = new ArrayList<>(totalNumberOfPartitions);
String remainingPartitionPath = partitionPath;
for (InternalPartitionField partitionField : partitionColumns) {
String sourceFieldName = partitionField.getSourceField().getName();
if (remainingPartitionPath.startsWith(sourceFieldName + "=")) {
// Strip off hive style partitioning
remainingPartitionPath = remainingPartitionPath.substring(sourceFieldName.length() + 1);
}
// handle hive default partition case
PartialResult valueAndRemainingPath;
if (remainingPartitionPath.startsWith(HIVE_DEFAULT_PARTITION)) {
String remaining =
remainingPartitionPath.length() > HIVE_DEFAULT_PARTITION.length()
? remainingPartitionPath.substring(HIVE_DEFAULT_PARTITION.length() + 1)
: "";
valueAndRemainingPath = new PartialResult(null, remaining);
} else {
valueAndRemainingPath =
parsePartitionPath(partitionField, remainingPartitionPath, totalNumberOfPartitions);
}
result.add(
PartitionValue.builder()
.partitionField(partitionField)
.range(Range.scalar(valueAndRemainingPath.getValue()))
.build());
remainingPartitionPath = valueAndRemainingPath.getRemainingPath();
}
return result;
}