flink1.17 json_tuple udf 实现

使用效果

思路: flink1.17要求复杂类型必须通过hint指定每个字段类型, 只有固定个数,都是基础类型的flink才能自动推断.  这就导致json_tuple返回不定长参数无法搞定.

所以这里通过返回字符串数组来解决. 同时带来新的问题: 数组元素类型一样,导致fastjson2解析到的int也需要转换为string才能输出,类型丢失.  

如果借助官方文档[定制类型推导](自定义函数 | Apache Flink) 目前发现不定长跑不通,定长可以跑通.  所有成功代码和测试代码都在下面.

sql client:
  add jar '/Users/thomas990p/IdeaProjects/FlinkLocalDemo/target/FlinkLocalDemo-1.0-SNAPSHOT.jar';
  create temporary function json_tuple as 'com.yy.udf.JsonTuple';
  SET 'sql-client.execution.result-mode' = 'tableau';
  select json_tuple('{"k1":"v1","k2":{"k11":"v11","k22":200}}', array['$.k1', '$.k2.k22'] );

  Flink SQL>   select arr[1] as k1,arr[2] as v1 f

你可能感兴趣的:(总结,flink)