Skip to main content

SqlServer Lookup

一、介绍

SqlServer维表,支持全量和异步方式。
全量缓存:将维表数据全部加载到内存中,建议数据量不大使用。
异步缓存:使用异步方式查询数据,并将查询到的数据使用lru缓存到内存中,建议数据量大使用。

二、支持版本

Microsoft SQL Server 2012及以上

三、插件名称

SQLsqlserver-x

四、参数说明

  • connector
    • 描述:sqlserver-x
    • 必选:是
    • 参数类型:String
    • 默认值:无


  • url
    • 描述:使用开源的jtds驱动连接 而非Microsoft的官方驱动
      jdbcUrl参考文档:jtds驱动官方文档
    • 必选:是
    • 字段类型:String
    • 默认值:无

  • 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;