我正在尝试从kafka主题将数据读取到 DataStream 并注册 DataStream ,然后使用 TableEnvironment.sqlQuery(“ SQL”)查询数据,当 TableEnvironment.execute()时没有错误,也没有输出。
public static void main(String[] args){
StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
env.setStreamTimeCharacteristic(TimeCharateristic.EventTime);
env.enableCheckpointing(5000);
StreamTableEnvironment tableEnvironment = StreamTableEnvironment.create(env);
FlinkKafkaConsumer<Person> consumer = new FlinkKafkaConsumer(
"topic",
new JSONDeserializer(),
Job.getKafkaProperties
);
consumer.setStartFromEarliest();
DataStream<Person> stream = env.addSource(consumer).fliter(x -> x.status != -1).assignTimestampAndWatermarks(new AssignerWithPeriodicWatermarks<Person>(){
long current = 0L;
final long expire = 1000L;
@Override
public Watermakr getCurrentWatermark(){
return new Watermark(current - expire);
}
@Override
public long extractTimestamp(Person person){
long timestamp = person.createTime;
current = Math.max(timestamp,current);
return timestamp;
}
});
//set createTime as rowtime
tableEnvironment.registerDataStream("Table_Person",stream,"name,age,sex,createTime.rowtime");
Table res = tableEnvironment.sqlQuery("select TUMBLE_END(createTime,INTERVAL '1' minute) as registTime,sex,count(1) as total from Table_Person group by sex,TUMBLE(createTime,INTERVAL '1' minute)");
tableEnvironment.toAppendStream(t,Types.Row(new TypeInformation[]{Types.SQL_TIMESTAMP,Types.STRING,Types.LONG})).print();
tableEnvironment.execute("person-query");
}
执行时,控制台上没有任何打印内容或引发任何异常; 但是如果我使用 fromCollection()作为源,程序将在控制台上打印一些内容; 你能指导我解决这个问题吗?
依赖项:
答案 0 :(得分:0)
在将SQL查询的结果转换回DataStream的代码中,需要将res
而不是t
传递给toAppendStream
。 (我看不到您发布的代码将如何编译-t
在哪里声明?)而且我认为您应该能够做到这一点
Table res = tableEnvironment.sqlQuery("select TUMBLE_END(createTime,INTERVAL '1' minute) as registTime,sex,count(1) as total from Table_Person group by sex,TUMBLE(createTime,INTERVAL '1' minute)");
tableEnvironment.toAppendStream(res,Row.class).print();
而不是为TypeInformation
而烦恼。