zhoukui created FLINK-20936:
-------------------------------
Summary: Improvements in custom partition extractor
Key: FLINK-20936
URL:
https://issues.apache.org/jira/browse/FLINK-20936 Project: Flink
Issue Type: Improvement
Components: Connectors / Hive
Affects Versions: 1.12.0
Environment: flink 1.12.0
jdk 1.8
Reporter: zhoukui
In flink1.12.0, I saw PartitionTimeExtractor is a constructor without parameters, why not take the parameter “extractorPattern". See the source code below:
@Experimental
public interface PartitionTimeExtractor extends Serializable {
String DEFAULT = "default";
String CUSTOM = "custom";
/**
* Extract time from partition keys and values.
*/
LocalDateTime extract(List<String> partitionKeys, List<String> partitionValues);
static PartitionTimeExtractor create(
ClassLoader userClassLoader,
String extractorKind,
String extractorClass,
String extractorPattern) {
switch (extractorKind) {
case DEFAULT:
return new DefaultPartTimeExtractor(extractorPattern);
case CUSTOM:
try {
Class<?> aClass = userClassLoader.loadClass(extractorClass);
return (PartitionTimeExtractor) aClass.newInstance();
} catch (ClassNotFoundException | IllegalAccessException | InstantiationException e) {
throw new RuntimeException(
"Can not new instance for custom class from " + extractorClass, e);
}
default:
throw new UnsupportedOperationException(
"Unsupported extractor kind: " + extractorKind);
}
}
}
Would it be more reasonable to bring a construction method? as follows:
Constructor<?> declaredConstructor = aClass.getDeclaredConstructor(String.class);
return (PartitionTimeExtractor) declaredConstructor.newInstance(extractorPattern);
--
This message was sent by Atlassian Jira
(v8.3.4#803005)