深入浅出Apache SeaTunnel SQL Server Sink Connector

news/2024/5/18 21:44:48/文章来源:https://blog.csdn.net/DolphinScheduler/article/details/133999054

在大数据时代,数据的迁移和流动已经变得日益重要。为了使数据能够更加高效地从一个源流向另一个目标,我们需要可靠、高效和易于配置的工具。今天,我们将介绍 JDBC SQL Server Sink Connector,这是一个专为 SQL Server 设计的连接器,能够确保数据的精准、高效传输。

file

不仅如此,它还支持多种流处理引擎,例如 Spark、Flink 和 SeatTunnel Zeta。无论您是初学者还是有经验的开发者,本文都将为您提供关于如何最大限度地利用此连接器的深入见解。

支持 SQL Server 版本

  • 服务器:2008(或更高版本,仅供信息参考)

支持的引擎

Spark
Flink
Seatunnel Zeta

主要特点

  • [x] 精准一次性
  • [x] CDC(变更数据捕获)

使用 Xa 事务 来确保 精准一次性。因此,仅支持支持 Xa 事务 的数据库的 精准一次性。您可以设置 is_exactly_once=true 来启用它。

描述

通过 JDBC 写入数据。支持批处理模式和流处理模式,支持并发写入,支持精准一次性语义(使用 XA 事务保证)。

支持的数据源信息

数据源支持的版本驱动URLMaven
SQL Server支持版本 >= 2008com.microsoft.sqlserver.jdbc.SQLServerDriverjdbc:sqlserver://localhost:1433下载

数据库依赖

请下载与 'Maven' 对应的支持列表,并将其复制到 '$SEATNUNNEL_HOME/plugins/jdbc/lib/' 工作目录
例如 SQL Server 数据源:cp mssql-jdbc-xxx.jar $SEATNUNNEL_HOME/plugins/jdbc/lib/

数据类型映射

SQL Server 数据类型Seatunnel 数据类型
BITBOOLEAN
TINYINT
SMALLINT
SHORT
INTEGERINT
BIGINTLONG
DECIMAL
NUMERIC
MONEY
SMALLMONEY
DECIMAL((指定列的指定列大小)+1,
(获取指定列的小数点右边的数字的数量。)))
REALFLOAT
FLOATDOUBLE
CHAR
NCHAR
VARCHAR
NTEXT
NVARCHAR
TEXT
STRING
DATELOCAL_DATE
TIMELOCAL_TIME
DATETIME
DATETIME2
SMALLDATETIME
DATETIMEOFFSET
LOCAL_DATE_TIME
TIMESTAMP
BINARY
VARBINARY
IMAGE
UNKNOWN
尚不支持

Sink 选项

名称类型必需默认值描述
url字符串-JDBC 连接的 URL。例如:jdbc:sqlserver://localhost:1433;databaseName=mydatabase
driver字符串-用于连接到远程数据源的 JDBC 类名,如果使用 SQL Server,则值为 com.microsoft.sqlserver.jdbc.SQLServerDriver
user字符串-连接实例的用户名
password字符串-连接实例的密码
query字符串-使用此 SQL 将上游输入数据写入数据库。例如 INSERT ...query 具有更高的优先级
database字符串-使用此 databasetable-name 自动生成 SQL 并接收上游输入数据写入数据库。此选项与 query 互斥,优先级更高。
table字符串-使用数据库和此表名自动生成 SQL 并接收上游输入数据写入数据库。此选项与 query 互斥,优先级更高。
primary_keys数组-此选项用于支持自动生成 SQL 时的 insertdeleteupdate 等操作。
support_upsert_by_query_primary_key_exist布尔false选择是否使用 INSERT SQL、UPDATE SQL 来处理基于查询主键是否存在的更新事件(INSERT、UPDATE_AFTER)。只有在数据库不支持 upsert 语法时才使用此配置。注意:此方法性能较低。
connection_check_timeout_sec整数30等待用于验证连接的数据库操作完成的秒数。
max_retries整数0重试提交失败(executeBatch)的次数。
batch_size整数1000用于批量写入的记录数量达到 batch_size 或时间达到 checkpoint.interval 时,数据将刷新到数据库。
is_exactly_once布尔false是否启用精准一次性语义,将使用 XA 事务。如果开启,需要设置 xa_data_source_class_name
generate_sink_sql布尔false基于要写入的数据库表生成 SQL 语句。
xa_data_source_class_name字符串-数据库驱动程序的 XA 数据源类名,例如,SQL Server 为 com.microsoft.sqlserver.jdbc.SQLServerXADataSource,其他数据源请参考附录。
max_commit_attempts整数3事务提交失败的重试次数。
transaction_timeout_sec整数-1事务打开后的超时时间,默认值为 -1(永不超时)。请注意,设置超时可能会影响精准一次性语义。
auto_commit布尔true默认启用自动事务提交。
common-options-Sink 插件通用参数,请参考 Sink Common Options 以获取详细信息。
## 提示

如果未设置 partition_column,则将以单一并发运行;如果设置了 partition_column,则将根据任务的并发度执行并行操作。

任务示例

简单:

这是一个读取 Sql Server 数据并将其直接插入另一个表中的示例

env {# 您可以在此处设置引擎配置execution.parallelism = 10
}
source {# 这是一个示例源插件,仅用于测试和演示源插件的功能Jdbc {driver = com.microsoft.sqlserver.jdbc.SQLServerDriverurl = "jdbc:sqlserver://localhost:1433;databaseName=column_type_test"user = SApassword = "Y.sa123456"query = "select * from column_type_test.dbo.full_types_jdbc"# 并行分片读取字段partition_column = "id"# 片段数量partition_num = 10}
}transform {# 如果您想要获取有关如何配置 Seatunnel 和查看转换插件的完整列表的更多信息,# 请转到 https://seatunnel.apache.org/docs/transform-v2/sql
}sink {Jdbc {driver = com.microsoft.sqlserver.jdbc.SQLServerDriverurl = "jdbc:sqlserver://localhost:1433;databaseName=column_type_test"user = SApassword = "Y.sa123456"query = "insert into full_types_jdbc_sink( id, val_char, val_varchar, val_text, val_nchar, val_nvarchar, val_ntext, val_decimal, val_numeric, val_float, val_real, val_smallmoney, val_money, val_bit, val_tinyint, val_smallint, val_int, val_bigint, val_date, val_time, val_datetime2, val_datetime, val_smalldatetime ) values( ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ? )"}  # 如果您想要获取有关如何配置 Seatunnel 和查看接收插件的完整列表的更多信息,# 请转到 https://seatunnel.apache.org/docs/connector-v2/sink/Jdbc
}

CDC(Change Data Capture)事件

我们还支持 CDC 变更数据,此时需要配置数据库、表和主键。

Jdbc {source_table_name = "customers"driver = com.microsoft.sqlserver.jdbc.SQLServerDriverurl = "jdbc:sqlserver://localhost:1433;databaseName=column_type_test"user = SApassword = "Y.sa123456"generate_sink_sql = truedatabase = "column_type_test"table = "dbo.full_types_sink"batch_size = 100primary_keys = ["id"]
}

精确一次性 Sink

事务性写入可能会更慢,但对数据更准确

Jdbc {driver = com.microsoft.sqlserver.jdbc.SQLServerDriverurl = "jdbc:sqlserver://localhost:1433;databaseName=column_type_test"user = SApassword = "Y.sa123456"query = "insert into full_types_jdbc_sink( id, val_char, val_varchar, val_text, val_nchar, val_nvarchar, val_ntext, val_decimal, val_numeric, val_float, val_real, val_smallmoney, val_money, val_bit, val_tinyint, val_smallint, val_int, val_bigint, val_date, val_time, val_datetime2, val_datetime, val_smalldatetime ) values( ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ? )"is_exactly_once = "true"xa_data_source_class_name = "com.microsoft.sqlserver.jdbc.SQLServerXADataSource"}  # 如果您想要获取有关如何配置 Seatunnel 和查看接收插件的完整列表的更多信息,# 请转到 https://seatunnel.apache.org/docs/connector-v2/sink/Jdbc

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

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

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MyBatis-Plus实现逻辑删除[MyBatis-Plus系列] - 492篇

历史文章(文章累计490) 《国内最全的Spring Boot系列之一》 《国内最全的Spring Boot系列之二》 《国内最全的Spring Boot系列之三》 《国内最全的Spring Boot系列之四》 《国内最全的Spring Boot系列之五》 《国内最全的Spring Boot系列之六》 M…

【鸿蒙软件开发】文本输入(TextInput/TextArea)

文章目录 前言一、输入框1.1 创建输入框单行输入框多行输入框单行和多行输入框的区别 1.2 设置输入框的类型有哪些类型基本输入模式(默认类型)密码输入模式 1.3 自定义样式设置无输入时的提示文本设置输入框当前的文本内容。添加backgroundColor改变输入…

MECE分析法

1、前言 前段时间在对项目进行问题分析的时候,领导要求要符合MECE原则,做到逻辑完整而不能遗漏。虽然没听过这个原则,但是总感觉很有道理(领导说的都对)。于是乎,就找了一些资料了解了一下。 MECE分析法是…

【Rust】4 一文讲解重点 pattern matching | trait | 生命周期 | 闭包 | 迭代器 | 智能指针 | 并发与并行

文章目录 一、pattern matching二、trait2.1 常见 trait2.1.1 Copy 和 Clone2.1.2 PartialEq 和 Eq2.1.3 PartialOrd 和 Ord2.1.4 Hash2.1.5 From, Into, TryFrom, TryInto 2.2 概念2.2.1 关联类型2.2.2 关联常量2.3.3 泛型关联类型2.3.3.1 示例: 用泛型关联类型, 创建集合工厂…

快手进与退,快手董事长在辞任前套现37.78亿港元

快手科技(1024.HK)在港交所发布公告,宣布自2023年10月29日起,公司创始人宿华将不再担任董事会董事长,而继续担任执行董事和薪酬委员会成员,而他的不同投票权将保持不变。与此同时,快手科技的现任…

爱创科技携手洽洽食品,探索渠道数字化最优解!

坚果的下半场,是从吃到喝。 消费升级大潮下,健康养生理念逐渐深入人心。以“天然健康”为核心的食品新消费潮流正加速形成,一个个打着“美味与营养”黄金设定的品类风口正被不断创建,其中人气有增无减的当属植物基饮品。据相关报告…

【蓝桥杯001】

个人名片: 🐼作者简介:一名大二在校生,喜欢编程🎋 🐻‍❄️个人主页🥇:小新爱学习. 🐼个人WeChat:hmmwx53 🕊️系列专栏:&#x1f5bc…

pv操作题目笔记

对于 pv 操作分以下几步走 什么是pv操作 PV操作在进程同步中通常指的是信号量(Semaphore)操作。信号量是一种用于控制多个并发进程或线程之间的同步和互斥访问的同步工具。PV操作通常涉及两个基本操作:P操作(wait操作&#xff0…

024-第三代软件开发-TabView

第三代软件开发-TabView 文章目录 第三代软件开发-TabView项目介绍TabView官方示例 项目实际使用 关键字: Qt、 Qml、 TabView、 关键字4、 关键字5 项目介绍 欢迎来到我们的 QML & C 项目!这个项目结合了 QML(Qt Meta-Object Langu…

js如何解决跨域问题?

🙂博主:锅盖哒 🙂文章核心:js如何解决跨域问题? 目录 前言:跨域问题的本质 详解:跨域问题的原因和限制 跨域问题的限制包括: 用法:解决跨域问题的方法 1. JSONP(J…

Python OpenCV通过灰度平均值进行二值化处理以减少像素误差

Python OpenCV通过灰度平均值进行二值化处理以减少像素误差 前言前提条件相关介绍实验环境通过灰度平均值进行二值化处理以减少像素误差固定阈值二值化代码实现 灰度平均值二值化代码实现 前言 由于本人水平有限,难免出现错漏,敬请批评改正。更多精彩内容…

异步加载 JavaScript

目录 ​编辑 前言:异步加载 JavaScript 的重要性 详解:异步加载 JavaScript 的方法 使用 使用动态创建标签: 使用模块引入(ES6模块): 解析:异步加载 JavaScript 的重要性和优势 实践和注…

【C++面向对象】3. 友元函数、友元类

文章目录 【 1. 友元函数 】【 2. 友元类 】 友元可以是一个函数,该函数被称为 友元函数;友元也可以是一个类,该类被称为 友元类。 【 1. 友元函数 】 类的 友元函数是定义在类外部,但有权访问类的所有私有(private…

【python入门篇】字符串(4)

这一章节来说下字符串的使用,字符串是 Python 中最常用的数据类型,我们可以使用单引号( )或 双引号( " )来创建字符串,那么接下来就进入本章节的一个学习。 一、环境配置 我这边python的环境是3.7.8版本的&…

《红蓝攻防对抗实战》四.内网探测协议出网之ICMP协议探测出网

目录 一.Windows系统探测ICMP协议出网 1. Ping命令 2.Tracert 命令 二.Linux系统探测ICMP协议出网 1. Ping命令 ICMP(Internet Control Message Protocol)是一种面向无连接的协议,属于网络层的协议,用于检测网络通信故障和实…

【Java集合类面试十一】、HashMap为什么用红黑树而不用B树?

文章底部有个人公众号:热爱技术的小郑。主要分享开发知识、学习资料、毕业设计指导等。有兴趣的可以关注一下。为何分享? 踩过的坑没必要让别人在再踩,自己复盘也能加深记忆。利己利人、所谓双赢。 面试官:HashMap为什么用红黑树而…

【BA-BP分类】基于蝙蝠算法优化神经网络分类研究(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

Cesium冷知识:Sandcastle新增示例组

Cesium.js的SandCastle中有很多示例 他们根据不同类型分为不同的组 在cesium.js的源码中&#xff0c;把示例的 <meta content"自己定义新的组名">值改为自定义的组名 然后执行npm run build&#xff0c;就可以创建出一个新的组 这种方法在下面这些Cesium.js版…

vue按特定字符串切割后端传输的图片路径

一、分隔字符 /userfiles/1/attachment/null/2023/10/13967b6b8332413f92ab67735873aa76.jpg|/userfiles/1/attachment/null/2023/10/17fd6e2c16144e66b8cd3ec495e6745f.png 后端传来图片的路径是按照 | 进行分隔的 首先在return中定义数组 在methods中添加分隔方法 //将查询…

AIGC笔记--基于DDPM实现图片生成

目录 1--扩散模型 2--训练过程 3--损失函数 4--生成过程 5--参考 1--扩散模型 完整代码&#xff1a;ljf69/DDPM 扩散模型包含两个过程&#xff0c;前向扩散过程和反向生成过程。 前向扩散过程对一张图像逐渐添加高斯噪声&#xff0c;直至图像变为随机噪声。 反向生成过程…