【Demo 视频教程】使用SeaTunnel从MySQL同步到Doris

随着数据技术的快速发展,了解并掌握各种工具和技术变得尤为重要。为此,我们准备在Apache SeaTunnel社区发起如何使用连接器的Demo演示计划,邀请所有热爱数据同步技术的同学分享他们的知识和实操经验!

本期我们邀请到了社区PMC高俊老师,参与录制的主题是:如何从MySQL同步到Doris,如果您对此计划感兴趣,也欢迎联系社区运营同学参与Demo录制!无论您是数据工程师、开发者还是技术爱好者,都欢迎您参与并展示您的技术才能。

敲重点敲重点如果你是用户,想看什么同步场景的Demo!请下滑到最底部留言,我们优先出品呼声最高的同步场景Demo!

Demo计划目标

我们的目标是创建一个共享和学习的平台,通过具体的Demo演示和对应的文档帮助社区成员更好地理解和应用各种数据连接器。这些Demo可以帮助新手快速学习,同时也为资深专家提供一个展示创新解决方案的舞台。

MySQL同步到Doris

src="//player.bilibili.com/player.html?aid=1503234572&bvid=BV1dD421n7YU&cid=1507007688&p=1" scrolling="no" border="0" frameborder="no" framespacing="0" allowfullscreen="true">

JDBC MySQL连接器

描述

通过JDBC读取外部数据源数据。

支持的MySQL版本

  • 5.5/5.6/5.7/8.0

支持的引擎

Spark
Flink
SeaTunnel Zeta

使用依赖

Spark/Flink引擎

  1. 您需要确保jdbc驱动jar包已放在${SEATUNNEL_HOME}/plugins/目录下。

SeaTunnel Zeta引擎

  1. 您需要确保jdbc驱动jar包已放在${SEATUNNEL_HOME}/lib/目录下。

MySQL 连接器关键特性

  • 批处理
  • 流处理
  • 精确一次
  • 列投影
  • 并行处理
  • 支持用户自定义分片
  • 支持多表读取

支持查询SQL并可实现投影效果。

支持的数据源信息

数据源支持的版本驱动URLMaven下载
MySQL不同的依赖版本有不同的驱动类。com.mysql.cj.jdbc.Driverjdbc:mysql://localhost:3306:3306/test下载

数据库依赖

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

数据类型映射

MySQL数据类型SeaTunnel数据类型
BIT(1)
INT UNSIGNED
BOOLEAN
TINYINT
TINYINT UNSIGNED
SMALLINT
SMALLINT UNSIGNED
MEDIUMINT
MEDIUMINT UNSIGNED
INT
INTEGER
YEAR
INT
INT UNSIGNED
INTEGER UNSIGNED
BIGINT
BIGINT
BIGINT UNSIGNEDDECIMAL(20,0)
DECIMAL(x,y)(获取指定列的指定列大小.<38)DECIMAL(x,y)
DECIMAL(x,y)(获取指定列的指定列大小.>38)DECIMAL(38,18)
DECIMAL UNSIGNEDDECIMAL(获取指定列的指定列大小+1,
(获取指定列小数点右侧的数字个数.)))
FLOAT
FLOAT UNSIGNED
FLOAT
DOUBLE
DOUBLE UNSIGNED
DOUBLE
CHAR
VARCHAR
TINYTEXT
MEDIUMTEXT
TEXT
LONGTEXT
JSON
STRING
DATEDATE
TIMETIME
DATETIME
TIMESTAMP
TIMESTAMP
TINYBLOB
MEDIUMBLOB
BLOB
LONGBLOB
BINARY
VARBINAR
BIT(n)
BYTES
GEOMETRY
UNKNOWN
尚未支持

数据源选项

名称类型是否必须默认值描述
urlString-JDBC连接的URL。示例: jdbc:mysql://localhost:3306:3306/test
driverString-用于连接远程数据源的jdbc类名, 如果使用MySQL,值为 com.mysql.cj.jdbc.Driver
userString-连接实例的用户名
passwordString-连接实例的密码
queryString-查询语句
connection_check_timeout_secInt30等待用于验证连接的数据库操作完成的时间(秒)
partition_columnString-用于并行处理的分区列,仅支持数字类型主键,且只能配置一个列。
partition_lower_boundBigDecimal-扫描的分区列最小值,如果未设置,SeaTunnel将查询数据库获取最小值。
partition_upper_boundBigDecimal-扫描的分区列最大值,如果未设置,SeaTunnel将查询数据库获取最大值。
partition_numInt任务并行度分区数,仅支持正整数,默认值为任务并行度。
fetch_sizeInt0对于返回大量对象的查询,您可以配置查询中使用的行取回大小以通过减少满足选择条件所需的数据库访问次数来提高性能。
零表示使用jdbc默认值。
propertiesMap-额外的连接配置参数,当properties和URL有相同的参数时,具体优先权由驱动实现决定。例如,在MySQL中,properties优先于URL。
table_pathInt0表的完整路径,您可以使用这个配置替代query。例如:
mysql: "testdb.table1"
oracle: "test_schema.table1"
sqlserver: "testdb.test_schema.table1"
postgresql: "testdb.test_schema.table1"
table_listArray0要读取的表列表,您可以使用这个配置替代table_path示例:[{ table_path = "testdb.table1"}, {table_path = "testdb.table2", query = "select * id, name from testdb.table2"}]
where_conditionString-所有表/查询的通用行过滤条件,必须以where开始。例如where id > 100
split.sizeInt8096表的分割大小(行数),读取表时会将表分割成多个分片。
split.even-distribution.factor.lower-boundDouble0.05分块键分布因子的下界。此因子用于确定表数据是否均匀分布。如果计算出的分布因子大于或等于此下界,则表块将被优化以均匀分布。否则,如果分布因子较小,则表将被视为分布不均,如果估计的分片数超过sample-sharding.threshold指定的值,则会使用基于抽样的分片策略。默认值为0.05。
split.even-distribution.factor.upper-boundDouble100分块键分布因子的上界。此因子用于确定表数据是否均匀分布。如果计算出的分布因子小于或等于此上界,则表块将被优化以均匀分布。否则,如果分布因子较大,则表将被视为分布不均,并且如果估计的分片数超过sample-sharding.threshold指定的值,则会使用基于抽样的分片策略。默认值为100.0。
split.sample-sharding.thresholdInt10000此配置指定触发基于抽样的分片策略的估计分片数阈值。当分布因子超出chunk-key.even-distribution.factor.upper-boundchunk-key.even-distribution.factor.lower-bound指定的范围,并且估计的分片数(计算为近似行数/块大小)超过此阈值时,将使用基于抽样的分片策略。这可以帮助更有效地处理大型数据集。默认值为1000个分片。
split.inverse-sampling.rateInt1000在基于抽样的分片策略中使用的抽样率的倒数。例如,如果此值设置为1000,意味着在抽样过程中应用了1/1000的抽样率。此选项提供了控制抽样粒度的灵活性,从而影响最终分片数。在处理非常大的数据集时尤其有用,此时可能更倾向于较低的抽样率。默认值为1000。
common-options-数据源插件通用参数,请参阅Source Common Options了解详情。

并行读取器

JDBC源连接器支持从表中并行读取数据。SeaTunnel将使用某些规则来分割表中的数据,这些数据将交给读取器进行读取。读取器的数量由parallelism选项决定。

分割键规则:

  1. 如果partition_column不为null,将使用它来计算分割。该列必须在支持分割的数据类型中。
  2. 如果partition_column为null,seatunnel将读取表的架构并获取主键和唯一索引。如果主键和唯一索引中有多于一个列,将使用第一个在支持分割的数据类型中的列来分割数据。例如,表有主键(nn guid, name varchar),因为guid不在支持分割的数据类型中,所以将使用列name来分割数据。

支持分割的数据类型:

  • 字符串
  • 数字(int, bigint, decimal, ...)
  • 日期

与分割相关的选项

split.size

一个分割中的行数,读取表时会将表分割成多个分割。

split.even-distribution.factor.lower-bound

不推荐使用

分块键分布因子的下界。此因子用于确定表数据是否均匀分布。如果计算出的分布因子大于或等于此下界,则表块将被优化以均匀分布。否则,如果分布因子较小,则表将被视为分布不均,并且如果估计的分片数超过sample-sharding.threshold指定的值,则会使用基于抽样的分片策略。默认值为0.05。

split.even-distribution.factor.upper-bound

不推荐使用

分块键分布因子的上界。此因子用于确定表数据是否均匀分布。如果计算出的分布因子小于或等于此上界,则表块将被优化以均匀分布。否则,如果分布因子较大,则表将被视为分布不均,并且如果估计的分片数超过sample-sharding.threshold指定的值,则会使用基于抽样的分片策略。默认值为100.0。

split.sample-sharding.threshold

此配置指定触发基于抽样的分片策略的估计分片数阈值。当分布因子超出chunk-key.even-distribution.factor.upper-boundchunk-key.even-distribution.factor.lower-bound指定的范围,并且估计的分片数(计算为近似行数/块大小)超过此阈值时,将使用基于抽样的分片策略。这可以帮助更有效地处理大型数据集。默认值为1000个分片。

split.inverse-sampling.rate

在基于抽样的分片策略中使用的抽样率的倒数。例如,如果此值设置为1000,意味着在抽样过程中应用了1/1000的抽样率。此选项提供了控制抽样粒度的灵活性,从而影响最终分片数。在处理非常大的数据集时尤其有用,此时可能更倾向于较低的抽样率。默认值为1000。

partition_column [string]

用于分割数据的列名。

partition_upper_bound [BigDecimal]

扫描的分区列最大值,如果未设置,SeaTunnel将查询数据库获取最大值。

partition_lower_bound [BigDecimal]

扫描的分区列最小值,如果未设置,SeaTunnel将查询数据库获取最小值。

partition_num [int]

不推荐使用,正确的做法是通过split.size控制分割数

我们需要将其分割成多少分割,只支持正整数。默认值是任务并行度。

小贴士

如果表不能分割(例如,表没有主键或唯一索引,并且未设置partition_column),它将以单一并发运行。

使用table_path替换query以读取单个表。如果需要读取多个表,请使用table_list

任务示例

此示例查询测试"数据库"中的type_bin 'table' 16数据,并以单一并行方式查询其所有字段。您还可以指定要查询的字段以最终输出到控制台。

定义运行时环境

env {
parallelism = 4
job.mode = "BATCH"
}
source{
Jdbc {
url = "jdbc:mysql://localhost:3306/test?serverTimezone=GMT%2b8&useUnicode=true&characterEncoding=UTF-8&rewriteBatchedStatements=true"
driver = "com.mysql.cj.jdbc.Driver"
connection_check_timeout_sec = 100
user = "root"
password = "123456"
query = "select * from type_bin limit 16"
}
}

transform {
# 如果您想了解更多关于如何配置seatunnel和查看transform插件完整列表的信息,
# 请访问 https://seatunnel.apache.org/docs/transform-v2/sql
}

sink {
Console {}
}

按主键或唯一索引并行

配置table_path将开启自动分割,您可以配置split.*来调整分割策略

env {
  parallelism = 4
  job.mode = "BATCH"
}
source {
    Jdbc {
        url = "jdbc:mysql://localhost/test?serverTimezone=GMT%2b8"
        driver = "com.mysql.cj.jdbc.Driver"
        connection_check_timeout_sec = 100
        user = "root"
        password = "123456"
        query = "select * from type_bin"
        partition_column = "id"
        split.size = 10000
        # Read start boundary
        #partition_lower_bound = ...
        # Read end boundary
        #partition_upper_bound = ...
    }
}

sink {
  Console {}
}

指定查询边界并行

指定查询数据的上下边界更为高效

env {
  parallelism = 4
  job.mode = "BATCH"
}
source {
    Jdbc {
        url = "jdbc:mysql://localhost/test?serverTimezone=GMT%2b8"
        driver = "com.mysql.cj.jdbc.Driver"
        connection_check_timeout_sec = 100
        user = "root"
        password = "123456"
        table_path = "testdb.table1"
        query = "select * from testdb.table1"
        split.size = 10000
    }
}

sink {
  Console {}
}

读取多个表

配置table_list将开启自动分割,您可以配置split.*来调整分割策略

env {
  job.mode = "BATCH"
  parallelism = 4
}
source {
  Jdbc {
    url = "jdbc:mysql://localhost/test?serverTimezone=GMT%2b8"
    driver = "com.mysql.cj.jdbc.Driver"
    connection_check_timeout_sec = 100
    user = "root"
    password = "123456"

    table_list = [
      {
        table_path = "testdb.table1"
      },
      {
        table_path = "testdb.table2"
        # 使用查询文件过滤行和列
        query = "select id, name from testdb.table2 where id > 100"
      }
    ]
    #where_condition= "where id > 100"
    #split.size = 8096
    #split.even-distribution.factor.upper-bound = 100
    #split.even-distribution.factor.lower-bound = 0.05
    #split.sample-sharding.threshold = 1000
    #split.inverse-sampling.rate = 1000
  }
}

sink {
  Console {}
}

多表读取

配置table_list将开启自动分割,您可以配置split.*来调整分割策略

env {
  job.mode = "BATCH"
  parallelism = 4
}
source {
  Jdbc {
    url = "jdbc:mysql://localhost/test?serverTimezone=GMT%2b8"
    driver = "com.mysql.cj.jdbc.Driver"
    connection_check_timeout_sec = 100
    user = "root"
    password = "123456"

    table_list = [
      {
        table_path = "testdb.table1"
      },
      {
        table_path = "testdb.table2"
        # 使用查询文件过滤行和列
        query = "select id, name from testdb.table2 where id > 100"
      }
    ]
    #where_condition= "where id > 100"
    #split.size = 8096
    #split.even-distribution.factor.upper-bound = 100
    #split.even-distribution.factor.lower-bound = 0.05
    #split.sample-sharding.threshold = 1000
    #split.inverse-sampling.rate = 1000
  }
}

sink {
  Console {}
}

以上是视频中出现的代码及文档说明,大家可以结合视频中的讲解进行实操,最后如果您对录制感兴趣,请继续往下阅读

如何参与Demo录制?

提交您的Demo

  1. 准备您的演示:选择一个您熟悉的连接器,准备一个5到10分钟的视频演示。确保视频清晰展示了如何配置和使用该连接器,解决了什么问题,以及可能的最佳实践。
  2. 提交视频:请添加社区同学微信18819063834上传您的视频和相关描述。

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

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

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

相关文章

C++中的数制转换工具

一、引言 在编程和日常计算中&#xff0c;我们经常需要在不同的数制之间进行转换。二进制、十进制和十六进制是最常用的数制。二进制是计算机内部处理数据的基础&#xff0c;十进制是我们日常生活中最常用的数制&#xff0c;而十六进制则在编程和硬件相关领域中广泛使用。 二…

不要摆摊,不要开早餐店,原因如下

关注卢松松&#xff0c;会经常给你分享一些我的经验和观点。 我最近开通了视频号会员专区嘛&#xff0c;专区有个问答功能可以提问&#xff0c;有个会员问了我问题&#xff0c;其中一条问答分享给大家&#xff1a; 松哥&#xff0c;突然想去兼职&#xff0c;早上卖点杂粮煎饼果…

小塔 | 时尚领域RFID应用,别人早你一步!

优衣库&#xff0c;作为知名服装品牌零售商&#xff0c;近年来在数字化转型的道路上取得了显著的成果。其中&#xff0c;RFID技术的应用成为了优衣库提升运营效率、优化客户体验以及实现精准营销的重要工具。 RFID助力时尚门店品牌升级 优衣库深知RFID技术的潜力&#xff0c;将…

web--跨域,cors,jsonp,域名接管劫持

同源策略 可以放在csrf cosp 解决同源策略 它会将会从xiaodi这个网站中去获取资源&#xff0c;然后发送给localhost这个网站 就获取到了资源 jsonp 就是这个网站的回调信息有个人的数据 就看callback有没有回调信息 域名接管 当右边两个域名过期&#xff0c;就可以注册它的域名…

Git 安装及配置教程(Windows)【安装】

文章目录 一、 下载1. 官网下载2. 其它渠道 二、 安装三、 配置四、 更新 软件 / 环境安装及配置目录 一、 下载 1. 官网下载 安装地址&#xff1a;https://git-scm.com/download 2. 其它渠道 &#xff08;1&#xff09;百度网盘&#xff08;2.44.0 版本&#xff09; 链接…

使用FPGA实现逐级进位加法器

介绍 逐级进位加法器就是将上一位的输出作为下一位的进位输入&#xff0c;依次这样相加。下面以一个8位逐级进位加法器给大家展示。 我增加了电路结构&#xff0c;应该很容易理解吧。 下面我也列举了一位加法器&#xff0c;可以看下。 电路结构 设计文件 1位加法器 librar…

【Python爬虫】爬取淘宝商品数据——新手教程

大数据时代&#xff0c; 数据收集不仅是科学研究的基石&#xff0c; 更是企业决策的关键。 然而&#xff0c;如何高效地收集数据 成了摆在我们面前的一项重要任务。 本文将为你揭示&#xff0c; 一系列实时数据采集方法&#xff0c; 助你在信息洪流中&#xff0c; 找到…

SpringCloud基础 Consul的引入

前言 首先是为什么引入consul这个组件 我们知道微服务分为很多个模块,这里模块中相互调用,我使用硬编码的模式是不好的 比如微服务模块需要更新的时候,我们使用硬编码的方式可能需要修改很多个地方 但是使用consul之后,就引入了注册中心,我们只需要将对应的服务注册为节点 这样…

重生奇迹MU召唤术师攻略(重生奇迹MU召唤技能)

1、召唤术师&#xff0c;重生奇迹MU的强力职业之一。跟格斗家一样&#xff0c;需要RMB购买资格证才能够使用的一个职业&#xff0c;召唤术师可以说是对于玩家将职业玩法的一种总结性职业&#xff0c;这个职业虽然叫做召唤术师&#xff0c;但是整个重生奇迹MU里唯一能够召唤宝宝…

SpringBoot3 + Kotlin + mybatis-plus + Swagger3后端开发样例

前言&#xff1a; Kotlin 是一种在 JVM&#xff08;Java 虚拟机&#xff09;、Android 和浏览器端运行的静态类型编程语言。以下是关于 Kotlin 的总结介绍&#xff1a; 1、语言特性&#xff1a; 简洁性&#xff1a;Kotlin 旨在提供简洁且安全的代码&#xff0c;同时保持与 Jav…

解决“ImportError: DLL load failed while importing _rust: 找不到指定的程序的问题

运行 scrapy startproject wikiSpider 报错&#xff1a;ImportError: DLL load failed while importing _rust: 找不到指定的程序。 经过尝试 可以更换Python解释器版本来解决 1、点击crtlalts打开设置 点击项目>解释器 选择3.11解释器 &#xff08;我原来报错用的3.9的解…

C++11(第一篇)【C/C++复习版】

目录 1、统一的列表初始化 2、所有容器新增initializer_list构造 3、auto、decltype和typeid 4、nullptr 5、 范围for 6、STL中的变化 array&#xff08;新容器&#xff09; forward_list&#xff08;新容器&#xff09; cbegin、cend、crbegin、crend&#xff08;新方法…

WEB网站服务器安全漏洞扫描环境搭建及漏洞工具扫描

一、适用环境 1、企业自建有门户网站&#xff1b; 2、使用Struts框架的WEB网站&#xff1b; 3、网站服务器涉及有数据库之类的项目&#xff0c;如&#xff1a;微信登录、手机登录、充值、收费等。 4、使用安卓版、苹果版、电脑版结合的缴费类网站平台。 5、方便但需提高安全性…

linux-centos修改时区时间

修改时区为北京时间 先输入tzselect&#xff0c;输入5&#xff0c;再输入9&#xff0c;再输入1&#xff0c;最后再输入1就行了 修改系统时间和硬件时间 查看当前时间 命令date修改系统时间 命令date -s "2024-04-21 18:30:30"查看硬件时间 命令hwclock --show修改…

AIGC Chat GPT 用思维导图总结,数据分析所需要掌握的Excel知识

你还不会制作思维导图吗&#xff1f; 现在已经可以零门槛一键生成&#xff0c;只需跟AI说一句话&#xff0c;就能完成&#xff01;&#xff01;&#xff01; 生成一个思维导图&#xff0c;主题是数据分析师需要掌握的Excel知识&#xff0c;在新窗口生成思念导图。 AIGC ChatG…

ONES 功能上新|ONES Wiki 新功能一览

支持在 ONES Wiki 页面中使用分栏进行横向排版&#xff0c;丰富排版方式&#xff0c;帮助用户以更丰富的版式展示内容。 应用场景&#xff1a; 页面的布局对内容的阅读有很大的影响。当页面中有图文混排的需求时&#xff0c;可以通过分栏来组织页面结构&#xff0c;以更清晰、更…

倾囊相授,ChatGPT干货技巧全在这里!如果没有这个方法我不可能学好ChatGPT

ChatGPT虽然已经问世一年多&#xff0c;但不少朋友还处于刚接触的阶段。于是&#xff0c;我们特别梳理了一些常见问题&#xff0c;尝试着用通俗的语言解释清楚这些内容。 1. ChatGPT的官方网址 https://www.chatgpt.com 你只要Google搜索能打开&#xff0c;这个网址肯定能打开。…

2024年成都市“蓉贝”软件人才年度评估及资金支持申报对象内容、材料要求

一、申报对象 经2023年评估合格的第一批&#xff08;2019年评聘&#xff09;、第二批&#xff08;2020年评聘&#xff09;、第三批&#xff08;2021年评聘&#xff09;“蓉贝”软件人才&#xff0c;2022年评聘的第四批“蓉贝”软件人才。 二、评估内容 &#xff08;一&#…

java和python刷题的一些语法规则总结(未完成)

语法总结 Java篇1、代码补全2、编程题中常用头文件3、编程题常用的内置方法4、模版 Python篇1、2、编程题中常用的头文件3、编程题中常用的内置方法4、伪代码模版 去哪练习&#xff1f; 1、LeetCode上有个面试模拟 2、牛客公司真题&#xff08;ACM模式&#xff09; ⚠️ 笔试均…

AI-数学-高中-44导数的运算法则

原作者视频&#xff1a;【导数】【一数辞典】3导数的运算法则&#xff08;略难&#xff09;_哔哩哔哩_bilibili 三种求导表达方式一样的&#xff0c;中间的比较常用&#xff1a; 链式法则&#xff1a;从外向内&#xff1a;
最新文章