[
https://issues.apache.org/jira/browse/FLINK-20936?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
zhoukui updated FLINK-20936:
----------------------------
Description:
In flink1.12.0, I saw PartitionTimeExtractor is a constructor without
parameters, why not take the parameter “extractorPattern". See the source code
below:
{code:java}
@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);
}
}
}
{code}
Would it be more reasonable to bring a parameter construction method? as
follows:
try
{ Class<?> aClass = userClassLoader.loadClass(extractorClass); Constructor<?>
declaredConstructor = aClass.getDeclaredConstructor(String.class);
return (PartitionTimeExtractor)
declaredConstructor.newInstance(extractorPattern); }
catch (ClassNotFoundException | IllegalAccessException | InstantiationException
| NoSuchMethodException | InvocationTargetException e)
{ throw new RuntimeException( "Can not new instance for custom class from " +
extractorClass, e); }
was:
In flink1.12.0, I saw PartitionTimeExtractor is a constructor without
parameters, why not take the parameter “extractorPattern". See the source code
below:
{code:java}
@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);
}
}
}
{code}
Would it be more reasonable to bring a parameter construction method? as
follows:
try { Class<?> aClass = userClassLoader.loadClass(extractorClass);
Constructor<?> declaredConstructor =
aClass.getDeclaredConstructor(String.class); return (PartitionTimeExtractor)
declaredConstructor.newInstance(extractorPattern); } catch
(ClassNotFoundException | IllegalAccessException | InstantiationException |
NoSuchMethodException | InvocationTargetException e) { throw new
RuntimeException( "Can not new instance for custom class from " +
extractorClass, e); }
> 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
> Priority: Major
>
> In flink1.12.0, I saw PartitionTimeExtractor is a constructor without
> parameters, why not take the parameter “extractorPattern". See the source
> code below:
> {code:java}
> @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);
> }
> }
> }
> {code}
> Would it be more reasonable to bring a parameter construction method? as
> follows:
> try
> { Class<?> aClass = userClassLoader.loadClass(extractorClass); Constructor<?>
> declaredConstructor = aClass.getDeclaredConstructor(String.class);
> return (PartitionTimeExtractor)
> declaredConstructor.newInstance(extractorPattern); }
> catch (ClassNotFoundException | IllegalAccessException |
> InstantiationException | NoSuchMethodException | InvocationTargetException e)
> { throw new RuntimeException( "Can not new instance for custom class from " +
> extractorClass, e); }
--
This message was sent by Atlassian Jira
(v8.3.4#803005)