554
魔兽
SQLServerWriter__Writer插件_使用手册_数据集成-阿里云
1 快速介绍
SQLServerWriter 插件实现了写入数据到 SQLServer 主库的目的表的功能。在底层实现上, SQLServerReader 通过 JDBC 连接远程 SQLServer 数据库,并执行相应的 insert into ...的 sql 语句将数据写入 SQLServer,内部会分批次提交入库。
SQLServerWriter 面向ETL开发工程师,他们使用 SQLServerWriter 从数仓导入数据到 SQLServer。同时 SQLServerWriter 亦可以作为数据迁移工具为DBA等用户提供服务。
2 实现原理
SQLServerWriter 通过 CDP 框架获取 Reader 生成的协议数据,生成insert into...
(当主键/唯一性索引冲突时会写不进去冲突的行),性能考虑,采用了 PreparedStatement + Batch
,并且设置了:rewriteBatchedStatements=true
,将数据缓冲到线程上下文 Buffer 中,当 Buffer 累计到预定阈值时,才发起写入请求。
注意:目的表所在数据库必须是主库才能写入数据;整个任务至少需要具备 insert into...的权限,是否需要其他权限,取决于你任务配置中在 preSql 和 postSql 中指定的语句。
3 功能说明
3.1 配置样例
- 使用RDS的Instance配置一个写入SQLServer的作业。
{
"type": "job",
"traceId": "您可以在这里填写您作业的追踪ID,建议使用业务名+您的作业ID",
"version": "1.0",
"configuration": {
"reader": {
"plugin": "SQLServer",
"parameter": {
"instanceName": "rds.aliyun.com",
"username": "username",
"password": "password",
"table": "table",
"column": [
"*"
],
"where": "1 = 1"
}
},
"writer": {
"plugin": "SQLServer",
"parameter": {
"instanceName": "instanceName",
"database": "database",
"username": "username",
"password": "password",
"table": "table",
"column": [
"*"
],
"preSql": [
"delete from XXX;"
]
}
}
}
}
- 使用JDBC配置一个向RDS写入数据的作业
{
"type": "job",
"traceId": "您可以在这里填写您作业的追踪ID,建议使用业务名+您的作业ID",
"version": "1.0",
"configuration": {
"reader": {
"plugin": "SQLServer",
"parameter": {
"instanceName": "rds.aliyun.com",
"username": "username",
"password": "password",
"table": "table",
"column": [
"*"
],
"where": "1 = 1"
}
},
"writer": {
"plugin": "SQLServer",
"parameter": {
"jdbcUrl": "jdbc:SQLServer://ip:port;DatabaseName=%s",
"username": "username",
"password": "password",
"table": "table",
"column": [
"*"
],
"preSql": [
"delete from XXX;"
]
}
}
}
}
3.2 参数说明
instanceName
描述: 阿里云RDS实例名称(Instance名称)。用户使用该配置指定RDS的Instance名称,CDP将翻译为底层执行的jdbc连接串连接。
instanceName指定的是RDS实例,类似SQLServer实例,需要和database配合使用。
必选:是
默认值:无
jdbcUrl
描述:对于CDP部分私有云场景,数据库迁移场景等,其本身数据源是普通SQLServer数据库不是RDS,对于这类场景,用户可以指定jdbc信息直连。
jdbcUrl和instanceName/database两类信息概念上是等同的,因此只能配置其一。如果两者均配置,CDP默认将使用jdbc信息。
必选:是
默认值:无
database
- 描述: 阿里云RDS数据库名称。
- 必选:是
- 默认值:无
username
- 描述:数据源的用户名
- 必选:是
- 默认值:无
password
- 描述:数据源指定用户名的密码
- 必选:是
- 默认值:无
table
- 描述:所选取的需要同步的表。
- 必选:是
- 默认值:无
column
- 描述:所配置的表中需要同步的列名集合。以英文逗号(,)进行分隔。
我们强烈不推荐用户使用默认列情况
- 必选:是
- 默认值:无
- 描述:所配置的表中需要同步的列名集合。以英文逗号(,)进行分隔。
preSql
- 描述:执行数据同步任务之前率先执行的sql语句,目前只允许执行一条SQL语句,例如清除旧数据。
- 必选:否
- 默认值:无
postSql
- 描述:执行数据同步任务之后执行的sql语句,目前只允许执行一条SQL语句,例如加上某一个时间戳。
- 必选:否
- 默认值:无
batchSize
- 描述:一次性批量提交的记录数大小,该值可以极大减少CDP与SQLServer的网络交互次数,并提升整体吞吐量。但是该值设置过大可能会造成CDP运行进程OOM情况。
- 必选:否
- 默认值:512
3.3 类型转换
目前 SQLServerWriter支持大部分 SQLServer类型,但也存在部分没有支持的情况,请注意检查你的类型。
下面列出 SQLServerWriter针对 SQLServer类型转换列表:
CDP 内部类型 | SQLServer 数据类型 |
---|---|
Long | bigint, int, smallint, tinyint |
Double | float, decimal, real, numeric |
String | char,nchar,ntext,nvarchar,text,varchar,nvarchar(MAX),varchar(MAX) |
Date | date, datetime, time |
Boolean | bit |
Bytes | binary,varbinary,varbinary(MAX),timestamp |
请注意:
- 除上述罗列字段类型外,其他类型均不支持。
- timestamp类型作为二进制类型。
4 FAQ
Q: SQLServerWriter 执行 postSql 语句报错,那么数据导入到目标数据库了吗?
A: CDP 导入过程存在三块逻辑,pre 操作、导入操作、post 操作,其中任意一环报错,CDP 作业报错。由于 CDP 不能保证在同一个事务完成上述几个操作,因此有可能数据已经落入到目标端。
Q: 按照上述说法,那么有部分脏数据导入数据库,如果影响到线上数据库怎么办?
A: 目前有两种解法,第一种配置 pre 语句,该 sql 可以清理当天导入数据, CDP 每次导入时候可以把上次清理干净并导入完整数据。第二种,向临时表导入数据,完成后再 rename 到线上表。
Q: 上面第二种方法可以避免对线上数据造成影响,那我具体怎样操作?
A: 可以配置临时表导入
最后更新:2016-11-23 16:03:59
上一篇:
MySQLWriter__Writer插件_使用手册_数据集成-阿里云
下一篇:
PostgreSQLWriter__Writer插件_使用手册_数据集成-阿里云
apache日志__常见日志格式_用户指南_日志服务-阿里云
客户端及连接池__用户指南_云数据库 PetaData-阿里云
阿里云总裁胡晓明:帮助企业完成技术创新,做有温度的阿里云
查询字节缓存命中率__资源监控接口_API 手册_CDN-阿里云
CreateRules__转发规则相关API_API 参考_负载均衡-阿里云
创建队列__队列操作_快速入门_消息服务-阿里云
修改共享带宽包带宽__NAT网关相关接口_API 参考_云服务器 ECS-阿里云
免费版和高级版区别__产品简介_数据管理-阿里云
ListPolicyVersions__授权策略管理接口_RAM API文档_访问控制-阿里云
Open API 简介__Open API 参考_企业级分布式应用服务 EDAS-阿里云
相关内容
常见错误说明__附录_大数据计算服务-阿里云
发送短信接口__API使用手册_短信服务-阿里云
接口文档__Android_安全组件教程_移动安全-阿里云
运营商错误码(联通)__常见问题_短信服务-阿里云
设置短信模板__使用手册_短信服务-阿里云
OSS 权限问题及排查__常见错误及排除_最佳实践_对象存储 OSS-阿里云
消息通知__操作指南_批量计算-阿里云
设备端快速接入(MQTT)__快速开始_阿里云物联网套件-阿里云
查询API调用流量数据__API管理相关接口_API_API 网关-阿里云
使用STS访问__JavaScript-SDK_SDK 参考_对象存储 OSS-阿里云