直播平台源码,FlinkSQL实现行转列

直播平台源码,FlinkSQL实现行转列

1、使用 UNNEST 解析

 

1
select <br>name,course,score<br>from ods_kafka_student_scores <br>CROSS JOIN UNNEST(`list`) AS t (course,score);<br>select <br>name,course,score<br>from ods_kafka_student_scores, UNNEST(`list`) AS t (course,score);<br>select <br>name,course,score<br>from ods_kafka_student_scores <br>LEFT JOIN UNNEST(`list`) AS t (course,score) on true;<br> 

2、使用自定义 UDTF 解析

UDTF(自定义表值函数),自定义表值函数。

 

将 0 个、1 个或多个标量值作为输入参数(可以是变长参数)。与自定义的标量函数类似,但与标量函数不同。表值函数可以返回任意数量的行作为输出,而不仅是 1 个值。返回的行可以由 1 个或多个列组成。调用一次函数输出多行或多列数据。

 

必须继承 TableFunction 基类,并实现一个或者多个名为 eval 的方法。

 

在使用 UDTF 时,需要带上 LATERAL TABLE两个关键字.

 

1
<br>@FunctionHint(output = @DataTypeHint("ROW<course STRING,score INT>"))<br>public class ParserJsonArrayTest extends TableFunction<Row> {<br>    private static final Logger LOG = Logger.getLogger(ParserJsonArrayTest.class);<br>    public void eval(String value) {<br>        try {<br>            JSONArray arrays = JSONArray.parseArray(value);<br>            Iterator<Object> iterator = arrays.iterator();<br>            while (iterator.hasNext()) {<br>                JSONObject jsonObject = (JSONObject) iterator.next();<br>                String course = jsonObject.getString("course");<br>                Integer score = jsonObject.getInteger("score");<br>                collect(Row.of(course,score));<br>            }<br>        } catch (Exception e) {<br>            LOG.error("Parser json failed :" + e.getMessage());<br>        }<br>    }<br>}<br> 

 

自定义 UDTF 解析的时候,就不需要把 list 字段定义成 ARRAY 类型了,直接定义成 STRING 类型就可以了,并且这种方式会更加的灵活,比如还需要过滤数据或者更复杂的一些操作时都可以在 UDTF 里面完成.

 以上就是 直播平台源码,FlinkSQL实现行转列,更多内容欢迎关注之后的文章

 

posted @   云豹科技-苏凌霄  阅读(132)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
历史上的今天:
2021-10-08 在线直播系统源码,利用css和html实现首页图片轮播效果
2021-10-08 直播电商软件开发,界面悬浮购物车显示隐藏
2021-10-08 短视频直播系统,个人主页背景图片自适应宽高
点击右上角即可分享
微信分享提示