属性 Name:Extract,使用 ExtractDataSource 插件作为数据源
ExtractDataSource.Paramters 参数名 说明DbProvider 数据驱动提供者:MySql,MariaDB,PostgreSql,SqlServer,Oracle,SQLite
ConnectionString 连接字符串
Query 查询命令,需要抽取的数据。默认会自动注入三个参数 LastMaxId,LastMaxModifyTime,LastQueryTime 作为查询条件
PKColumn 主键列名
AutoIncrement 是否为自增主键,true 自动计算抽取的最大主键值(MaxId)
ModifyTime 最近一次修改时间列名,设置后自定计算抽取的最大修改时间列(MaxModifyTime)
Build.Load 参数说明
属性 Type:Load,使用 LoadBuildTask 插件作为构建任务
Build.Load.Paramters 参数名 说明DbProvider 数据驱动提供者:MySql,MariaDB,PostgreSql,SqlServer,Oracle,SQLite
ConnectionString 连接字符串
Table 目标表名
PreCommand 执行批量插入任务之前执行的命令
PostCommand 执行批量插入任务之后执行的命令
ColumnMapping 列映射
同步策略 LastMaxId
LastMaxId 即上一次抽取的数据最大Id值(第一次抽取时LastMaxId为-1),该模式使用于数据插入后不再变更的数据表。
LastMaxModifyTimeLastMaxModifyTime 即上一次抽取的数据最大ModifyTime值(第一次抽取时LastMaxModifyTime为1970-01-01 08:00:00),适用于插入数据后还会变更的数据表。
并发任务同步对 Id 取模,分拆不同任务,同时并发执行
大数据量同步使用 Top/Limit 限制数据抽取数量,分多次同步执行完成整个数据同步。
ETL_Task 任务监控 性能监控 运行环境源抽取库:Windows Server 2012 , 8 vCPU 16 GB + SSD + SqlServer-2014
目标分析库:CentOS-7 , 8 vCPU 16 GB + SSD + PostgreSql-11 + SmartCode
ETL_Task.Extract以下是数据抽取性能,抽取数量为 1434678,耗时 41267 毫秒。
{ "MaxId": 1755822, "PKColumn": "Id", "QuerySize": 1434678, "QueryTime": "2018-11-01T11:31:53.6191084+08:00", "QueryCommand": { "Taken": 41267, "Command": "Select * From T_ProductSearchLog With(NoLock) Where Id>@LastMaxId", "Paramters": { "LastMaxId": -1, "LastQueryTime": "1970-01-01T08:00:00" } } } ETL_Task.Load以下是数据加载性能,批量插入数据量为 1434678,耗时 21817 毫秒,平均每秒插入 65759.6 条数据。
{ "Size": 1434678, "Table": "t_product_search_log", "Taken": 21817, "PreCommand": null, "PostCommand": null }目前 SmartCode.ETL 已经落地到我们的生产环境了(11-01上线截至目前执行了 26069 次同步任务,暂无error日志抛出)
PS: 虽然 SmartCode.ETL 只花了周末俩天时间完成扩展,但已经可以满足我们至少90%的应用场景。这足以见得 SmartCode 扩展能力是多么令人意外了。当然SmartCode的其他能力还得后续等各位一起发掘!!!