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的方式 >