【共建开源】手把手教你贡献一个 SeaTunnel PR,超级详细教程!

news2025/1/23 22:44:44

file

Apache SeaTunnel是一个非常易于使用的、超高性能的分布式数据集成平台,支持海量数据的实时同步。每天可稳定高效同步数百亿数据,已被近百家企业投入生产使用。

现在的版本不支持通过jtds的方式链接sqlserver,我们来自己写代码来实现它,并把代码提交给apache seatunnel。

1. 下载源代码

1.首先从远端仓库 https://github.com/apache/seatunnel fork一份代码到自己的仓库中

file file

2.远端仓库中目前有超过30个分支:

  • dev :日常开发分支

  • 其他分支 :发布版本分支

file

3.把自己仓库clone到本地

git clone git@github.com:yougithubID/seatunnel.git

file

  1. 添加远端仓库地址,命名为upstream

这一步是为了让本地代码知道他的上游是apache/seatunnel

git remote add upstream git@github.com:apache/seatunnel.git

file

5.查看仓库:

git remote -v

file

此时会有两个仓库:origin(自己的仓库)和upstream(远端仓库)

6.获取/更新远端仓库代码(已经是最新代码,就跳过)

git fetch upstream

file

2. 编写代码

1.加载拉取到本地的代码到IDEA中

file

这里我们需要注意两个module:seatunnel-connectors-v2和seatunnel-examples,其中seatunnel-connectors-v2是我们来写代码的module,seatunnel-examples是我们用来测试代码的module。

2.编写代码

目前代码中已经实现了基于JDBC的方式取链接SqlServer。我们只需要在它的基础之上去做一定的修改即可,经过debug来阅读源码,并了解了需要改的地方如下图:

file

代码实现如下:

SqlServerDialectFactory.java

return (url.startsWith("jdbc:jtds:sqlserver:") || url.startsWith("jdbc:sqlserver:"));

SqlserverTypeMapper.java

private static final String SQLSERVER_SYSNAME = "SYSNAME";
case SQLSERVER_SYSNAME:
                return BasicType.STRING_TYPE;

SimpleJdbcConnectionProvider.java

public boolean isConnectionValid() throws SQLException {
        if (connection != null && connection.toString().startsWith("net.sourceforge.jtds")){
            return connection != null
                    && !connection.isClosed();
        }else {
            return connection != null
                    && connection.isValid(jdbcConfig.getConnectionCheckTimeoutSeconds());
        }
    }

pom.xml

<jtds.version>1.3.1</jtds.version>
<dependency>
                <groupId>net.sourceforge.jtds</groupId>
                <artifactId>jtds</artifactId>
                <version>${jtds.version}</version>
                <scope>provided</scope>
            </dependency>
<dependency>
            <groupId>net.sourceforge.jtds</groupId>
            <artifactId>jtds</artifactId>
            <version>${jtds.version}</version>
        </dependency>

3. 测试代码

1.编写config文件,我们测试通过net.sourceforge.jtds.jdbc.Driver 从sqlserver中读出数据再写入sqlserver中

env {
  # You can set flink configuration here
  execution.parallelism = 1
  job.mode = "BATCH"
  #execution.checkpoint.interval = 10000
  #execution.checkpoint.data-uri = "hdfs://localhost:9000/checkpoint"
}

source {
  # This is a example source plugin **only for test and demonstrate the feature source plugin**
  Jdbc {
    driver = net.sourceforge.jtds.jdbc.Driver
    url = "jdbc:jtds:sqlserver://localhost:1433/dbname"
    user = SA
    password = "A_Str0ng_Required_Password"
    query = "select age, name from source"
  }

  # If you would like to get more information about how to configure seatunnel and see full list of source plugins,
  # please go to https://seatunnel.apache.org/docs/connector-v2/source/Jdbc
}

transform {

  # If you would like to get more information about how to configure seatunnel and see full list of transform plugins,
  # please go to https://seatunnel.apache.org/docs/transform-v2/sql
}

sink {
  Jdbc {
    driver = net.sourceforge.jtds.jdbc.Driver
    url = "jdbc:jtds:sqlserver://localhost:1433/dbname"
    user = SA
    password = "A_Str0ng_Required_Password"
    query = "insert into sink(age, name) values(?,?)"
  }

  # If you would like to get more information about how to configure seatunnel and see full list of sink plugins,
  # please go to https://seatunnel.apache.org/docs/connector-v2/sink/Jdbc
}

file

2.修改seatunnel-flink-connector-v2-example中的SeaTunnelApiExample,写入我们写好的config文件

file

添加seatunnel-flink-connector-v2-example pom文件中添加jdbc依赖

file

3.运行代码

运行SeaTunnelApiExample,右键->run

4. 提交issue

issue的作用就是告诉社区我们打算做什么事情,后续的PR就是来提交代码解决这个issue。除此以外issue也是我们来提出bug或者其他想法的地方。不一定自己来实现它。你提出来,别人能解决,他们就会提交PR来解决这个问题。

file file file

我这里提交了一个叫[Feature][Connector-V2][SqlServer] Support driver jtds for SqlServer #5307 的issue,其中Feature可以按具体的内容换成BUG/DOCS等等 Connector-V2可以换成其他的具体模块,这里大家可以参照别人已经提的issue来命名。

注:带"*"的都是必填项

5. 提交代码

git commit -m 'commit content'
git push

提交后在github上查看提交代码详情

file

6. 提交PR(Pull Request)

提交完成后,因为我们的仓库的代码的上游是apache/seatunnel,在conribute中我们就可以去提交一个PR。

file

点击Open pull request,就会跳转到上游apache/seatunnel下面的Pull Request列表,并自动开发创建PR页面。填写相关内容,PR的名称就跟需要解决的这个issue一样就可以了,需要注意的时候,最后要带上issue的ID ,我这里是#5307 ,之后点击提交就可以了。

file file

之后就等社区的管理员审核就可以了,这个过程中可能会在PR中进行留言交流,必要的话,再修改代码,重新提交代码,openPR...

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

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

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

相关文章

Spark 框架概述

目录 一、Spark 是什么 1.1 统一分析引擎&#xff1f; 二、Spark 风雨十年 ​三、Spark VS Hadoop(MapReduce) 3.1 面试题&#xff1a;Hadoop 的基于进程的计算和 Spark 基于线程方式优缺点&#xff1f; 四、Spark 四大特点 ​4.1 速度快 4.2 易于使用 4.3 通用性…

使用jib-maven-plugin插件构建镜像并推送至私服Harbor

jib-maven-plugin 插件配置 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apa…

19-springcloud(下)

一 分布式配置中心 1 Spring Cloud Config 分布式系统面临问题 在分布式系统中&#xff0c;由于服务数量巨多&#xff0c;为了方便服务配置文件统一管理&#xff0c;实时更新&#xff0c;所以需要分布式配置中心组件。 什么是Spring Cloud Config Spring Cloud Config项目是…

20230913java面经整理

1.hashmap为什么重写hashcode必须重写equals&#xff1f;不重写hashcode&#xff1f; hashcode判断对象存放的索引值&#xff0c;equals判断相同索引下对象是否相同&#xff0c;不同则存放&#xff08;链表&#xff09; hashcode提升查询效率&#xff0c;通过哈希计算&#xf…

【【萌新编写riscV之计算机体系结构之CPU 总二】】

萌新编写riscV之计算机体系结构之CPU 总二&#xff08;我水平太差总结不到位&#xff09; 在学习完软件是如何使用之后 我们接下来要面对的问题是 整个程序是如何运转的这一基本逻辑 中央处理器(central processing unit&#xff0c;CPU)的任务就是负责提取程序指令&#xff0…

2023年9月16日(星期六)骑行新海晏村

2023年9月16日 (星期六)&#xff1a;骑行新海晏村&#xff0c;早8:30到9:00&#xff0c; 大观楼门囗集合&#xff0c;9:30准时出发 【因迟到者&#xff0c;骑行速度快者&#xff0c;可自行追赶偶遇。】 偶遇地点: 大观楼门囗集合&#xff0c;家住东&#xff0c;南&#xff0c…

Redis常用应用场景

Redis是一款开源的基于内存的键值存储系统&#xff0c;它提供了多种数据结构和丰富的功能&#xff0c;适用于各种不同的应用场景。以下是Redis常用的应用场景&#xff1a; 1.缓存&#xff1a;Redis最常见的用途就是作为缓存。由于Redis存储在内存中&#xff0c;读取速度非常快…

9.13-广读最新研究方向论文核心思路汇总

思路借鉴 GRILL: Grounded Vision-language Pre-training via Aligning Text and Image Regions 关键词&#xff1a; 对象文本对齐 摘要&#xff1a;泛化到未见过的任务是少量样本学习者在不熟悉的任务上实现更好零散视觉表现的重要能力。然而&#xff0c;这种泛化到视觉语言任…

通过小程序实现微信扫码授权登录,网站接入微信扫码登录功能(永久免费)

需求 网站如果想要实现微信扫码登录其实有很多种方案&#xff0c;常见的方案就是微信开放平台和微信公众号服务号。前者是目前大部分网站并且是微信认可的一种方式&#xff0c;后者是开发者发现服务号具备扫码关注后即可获取用户基本信息的能力后而开发的一种方式。 而这两者…

idea创建一个微服务项目

idea创建一个微服务项目 前提&#xff1a;懂得创建基于pom 的 springboot项目 1.像平时创建Maven项目一样创建一个项目 2.删掉src文件&#xff0c;只剩下下面的东西 3.基于这个项目创建model&#xff0c;model也是一个Maven项目&#xff0c;基于springboot mvc 都行&#xff…

openGauss学习笔记-68 openGauss 数据库管理-创建和管理普通表-向表中插入数据

文章目录 openGauss学习笔记-68 openGauss 数据库管理-创建和管理普通表-向表中插入数据68.1 背景信息68.2 操作步骤68.2.1 向表customer_t1中插入一行68.2.2 向表中插入多行68.2.3 从指定表插入数据到当前表68.2.4 删除备份表 openGauss学习笔记-68 openGauss 数据库管理-创建…

Python 图形化界面基础篇:添加复选框( Checkbutton )到 Tkinter 窗口

Python 图形化界面基础篇&#xff1a;添加复选框&#xff08; Checkbutton &#xff09;到 Tkinter 窗口 引言什么是 Tkinter 复选框&#xff08; Checkbutton &#xff09;&#xff1f;步骤1&#xff1a;导入 Tkinter 模块步骤2&#xff1a;创建 Tkinter 窗口步骤3&#xff1a…

【数据分享】2006-2021年我国城市级别的排水和污水处理相关指标(20多项指标)

《中国城市建设统计年鉴》中细致地统计了我国城市市政公用设施建设与发展情况&#xff0c;在之前的文章中&#xff0c;我们分享过基于2006-2021年《中国城市建设统计年鉴》整理的2006—2021年我国城市级别的市政设施水平相关指标、2006-2021年我国城市级别的各类建设用地面积数…

Vue3表单

文章目录 Vue3表单1. 概念2. 输入框3. 复选框4. 单选按钮5. select下拉列表5.1 下拉列表单选5.1 下拉列表多选时绑定到数组5.3 使用 v-for 循环输出选项 6. 值绑定7. 修饰符7.1 .lazy7.2 .number7.3 .trim Vue3表单 1. 概念 可以用 v-model 指令在表单 、 及 等元素上创建双向…

微信内测新功能:“微信分期”来了!

微信作为一款社交 App&#xff0c;早已成为了现在人们日常生活中不可缺少的一部分。 随着生态不断完善&#xff0c;它所涵盖的功能也是越来越多。 据镭射财经&#xff0c;微信近日正在测试一款名为“微信分期”的全系消费信贷产品。功能入口位于微信钱包中&#xff0c;资金方为…

预约微信小程序源码系统制作搭建 适用于多场景 支持万能DIY功能

分享一个预约微信小程序源码系统&#xff0c;适用于多种预约场景&#xff0c;含完整代码包前端后端详细的搭建教程&#xff0c;支持万能DIY功能&#xff0c;让你轻松开发制作一个属于自己的想要的预约小程序。 一、预约微信小程序源码系统制作搭建的基本步骤和注意事项&#xf…

【Flink实战】Flink 商品销量统计-实战Bahir Connetor实战存储 数据到Redis6.X

&#x1f680; 作者 &#xff1a;“大数据小禅” &#x1f680; 文章简介 &#xff1a;Flink 商品销量统计-实战Bahir Connetor实战存储 数据到Redis6.X &#x1f680; 欢迎小伙伴们 点赞&#x1f44d;、收藏⭐、留言&#x1f4ac; 目录导航 Flink怎么操作RedisFlink 商品销量统…

宿舍考勤安全系数?这个答案全国统一!

在现代教育和住宿管理中&#xff0c;确保学生或员工的宿舍考勤管理变得越来越重要。传统的考勤方法可能受到人为错误和滥用的威胁&#xff0c;同时也可能耗费大量时间和资源。 人脸识别技术已经在各个领域展现了强大的潜力。它不仅提高了安全性&#xff0c;还改善了考勤管理的效…

GP08|财务估值因子过滤实盘小市值

量化策略开发&#xff0c;高质量社群&#xff0c;交易思路分享等相关内容 大家好&#xff0c;今天我们来分享gp08策略。千呼万唤始出来&#xff0c;由于xxx原因&#xff08;不便说&#xff0c;好奇的可以私聊我&#xff09;&#xff0c;我们从9月份开始&#xff0c;后面分享的策…

深入解析顺序表:揭开数据结构的奥秘,掌握顺序表的精髓

&#x1f493; 博客主页&#xff1a;江池俊的博客⏩ 收录专栏&#xff1a;数据结构探索&#x1f449;专栏推荐&#xff1a;✅C语言初阶之路 ✅C语言进阶之路&#x1f4bb;代码仓库&#xff1a;江池俊的代码仓库&#x1f525;编译环境&#xff1a;Visual Studio 2022&#x1f38…