[
https://issues.apache.org/jira/browse/FLINK-4832?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15684617#comment-15684617
]
ASF GitHub Bot commented on FLINK-4832:
---------------------------------------
Github user fhueske commented on a diff in the pull request:
https://github.com/apache/flink/pull/2840#discussion_r88978610
--- Diff:
flink-libraries/flink-table/src/main/scala/org/apache/flink/api/table/plan/nodes/dataset/DataSetAggregate.scala
---
@@ -157,4 +161,41 @@ class DataSetAggregate(
case _ => result
}
}
+
+ /**
+ * Dummy [[Row]] into a [[DataSet]] for result after map operations.
+ * @param mapOperator after which insert dummy records
+ * @param tableEnv [[BatchTableEnvironment]] for getting rel builder
and type factory
+ * @tparam IN mapOperator input type
+ * @tparam OUT mapOperator output type
+ * @return DataSet of type Row is contains null literals for columns
+ */
+ private def dummyRow[IN,OUT](
+ mapOperator: MapOperator[IN,OUT],
+ tableEnv: BatchTableEnvironment): DataSet[Row] = {
+
+ val builder: RelDataTypeFactory.FieldInfoBuilder =
getCluster.getTypeFactory.builder
+ val rowInfo = mapOperator.getResultType.asInstanceOf[RowTypeInfo]
+
+ val nullLiterals :ImmutableList[ImmutableList[RexLiteral]] =
+ ImmutableList.of(ImmutableList.copyOf[RexLiteral](
+ for (fieldName <- rowInfo.getFieldNames)
+ yield {
+ val columnType = tableEnv.getTypeFactory
+ .createTypeFromTypeInfo(rowInfo.getTypeAt(fieldName))
+ builder.add(fieldName, columnType)
+ tableEnv.getRelBuilder.getRexBuilder
+ .makeLiteral(null,columnType,false).asInstanceOf[RexLiteral]
+ }))
+
+ val dataType = builder.build()
+
+ val relNode = RelFactories.DEFAULT_VALUES_FACTORY
+ .createValues(getCluster, dataType, nullLiterals)
+
+ DataSetValuesRule.INSTANCE.asInstanceOf[DataSetValuesRule]
--- End diff --
Can we directly create a `ValuesInputFormat` as in `DataSetValues`. Using
the `DataSetValuesRule` outside of the optimizer does not seem like a clean
design.
Alternatively, we can think about implementing the whole fix as a
RelOptRule which injects a LogicalValues with a null row in front of a
LogicalAggregate without groupingSet. In addition we would need to make sure
that LogicalAggregate is only translated into DataSetAggregate if the
LogicalValues exists.
> Count/Sum 0 elements
> --------------------
>
> Key: FLINK-4832
> URL: https://issues.apache.org/jira/browse/FLINK-4832
> Project: Flink
> Issue Type: Improvement
> Components: Table API & SQL
> Reporter: Timo Walther
> Assignee: Anton Mushin
>
> Currently, the Table API is unable to count or sum up 0 elements. We should
> improve DataSet aggregations for this. Maybe by union the original DataSet
> with a dummy record or by using a MapPartition function. Coming up with a
> good design for this is also part of this issue.
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)