[HUDI-1226] Fix ComplexKeyGenerator for non-partitioned tables
This commit is contained in:
@@ -37,9 +37,9 @@ public class ComplexKeyGenerator extends BuiltinKeyGenerator {
|
|||||||
public ComplexKeyGenerator(TypedProperties props) {
|
public ComplexKeyGenerator(TypedProperties props) {
|
||||||
super(props);
|
super(props);
|
||||||
this.recordKeyFields = Arrays.stream(props.getString(DataSourceWriteOptions.RECORDKEY_FIELD_OPT_KEY())
|
this.recordKeyFields = Arrays.stream(props.getString(DataSourceWriteOptions.RECORDKEY_FIELD_OPT_KEY())
|
||||||
.split(",")).map(String::trim).collect(Collectors.toList());
|
.split(",")).map(String::trim).filter(s -> !s.isEmpty()).collect(Collectors.toList());
|
||||||
this.partitionPathFields = Arrays.stream(props.getString(DataSourceWriteOptions.PARTITIONPATH_FIELD_OPT_KEY())
|
this.partitionPathFields = Arrays.stream(props.getString(DataSourceWriteOptions.PARTITIONPATH_FIELD_OPT_KEY())
|
||||||
.split(",")).map(String::trim).collect(Collectors.toList());
|
.split(",")).map(String::trim).filter(s -> !s.isEmpty()).collect(Collectors.toList());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -59,6 +59,10 @@ public class KeyGenUtils {
|
|||||||
|
|
||||||
public static String getRecordPartitionPath(GenericRecord record, List<String> partitionPathFields,
|
public static String getRecordPartitionPath(GenericRecord record, List<String> partitionPathFields,
|
||||||
boolean hiveStylePartitioning, boolean encodePartitionPath) {
|
boolean hiveStylePartitioning, boolean encodePartitionPath) {
|
||||||
|
if (partitionPathFields.isEmpty()) {
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
|
||||||
StringBuilder partitionPath = new StringBuilder();
|
StringBuilder partitionPath = new StringBuilder();
|
||||||
for (String partitionPathField : partitionPathFields) {
|
for (String partitionPathField : partitionPathFields) {
|
||||||
String fieldVal = HoodieAvroUtils.getNestedFieldValAsString(record, partitionPathField, true);
|
String fieldVal = HoodieAvroUtils.getNestedFieldValAsString(record, partitionPathField, true);
|
||||||
|
|||||||
@@ -64,4 +64,23 @@ public class TestComplexKeyGenerator {
|
|||||||
assertEquals(partitionPath, hoodieKey.getPartitionPath());
|
assertEquals(partitionPath, hoodieKey.getPartitionPath());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testMultipleValueKeyGeneratorNonPartitioned() {
|
||||||
|
TypedProperties properties = new TypedProperties();
|
||||||
|
properties.setProperty(DataSourceWriteOptions.RECORDKEY_FIELD_OPT_KEY(), "_row_key,timestamp");
|
||||||
|
properties.setProperty(DataSourceWriteOptions.PARTITIONPATH_FIELD_OPT_KEY(), "");
|
||||||
|
ComplexKeyGenerator compositeKeyGenerator = new ComplexKeyGenerator(properties);
|
||||||
|
assertEquals(compositeKeyGenerator.getRecordKeyFields().size(), 2);
|
||||||
|
assertEquals(compositeKeyGenerator.getPartitionPathFields().size(), 0);
|
||||||
|
HoodieTestDataGenerator dataGenerator = new HoodieTestDataGenerator();
|
||||||
|
GenericRecord record = dataGenerator.generateGenericRecords(1).get(0);
|
||||||
|
String rowKey =
|
||||||
|
"_row_key" + ComplexKeyGenerator.DEFAULT_RECORD_KEY_SEPARATOR + record.get("_row_key").toString() + ","
|
||||||
|
+ "timestamp" + ComplexKeyGenerator.DEFAULT_RECORD_KEY_SEPARATOR + record.get("timestamp").toString();
|
||||||
|
String partitionPath = "";
|
||||||
|
HoodieKey hoodieKey = compositeKeyGenerator.getKey(record);
|
||||||
|
assertEquals(rowKey, hoodieKey.getRecordKey());
|
||||||
|
assertEquals(partitionPath, hoodieKey.getPartitionPath());
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user