Hi,
        这三条数据的话:
    new Tuple4<>("a", "a1",30,1),new Tuple4<>("b", "b1",20,1),new 
Tuple4<>("a","a1",30,0)

计算结果是:
| +I |                              a |          30 |
| +I |                              b |          20 |
| -D |                              a |          30 |

实际想要的是 
a 30
b   20
a   0
就是a用户下单30块,b下单20块,a取消下单30块 , 最后a应该返回0 , 想要根据-D标识下发0值数据,下游直接覆盖。  
不知道说的清不清楚。
只通过flink-sql方式好像实现不了

> 2021年11月25日 09:45,Caizhi Weng <tsreape...@gmail.com> 写道:
> 
> Hi!
> 
> 无法在 SQL 里获得第一列的操作符。但可以通过 table.execute().collect() 获得产生的 
> CloseableIterator<Row>,然后通过 Row#getKind 获得该 row 对应的 op。
> 
> 顺便问一下,为什么需要在 SQL 里获得 op 呢?因为这个 op 应该只对内部算子以及 sink 有用,用户一般来说是不需要感知的。
> 
> wushijjian5 <wsjwoods...@163.com <mailto:wsjwoods...@163.com>> 于2021年11月24日周三 
> 下午9:05写道:
> 
> 
> DataStream<Tuple4<String, String,Integer, Integer>> dataStream = 
> env.fromElements(
>         new Tuple4<>("a", "a1",30,1),
>         new Tuple4<>("b", "b1",20,1),new Tuple4<>("a","a1",30,0),
>         new Tuple4<>("a","a2",30,1),
>         new Tuple4<>("a","a3",30,1));
> tEnv.createTemporaryView("tmpTable", dataStream, $("user"),$("ord"), 
> $("num"), $("flag"));
> Table table = tEnv.sqlQuery(
>         " select user,sum(num) as num" +
>         " from (" +
>         "   select user,ord,LAST_VALUE(num) as num,LAST_VALUE(flag) as flag " 
> +
>                 "from tmpTable " +
>                 "group by user,ord " +
>                 ") t1" +
>         " where flag=1 " +
>         " group by user" +
>         "");
> table.execute().print();
> 
> 这样一个回撤流,我能在sql里获取到第一列的操作符么,比如 select op,user,num from xxx   只通过sql的方式
> 

回复