SqlServer Lookup
一、介绍
SqlServer维表,支持全量和异步方式。
全量缓存:将维表数据全部加载到内存中,建议数据量不大使用。
异步缓存:使用异步方式查询数据,并将查询到的数据使用lru缓存到内存中,建议数据量大使用。
二、支持版本
Microsoft SQL Server 2012及以上
三、插件名称
SQL | sqlserver-x |
---|
四、参数说明
- connector
- 描述:sqlserver-x
- 必选:是
- 参数类型:String
- 默认值:无
- url
- 描述:使用开源的jtds驱动连接 而非Microsoft的官方驱动
jdbcUrl参考文档:jtds驱动官方文档 - 必选:是
- 字段类型:String
- 默认值:无
- 描述:使用开源的jtds驱动连接 而非Microsoft的官方驱动
- table-name
- 描述:表名
- 必选:是
- 参数类型:String
- 默认值:无:
- schema-name
- 描述:schema
- 必选:是
- 字段类型:String
- 默认值:无
- username
- 描述:username
- 必选:是
- 参数类型:String
- 默认值:无
- password
- 描述:password
- 必选:是
- 参数类型:String
- 默认值:无
- lookup.cache-type
- 描述:维表缓存类型(NONE、LRU、ALL),默认LRU
- 必选:否
- 参数类型:string
- 默认值:LRU
- lookup.cache-period
- 描述:ALL维表每隔多久加载一次数据,默认3600000毫秒(一个小时)
- 必选:否
- 参数类型:string
- 默认值:3600000
- lookup.cache.max-rows
- 描述:lru维表缓存数据的条数,默认10000条
- 必选:否
- 参数类型:string
- 默认值:10000
- lookup.cache.ttl
- 描述:lru维表缓存数据的时间,默认60000毫秒(一分钟)
- 必选:否
- 参数类型:string
- 默认值:60000
lookup.max-retries
- 描述:LRU维表查找数据库失败时的最大重试次数
- 必选:否
- 参数类型:int
- 默认值:3
lookup.error-limit
- 描述:LRU维表发生超时、ALL Cache维表发送数据失败次数的容忍值
- 必选:否
- 参数类型:int
- 默认值:0
lookup.fetch-size
- 描述:ALL维表每次从数据库加载的条数,默认1000条
- 必选:否
- 参数类型:string
- 默认值:1000
vertx.worker-pool-size
- 描述:异步线程池大小
- 必选:否
- 参数类型:int
- 默认值:5
lookup.parallelism
- 描述:维表并行度
- 必选:否
- 参数类型:string
- 默认值:无
五、数据类型
支持 | BIT、INT、SMALLINT、TINYINT、BIGINT、INT IDENTITY、REAL、FLOAT、DECIMAL、NUMERIC、CHAR、VARCHAR、VARCHAR(MAX)、TEXT、XML、NCHAR、NVARCHAR、NVARCHAR(MAX)、NTEXT、TIME、DATE、DATETIME、DATETIME2、SMALLDATETIME、DATETIMEOFFSET、TIMESTAMP、BINARY、VARBINARY、IMAGE、MONEY、SMALLMONEY、UNIQUEIDENTIFIER |
---|---|
暂不支持 | CURSOR、ROWVERSION、HIERARCHYID、SQL_VARIANT、SPATIAL GEOMETRY TYPE、SPATIAL GEOGRAPHY TYPE、TABLE |
六、脚本示例
CREATE TABLE source
(
id bigint,
col_bit BOOLEAN,
col_tinyint tinyint,
col_smallint smallint,
col_int int,
col_real float,
col_float double,
col_decimal decimal(10, 3),
col_numric decimal(10, 3),
col_char char(10),
col_varchar varchar(255),
col_varcharmax string,
col_date date,
col_time string,
col_timestamp bytes,
col_varbinary varbinary,
PROCTIME AS PROCTIME()
)with(
'connector'='sqlserver-x',
'username'='username',
'password'='password',
'url' = 'jdbc:jtds:sqlserver://127.0.0.1:1433;databaseName=db_test;useLOBs=false',
'schema-name'='schema',
'table-name'='table'
);
CREATE TABLE side
(
id bigint,
col_bit BOOLEAN,
col_tinyint tinyint,
col_smallint smallint,
col_int int,
col_real float,
col_float double,
col_decimal decimal(10, 3),
col_numric decimal(10, 3),
col_char char(10),
col_varchar varchar(255),
col_varcharmax string,
col_date date,
col_time string,
col_timestamp bytes,
col_varbinary varbinary,
PRIMARY KEY (id) NOT ENFORCED
)with(
'connector'='sqlserver-x',
'username'='username',
'password'='password',
'url' = 'jdbc:jtds:sqlserver://127.0.0.1:1433;databaseName=db_test;useLOBs=false',
'schema-name'='schema',
'table-name'='table',
'druid.validation-query'='select 1',
'lookup.cache-type' = 'lru'
);
CREATE TABLE sink
(
id bigint,
col_bit BOOLEAN,
col_tinyint tinyint,
col_smallint smallint,
col_int int,
col_real float,
col_float double,
col_decimal decimal(10, 3),
col_numric decimal(10, 3),
col_char char(10),
col_varchar varchar(255),
col_varcharmax string,
col_date date,
col_time string,
col_varbinary varbinary,
PROCTIME AS PROCTIME()
)with(
'connector'='sqlserver-x',
'username'='username',
'password'='password',
'url' = 'jdbc:jtds:sqlserver://127.0.0.1:1433;databaseName=db_test;useLOBs=false',
'schema-name'='schema',
'table-name'='table',
'sink.buffer-flush.max-rows' = '1',
'sink.all-replace' = 'true'
);
create
TEMPORARY view view_out
as
select u.id
, u.col_bit
, u.col_tinyint
, u.col_smallint
, u.col_int
, u.col_real
, u.col_float
, u.col_decimal
, u.col_numric
, s.col_char
, s.col_varchar
, s.col_varcharmax
, s.col_date
, s.col_time
, u.col_varchar
from source u
left join side FOR SYSTEM_TIME AS OF u.PROCTIME AS s
on u.id = s.id;
insert into sink
select *
from view_out;