Apache SeaTunnel 数据集成插件开发最新经验总结!

news2024/11/17 21:50:08

在Apache SeaTunnel的最新插件开发中,connector-v2 maxcompute 连接器实现了基于CatalogTable + SaveMode的新版本。

本文主要给大家分享了源端的关键改动包括弃用了过时的方法,改为通过CatalogTable实现数据传递。汇端则增加了对multi-table sink和saveMode接口的实现,并需手动管理auto service注解等经验方法!

此外,开发了特定的catalog以处理公共参数和客户端操作。

connector-v2 maxcompute 连接器

connector-v2 maxcompute 连接器实现了基于CatalogTable + SaveMode的新版本。

a) 源端的核心改动

  • 新版本中SeaTunnelSource继承自SatunnelPluginLifeCycle接口,其中包含了一个prepare方法。该方法原本用于初始化源端中的config参数,以及一些预处理工作,如删除数据、执行SQL等。
  • SeaTunnelSource中的getProducedType方法用于存储SeatunnelRowType,即列映射转换信息的覆写。

file

改动如下:

  • 不再使用两个已过时的方法。
  • 在构造函数中创建CatalogTable,并在新方法List<CatalogTable> getProducedCatalogTables()中实现catalog的数据传递。在新版本中,catalogTable将从源端传递到汇端,作为后续saveMode里批量同步建表的SQL拼接来源。
  • SeatunnelRowType可以从catalogTable中获取,以适配现有连接器,也可以自己封装公共参数进行传递。

file

关于Catalog:

  • 我们通过getTable获取CatalogTable。如果配置了自定义列(column),以适配DataX,我们需要基于column生成CatalogTable

file

b) SInk端的核心改动

  • MaxcomputeSinkFactory中,额外实现了createSink方法,从上下文中获取catalogReadonlyConfigfile
  • Sink需要去除auto service注解,并实现multi-table sinksaveMode接口。file
  • 基于DefaultSaveModeHandler,通过schemaSaveModeDataSaveMode配置,利用catalog中的方法实现数据清理、建表或个性化操作。file
  • catalog实现了truncate table接口,用于数据删除和分区重建。file

file

去除auto_service注解的原因:

  • 如果某个连接器汇端(例如maxcompute)已经实现了新模式接口,不再通过过时的prepare方法注入config,而是通过构造函数从上下文传入的catalogtable获取内部seatunnelRowType的适配。这个连接器在排序上比较靠前,AbstractPluginDiscovery在服务加载时总是首先发现它。但是,如果其他插件(例如clickhouse)仍在使用旧模式(prepare),则MultipleTableJobConfigParser解析汇端会将其视为过时插件,并回退到JobConfigParser进行适配。在parseSink方法中,AbstractPluginDiscovery仍会扫描所有通过autoService注解注入的SeaTunnelSink插件。此时,它遇到的第一个插件maxcompute的构造函数不能适配旧模式的实例初始化,导致失败。
  • 这导致了Maxcompute到Clickhouse数据同步时,报出MaxcomputeSink无法初始化的问题。

file

  • MaxcomputeSinkWriter需要额外实现SupportMutiTableSinkWriter,否则无法进行适当的转换。file

如果要指定部分列回流:

  • 必须比较catalogTable中的列数量与指定的自定义列数量,两者相等才可以进行回流。
  • truncate -> data_save_mode / schema_save_mode
  • 支持列数据的隐式转换(seatunnel row数据是一个Object[]数组,需要结合CatalogTable TableSchema + Opds TableSchema

c) 开发特定的catalog

  • 需要实现公共Catalog接口,其中的openclose可以处理一些公共参数和客户端操作。file
  • catalog需要通过catalog factory进行实例化,并通过auto service进行装配加载。file

本文由 白鲸开源科技 提供发布支持!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1413819.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

HTML+JavaScript-04

JavaScript中的循环 for语句 一个for循环会一直执行&#xff0c;直到循环条件为false for(let i0; i<array.length-1; i){//当遍历完数组后结束循环console.log(array[i] "<br/>");//循环语句 }do...while语句 do...while 语句一直重复直到指定的条件求…

深入理解Redis:如何设置缓存数据的过期时间及其背后的机制

目录 Redis 给缓存数据设置过期时间 Redis是如何判断数据是否过期的呢&#xff1f; 过期的数据的删除策略 Redis 内存淘汰机制 Redis 给缓存数据设置过期时间 一般情况下&#xff0c;我们设置保存的缓存数据的时候都会设置一个过期时间。为什么呢&#xff1f; 因为内存是有…

shell编程-7

shell学习第7天 sed的学习1.sed是什么2.sed有两个空间pattern hold3.sed的语法4. sed里单引号和双引号的区别:5.sed的查找方式6.sed的命令sed的标签用法sed的a命令:追加sed的i命令:根据行号插入sed的c命令:整行替换sed的r命令sed的s命令:替换sed的d命令:删除sed中的&符号 7…

Ubuntu20.04添加桌面启动、侧边栏启动和终端启动

桌面启动 新建XX.desktop文件 在桌面新建一个XX.desktop文件&#xff0c;以QtCreator为例。 &#xff08;注意这里不能使用sudo&#xff0c;因为这样会把文件的权限归为root&#xff0c;导致后续设置可执行程序不方便&#xff09; gedit qtcreator.desktop在XX.desktop文件中…

算子:详细篇

目录 一、执行环境 1.1 创建执行环境 1.2 执行模式 二、源算子 2.1 从集合中读取数据 2.2 从文件读取数据 2.3 从socket读取数据 2.4 从kafka读取数据 三、转换算子 3.1 基本转换算子 &#xff08;1&#xff09;映射(map) &#xff08;2&#xff09;过滤(filter) &#xff08…

数据结构与算法教程,数据结构C语言版教程!(第六部分、数据结构树,树存储结构详解)二

第六部分、数据结构树&#xff0c;树存储结构详解 数据结构的树存储结构&#xff0c;常用于存储逻辑关系为 "一对多" 的数据。 树存储结构中&#xff0c;最常用的还是二叉树&#xff0c;本章就二叉树的存储结构、二叉树的前序、中序、后序以及层次遍历、线索二叉树、…

ASP.NET 7 Core Web 读取appsetting.json

把一些配置信息保存在json文件可以避免更改时要重新发布程序的烦恼。 我这里使用的是写一个类文件&#xff0c;然后通过program.cs启动的方式&#xff08;.net 6 开始没有startup了&#xff09;。 项目类型&#xff1a;ASP.NET Core Web MVC / .NET 7.0 / VS2022 第一步…

架构学习(一):scrapy实现按脚本name与日期生成日志文件

原生scrapy日志机制 一般情况下&#xff0c;我们可以直接在setting文件中定义日志文件&#xff0c;这种会把所有脚本的日志都写在同一个文件 LOG_LEVEL INFO # 日志级别 LOG_STDOUT True # 日志标准输出 LOG_FILE rD:\python\crawler\logs\1163.log # 日志文件路径现在…

少儿编程 2023年12月电子学会图形化编程等级考试Scratch一级真题解析(选择题)

2023年12月scratch编程等级考试一级真题 选择题&#xff08;共25题&#xff0c;每题2分&#xff0c;共50分&#xff09; 1、观察下列每个圆形中的四个数&#xff0c;找出规律&#xff0c;在括号里填上适当的数 A、9 B、17 C、21 D、5 答案&#xff1a;C 考点分析&#xf…

niushop靶场漏洞查找-文件上传漏洞等(超详细)

实战漏洞-niushop 一.端口扫描 http://www.xxx.com/index.php?s/admin/login 这里查询到后面的url有且仅有一个&#xff0c;目测估计是后台 访问url 发现确实是后台 二、找漏洞 Sql注入漏洞1&#xff1a; 点击进去 修改id www.xxx.com/index.php?s/goods/goodslist&…

automa插件使用的一些实战经验3

1 子流程的变量怎么传回父流程 主流程向子流程传参很容易 在子流程可以看到&#xff0c;父流程定义的表格&#xff0c;在子流程中是看不到的&#xff0c;那么子流程定义的变量如何传回父流程呢&#xff1f;另外在子流程再添加执行工作流&#xff0c;是无法选择父流程本身&…

惊了!用vue开发官网,以前我觉得胡闹,现在觉得未尝不可。

以前&#xff0c;有人做好官网UI&#xff08;展示性&#xff0c;没啥功能&#xff09;&#xff0c;找我开发前端&#xff0c;说要vue来做&#xff0c;我都劝了。 基于以下四个原因&#xff1a; 1、官网毕竟还是考虑seo的&#xff0c;流量多少算多少&#xff0c;总比没有强&am…

如何使用 dotnet pack 打包 .NET 跨平台程序集?

如何使用 dotnet pack 打包 .NET 跨平台程序集&#xff1f; dotnet pack 介绍官方描述 dotnet pack 命令说明使用示例打包 .net 类库项目生成带注释的 nuget 包构建特定平台的 nuget 包关于 .NET RID 目录 dotnet pack 介绍 dotnet pack 是一个 .NET Core NuGet 包打包程序。 …

鸿蒙开发初体验

文章目录 前言一、环境配置1.1 安装DevEco Studio1.2 安装相关环境 二、工程创建三、工程结构介绍四、代码实现4.1 初识ArkTs4.2 具体实现 参考资料 前言 HarmonyOS是华为公司推出的一种操作系统&#xff0c;旨在为不同设备提供统一的操作系统和开发平台。鸿蒙开发的出现为用户…

3d gaussian splatting笔记(paper部分翻译)

本文为3DGS paper的部分翻译。 基于点的&#x1d6fc;混合和 NeRF 风格的体积渲染本质上共享相同的图像形成模型。 具体来说&#xff0c;颜色 &#x1d436; 由沿射线的体积渲染给出&#xff1a; 其中密度 &#x1d70e;、透射率 &#x1d447; 和颜色 c 的样本是沿着射线以…

排序(插入排序)

现在&#xff0c;我们学习了之前数据结构的部分内容&#xff0c;即将进入一个重要的领域&#xff1a;排序&#xff0c;这是一个看起来简单&#xff0c;但是想要理清其中逻辑并不简单的内容&#xff0c;让我们一起加油把&#xff01; 排序的概念及其运用 排序的概念 排序&…

贾玲新片刚刚发出紧急声明,是什么情况。

♥ 为方便您进行讨论和分享&#xff0c;同时也为能带给您不一样的参与感。请您在阅读本文之前&#xff0c;点击一下“关注”&#xff0c;非常感谢您的支持&#xff01; 文 |猴哥聊娱乐 编 辑|徐 婷 校 对|侯欢庭 1月22日&#xff0c;一则“多位明星参演的电影涉影视投资诈骗…

浅谈WPF之样式与资源

WPF通过样式&#xff0c;不仅可以方便的设置控件元素的展示方式&#xff0c;给用户呈现多样化的体验&#xff0c;还简化配置&#xff0c;避免重复设置元素的属性&#xff0c;以达到节约成本&#xff0c;提高工作效率的目的&#xff0c;样式也是资源的一种表现形式。本文以一个简…

ARKit 3D 物体检测跟踪

3D 物体检测跟踪 3D物体检测跟踪技术&#xff0c;是指通过计算机图像处理和人工智能技术对摄像机拍摄到的3D物体识别定位并对其姿态进行跟踪的技术。3D物体跟踪技术的基础也是图像识别&#xff0c;但比前述2D 图像检测、识别、跟踪要复杂得多&#xff0c;原因在于现实世界中的物…

【网络协议测试】畸形数据包——圣诞树攻击(DOS攻击)

简介 TCP所有标志位被设置为1的数据包被称为圣诞树数据包&#xff08;XMas Tree packet&#xff09;&#xff0c;之所以叫这个名是因为这些标志位就像圣诞树上灯一样全部被点亮。 标志位介绍 TCP报文格式&#xff1a; 控制标志&#xff08;Control Bits&#xff09;共6个bi…