深入浅出Apache SeaTunnel SQL Server Sink Connector

在大数据时代,数据的迁移和流动已经变得日益重要。为了使数据能够更加高效地从一个源流向另一个目标,我们需要可靠、高效和易于配置的工具。今天,我们将介绍 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.rhkb.cn/news/168680.html

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

相关文章

美国国防部网络战略如何改变国家网络防御

十年前,时任国防部长莱昂帕内塔说了一句后来臭名昭著的短语:“网络珍珠港”。帕内塔利用他作为该国主要国家安全官员的平台来警告美国未来将遭受可怕的数字攻击。 他警告说,能源基础设施、交通系统、金融平台等都容易受到剥削。媒体、专家和…

什么是Sectigo证书?

Sectigo证书,早前被称为Comodo证书,是一种SSL(安全套接层)证书,用于保护互联网上的数据传输的安全性和隐私性。这些证书由全球领先的SSL证书颁发机构Sectigo颁发,被广泛用于网站、应用程序和服务器上。本文…

广告掘金全自动挂机项目,单设备30+【软件脚本+技术教程】

广告掘金项目是一种越来越受欢迎的赚钱方式,它通过观看广告视频来获取收益。然而,手动观看每个广告视频可能会耗费大量时间和精力。为了简化操作并提升效率,我们可以利用全自动挂机脚本来完成这一任务。接下来,将为您介绍如何使用…

SpringCloud 微服务全栈体系(三)

第五章 Nacos 注册中心 国内公司一般都推崇阿里巴巴的技术,比如注册中心,SpringCloudAlibaba 也推出了一个名为 Nacos 的注册中心。 一、认识和安装 Nacos 1. 认识 Nacos Nacos是阿里巴巴的产品,现在是SpringCloud中的一个组件。相比Eure…

【面试经典150 | 哈希表】快乐数

文章目录 写在前面Tag题目来源题目解读解题思路方法一:哈希集合判重方法二:快慢指针判重 其他语言python3 写在最后 写在前面 本专栏专注于分析与讲解【面试经典150】算法,两到三天更新一篇文章,欢迎催更…… 专栏内容以分析题目为…

第二证券:风电概念强势拉升,威力传动“20cm”涨停,双一科技等大涨

风电概念20日盘中强势拉升,到发稿,威力传动“20cm”涨停,双一科技涨超17%,顺发恒业亦涨停,金雷股份、大金重工涨约7%,新强联、海力风电涨超5%。 音讯面上,9月以来江苏、广东海风项目加快推动&a…

第十五章 I/O(输入/输出)流

15.1 输入/输出流 流是一组有序的数据序列,可分为输入流和输出流两种。 程序从指向源的输入流中读取源中数据,源可以是文件、网络、压缩包或者其他数据源 输出流的指向是数据要到达的目的地,输出流的目标可以是文件、网络、压缩包、控制台和…

机器学习笔记 - 特斯拉的占用网络简述

一、简述 ​ 2022 年,特斯拉宣布即将在其车辆中发布全新算法。该算法被称为occupancy networks,它应该是对Tesla 的HydraNet 的改进。 自动驾驶汽车行业在技术上分为两类:基于视觉的系统和基于激光雷达的系统。后者使用激光传感器来确定物体的存在和距离,而视觉系统…

【tg】6: MediaManager的主要功能

【tg】2:视频采集的输入和输出 的管理者是 media manager‘ media 需要 network的支持:NetworkInterface friend class MediaManager::NetworkInterfaceImpl;NetworkInterfaceImpl 直接持有 MediaManager 的指针即可:发送rtp包、rtcp包、设置socket选项?

小程序 swiper滑动

整个红色区域为可滑动区域&#xff0c;数字1区域为展示区域&#xff0c;数字2为下一个展示模块 <scroll-view class"h_scroll_horizontal" enhanced"ture" bind:touchend"touchEnd" bind:touchstart"touchStart"><view clas…

从昏暗到明亮—改善照明环境,提升编程效率

作为一名程序员博主&#xff0c;长时间写代码、写博客&#xff0c;对着电脑屏幕的生活方式已经渐渐成为了我的日常。 然而&#xff0c;这种生活方式却给我的眼睛带来了相当大的压力。每当一天的工作结束&#xff0c;我的眼睛总是感到干涩、疲劳&#xff0c;让我感到不舒适。&am…

基于C语言 --- 自己写一个通讯录

C语言程序设计笔记---039 C语言之实现通讯录1、介绍C/C程序的内存开辟2、C语言实现通讯录2.1、ContactMain.c程序大纲2.2、Contact2.h2.3、Contact2.c2.3.1 InitContact( )初始化通讯录函数2.3.2 AddContact( )添加联系人和CheckCapaticy( )检查容量函数2.3.3、ShowContact( )显…

模式识别——高斯分类器

模式识别——高斯分类器 需知定义特殊情况&#xff08;方差一致&#xff09;Sigmoid 需知 所有问题定义在分类问题下&#xff0c;基于贝叶斯决策 定义 条件概率为多元高斯分布&#xff0c;此时观测为向量 X X 1 , X 2 , . . . , X n X{X_1,X_2,...,X_n} XX1​,X2​,...,Xn​…

Docker Service 创建

Docker Swarm Mode Docker Swarm 集群搭建 Docker Swarm 节点维护 Docker Service 创建 service 只能依附于 docker swarm 集群&#xff0c;所以 service 的创建前提是&#xff0c;swarm 集群搭建完毕。 1. 创建 service docker service create 命令用于创建 service&#xff…

【C++项目】高并发内存池第二讲中心缓存CentralCache框架+核心实现

CentralCache 1.框架介绍2.核心功能3.核心函数实现介绍3.1SpanSpanList介绍3.2CentralCache.h3.3CentralCache.cpp3.4TreadCache申请内存函数介绍3.5慢反馈算法 1.框架介绍 回顾一下ThreadCache的设计&#xff1a; 如图所示&#xff0c;ThreadCache设计是一个哈希桶结构&…

前端领域的插件式设计

插件&#xff0c;是一个常见的概念。 例如&#xff0c;当我们需要把我们前端代码中的 css 样式提取打包&#xff0c;我们可以用 webpack 的 mini-css-extract-plugin&#xff0c;或者你如果用 rollup 的话&#xff0c;可以选择 rollup-plugin-postcss。 再比如我们可以给 bab…

RDB.js:适用于 Node.js 和 Typescript 的终极对象关系映射器

RDB.js 是适用于 Node.js 和 Typescript 的终极对象关系映射器&#xff0c;可与 Postgres、MS SQL、MySQL、Sybase SAP 和 SQLite 等流行数据库无缝集成。无论您是使用 TypeScript 还是 JavaScript&#xff08;包括 CommonJS 和 ECMAScript&#xff09;构建应用程序&#xff0c…

X32位汇编和X64位区别无参函数分析(一)

前言 一、X32汇编函数无参无返回分析 二、X64汇编函数无参无返回分析 总结 前言 提示&#xff1a;以下是个人学习总结&#xff1a;如有错误请大神指出来&#xff0c;只供学习参考&#xff0c;本内容使用使用VS2017开发工具&#xff1a;语言是C&#xff0c;需要一些常见的汇编指…

MySQL1——喵喵期末不挂科

宝宝&#xff0c;你不点个赞吗&#xff1f;不评个论吗&#xff1f;不收个藏吗&#xff1f; 最后的最后&#xff0c;关注我&#xff0c;关注我&#xff0c;关注我&#xff0c;你会看到更多有趣的博客哦&#xff01;&#xff01;&#xff01; 喵喵喵&#xff0c;你对我真的很重要…

阶段六-Day04-MyBatis2

一、别名 Alias 1. 为什么使用别名 一般映射文件中会包含大量<select>标签, 每个<select>中都需要配置resultType"com.bjsxt.pojo.People"&#xff0c;MyBatis提供了别名机制可以对某个类起别名或给某个包下所有类起别名&#xff0c;简化resultType取值…