[
https://issues.apache.org/jira/browse/FLINK-6232?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16073728#comment-16073728
]
ASF GitHub Bot commented on FLINK-6232:
---------------------------------------
Github user fhueske commented on a diff in the pull request:
https://github.com/apache/flink/pull/3715#discussion_r125456339
--- Diff:
flink-libraries/flink-table/src/main/scala/org/apache/flink/table/runtime/join/WindowJoinUtil.scala
---
@@ -162,24 +135,26 @@ object JoinUtil {
(l._1 ++ r._1, l._2 ++ r._2)
}
case c: RexCall =>
- val timeIndicators = analyzeSingleConditionTerm(c, leftFieldCount,
inputType)
+ val timeIndicators = extractTimeIndicatorAccesses(c,
leftFieldCount, inputType)
timeIndicators match {
case Seq() =>
(Seq(), Seq(c))
case Seq(v1, v2) =>
if (v1._1 != v2._1) {
- throw new TableException("The time indicators for each input
should be the same.")
+ throw new TableException(
+ "Both time attributes in a join condition must be of the
same type.")
}
if (v1._2 == v2._2) {
- throw new TableException("Both input's time indicators is
needed.")
+ throw new TableException("Time-based join conditions " +
+ "must reference the time attribute of both input tables.")
}
(Seq((v1._1, v1._2, c)), Seq())
--- End diff --
I think the way the `boolean` field is derived is a bit dangerous. We
assume here that the `RexCall` is a comparison where the first operand is the
left term and the second operand is the right term but it could also be any
other call (with an arbitrary number of operands) that returns a boolean.
Although we later check that the `RexCall` is a comparison, I think we should
do this here.
> Support proctime inner equi-join between two streams in the SQL API
> -------------------------------------------------------------------
>
> Key: FLINK-6232
> URL: https://issues.apache.org/jira/browse/FLINK-6232
> Project: Flink
> Issue Type: Sub-task
> Components: Table API & SQL
> Reporter: hongyuhong
> Assignee: hongyuhong
>
> The goal of this issue is to add support for inner equi-join on proc time
> streams to the SQL interface.
> Queries similar to the following should be supported:
> {code}
> SELECT o.proctime, o.productId, o.orderId, s.proctime AS shipTime
> FROM Orders AS o
> JOIN Shipments AS s
> ON o.orderId = s.orderId
> AND o.proctime BETWEEN s.proctime AND s.proctime + INTERVAL '1' HOUR;
> {code}
> The following restrictions should initially apply:
> * The join hint only support inner join
> * The ON clause should include equi-join condition
> * The time-condition {{o.proctime BETWEEN s.proctime AND s.proctime +
> INTERVAL '1' HOUR}} only can use proctime that is a system attribute, the
> time condition only support bounded time range like {{o.proctime BETWEEN
> s.proctime - INTERVAL '1' HOUR AND s.proctime + INTERVAL '1' HOUR}}, not
> support unbounded like {{o.proctime > s.protime}}, and should include both
> two stream's proctime attribute, {{o.proctime between proctime() and
> proctime() + 1}} should also not be supported.
> This issue includes:
> * Design of the DataStream operator to deal with stream join
> * Translation from Calcite's RelNode representation (LogicalJoin).
--
This message was sent by Atlassian JIRA
(v6.4.14#64029)