Github user pnowojski commented on a diff in the pull request:
https://github.com/apache/flink/pull/6323#discussion_r202289678
--- Diff:
flink-libraries/flink-table/src/main/scala/org/apache/flink/table/catalog/ExternalTableSourceUtil.scala
---
@@ -44,32 +43,27 @@ object ExternalTableSourceUtil extends Logging {
val properties = new DescriptorProperties()
externalCatalogTable.addProperties(properties)
val javaMap = properties.asMap
- val source = TableFactoryService.find(classOf[TableSourceFactory[_]],
javaMap)
- .asInstanceOf[TableSourceFactory[_]]
- .createTableSource(javaMap)
tableEnv match {
// check for a batch table source in this batch environment
case _: BatchTableEnvironment =>
- source match {
- case bts: BatchTableSource[_] =>
- new TableSourceSinkTable(Some(new BatchTableSourceTable(
- bts,
- new FlinkStatistic(externalCatalogTable.getTableStats))),
None)
- case _ => throw new TableException(
- s"Found table source '${source.getClass.getCanonicalName}' is
not applicable " +
- s"in a batch environment.")
- }
+ val source = TableFactoryService
--- End diff --
1.
This case looks kind of ugly. Shouldn't it be unify to sth like:
```
TableFactoryService.find(classOf[TableSourceFactory], javaMap)
.createTableSource(javaMap,
environment.isInstanceOf[StreamTableEnvironment])
```
?
If you really want, you can on top of that define methods:
```
def createBatchTableSource(val javaMap) = createTableSource(javaMap,
isStream = false)
def createStreamTableSource(val javaMap) = createTableSource(javaMap,
isStream = true)
```
but I would skip them.
Factories could choose to support or not streaming/batching tables. Same
applies to similar code in `ExecutionContext.java`.
2. Ditto: Is there any significant value of keeping both
`BatchTableSink(Source)Factory` and `StreamTableSink(Source)Factory`?
both 1. and 2 adds quite a lot of boilerplate code for definition and for
caller.
---