首页 > 数据库 >直播平台源码,FlinkSQL实现行转列

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

时间:2023-10-08 14:25:21浏览次数:39  
标签:score 自定义 course FlinkSQL UDTF 转列 源码 iterator

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

1、使用 UNNEST 解析

 

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

2、使用自定义 UDTF 解析

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

 

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

 

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

 

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

 


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

 

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

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

 

标签:score,自定义,course,FlinkSQL,UDTF,转列,源码,iterator
From: https://www.cnblogs.com/yunbaomengnan/p/17748933.html

相关文章

  • linux内核升级和内核源码编译
    一、ubuntu通过命令安装内核版本1、检查原系统内核版本uname-r2、搜索可用linux内核版本apt-cachesearchlinux|greplinux-headers3、通过apt命令安装内核apt-getinstall linux-headers-5.4.0-80-generic linux-image-5.4.0-80-generic4、安装成功后查看/boot目录......
  • 基于android的中医体质的社区居民健康管理系统-计算机毕业设计源码+LW文档
    摘要首先,论文一开始便是清楚的论述了系统的研究内容。其次,剖析系统需求分析,弄明白“做什么”,分析包括业务分析和业务流程的分析以及用例分析,更进一步明确系统的需求。然后在明白了系统的需求基础上需要进一步地设计系统,主要包罗软件架构模式、整体功能模块、数据库设计。本......
  • 基于springboot的小程序的高校后勤管理系统-计算机毕业设计源码+LW文档
    1、选题背景与意义(含国内外相关研究综述及评价)近年来,随着计算机的不断发展和深入到各个行业中并起到了很重要的作用,给人们带来了很大的便利。在这样的趋势下,高校的后勤管理显得也很重要。在《高校后勤管理系统的设计与实现》中也提到,教育的普及和日益激烈的资源竞争,对学校的教学质......
  • 外卖小程序源码的安全性和隐私考虑
    外卖小程序源码的使用正在成为数字餐饮业的主流选择之一。然而,随着外卖业务的增长,安全性和隐私保护变得至关重要。在本文中,我们将探讨外卖小程序源码的安全性和隐私问题,并提供一些代码示例,以帮助开发者确保其应用程序的安全性和用户隐私。安全性考虑1.数据传输加密在外卖小程序中......
  • 泰到位小程序开发/APP源码案例演示
    泰到位盈利模式Thisarticleisonlyforsystemdevelopmentrequirementsreference平台收入:用户收入+门店订单佣金平台支出:营销成本+获客成本+人员工资成本 综合来看,对App提出以下几条优化建议: 1技师信息模块 疫情当下,作为上门服务的行业,有必要在技师信息列表中加入每日体......
  • linux 内核源码
    linux官网:https://www.kernel.org/1、第一列为版本描述:主线、稳定版、长期支持版;第二列为内核版本号;第三列为最后更新时间;2、tarball:完整的代码;pgp:验证签名;patch:基于上一个版本的补丁(一般商用的系统不会频繁的编译内核,所以可以打补丁上去方便)3、点击[tarball]下载完成版代......
  • vscode单步调试Android c++源码
    vscode单步调试Androidc++源码  目录步骤1.运行gdbclient.py脚本2.复制生成的launch.json并新建/home/jetson/android_aosp/aosp/.vscode/launch.json3.运行gdb即可,打断点参考 步骤注意:这个过程需要在Android源码环境中运行,可以使用adb端口转发工具,来......
  • 电子病历系统源码(EMP)云端SaaS服务 B/S架构
    一体化电子病历系统基于云端SaaS服务的方式,采用B/S(Browser/Server)架构提供,覆盖了医疗机构电子病历模板制作到管理使用的整个流程。除实现在线制作内容丰富、图文并茂、功能完善的电子病历模板外,还可按照医疗机构的特色,根据不同业务的需求,使用该系统定制个性化、实用化、特色化电子......
  • 医学影像归档与通讯系统(PACS)系统源码 PACS三维图像处理
    医学影像归档与通讯系统(PACS)系统源码 PACS三维图像处理医学影像归档与通讯系统(PACS)系统,是一套适用于从单一影像设备到放射科室、到全院级别等各种应用规模的医学影像归档与通讯系统。PACS集患者登记、图像采集、存档与调阅、报告与打印、查询、统计等功能为一体,有效地实现了对海量......
  • 视频直播源码,js判断上传图片格式类型、尺寸大小
    视频直播源码,js判断上传图片格式类型、尺寸大小 /判断图片类型varf=document.getElementById("File1").value;if(f==""){ alert("请上传图片");returnfalse;}else{if(!/\.(gif|jpg|jpeg|png|GIF|JPG|PNG)$/.test(f)){alert("图片类型必须是.gif,jpeg,jpg,png中的一种")ret......