Flink SQL Proctime 报错

The proctime attribute can only be appended to the table schema and not replace an existing field. Please move 'proctime' to the end of the schema.

翻译过来就是要把proctime添加到schema最后,实际我也放在最后了,还是报错。

在Flink中国社区大神的提醒下发现,要和tuple的字段数量对应上,在tuple的字段数量后面再添加一个proctime。

因为我之前为了让sql支持不同来源,字段数不同的数据,直接用了字段数最大的Tuple25,那么这里要求把proctime添加到最后在定义schema的时候就得把25个字段都写上,然后后面再加一个proctime。

String inTopic = args[0];
String outTopic = args[1];
FlinkKafkaConsumer<String> consumer = new FlinkKafkaConsumer<>(inTopic, new SimpleStringSchema(), props);
FlinkKafkaProducer<String> producer = new FlinkKafkaProducer<String>(outTopic, new SimpleStringSchema(), props);
        DataStream<Tuple25<Long,String,String,String,String,String,String,String,String,String,String,String,String,String,String,String,String,String,String,String,String,String,String,String,String>> stream =
                env.addSource(consumer).assignTimestampsAndWatermarks(new MessageWaterEmitter()).flatMap(new FormatMap(sqlConfig.getProperty("SEP")));

tableEnv.registerDataStream(sqlConfig.getProperty("tablename"),stream,sqlConfig.getProperty("tableStruct"));

Table table = tableEnv.sqlQuery(sqlConfig.getProperty("SQL"));
tableEnv.toAppendStream(table, Row.class).flatMap(new RowToStringMap()).addSink(producer);
env.execute("Flink-Kafka Table SQL");

配置文件如下,数据源是逗号分隔的数据,实际字段比较少,但是tableStruct需要按照代码里的Tuple25补齐,最后另外加上proc.proctime,SQL指定需要的字段即可,多余的字段会是null

tablename=test_log
SEP=,
tableStruct=a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,proc.proctime
SQL=select a,count(a) from test_log group by TUMPLE(proc, INTERVAL '10' MINUTE), a

这样 Flink SQL 结合 Kafka 可以实现快速的对 Kakfa 数据进行查询处理,感觉类似最近出来的 KSQL

Tuple 最大只能25个字段,基本也够用了,但是不知道这样25个字段补齐会不会有点浪费资源

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值