本文为您介绍如何创建实时计算Flink版时间序列数据库(TSDB)结果表以及创建结果表时使用的WITH参数。

注意
  • 本文仅适用于Blink 2.0及以上版本。
  • 实时计算Flink版引用时间序列数据库(TSDB)结果表需要配置数据存储白名单,详情请参见数据存储白名单配置

什么是时间序列数据库(TSDB)

阿里云时间序列数据库(Time Series Database,简称TSDB)是一种集时序数据高效读写、压缩存储、实时计算能力为一体的数据库服务,可以广泛应用于物联网和互联网领域,实现对设备及业务服务的实时监控,实时预测告警。

DDL定义

实时计算Flink版支持使用TSDB作为结果输出,示例代码如下。
CREATE TABLE stream_test_hitsdb (
    metric      VARCHAR,   
    `timestamp` INTEGER,
    `value`     DOUBLE,
    tagk1       VARCHAR,     
    tagk2       VARCHAR,
    tagk3       VARCHAR
) WITH (
    type='hitsdb',
    host='<yourHostName>',
    virtualDomainSwitch = 'false',
    httpConnectionPool = '20',
    batchPutSize = '1000'
);
建表默认格式:
  • 第0列:metric(VARCHAR)。
  • 第1列:timestamp(INTEGER),单位为秒。
  • 第2列:value(DOUBLE)。
  • 第3~N列:TagKey,即时间序列数据库中的fieldName。
说明
  • tag可以为多列。
  • 必须声明metrictimestampvalue,且字段名称、字段顺序和字段数据类型必须和TSDB保持完全一致。
  • 参数设置详情请参见TSDB建表规范

WITH参数

参数 说明 备注
type 结果表类型 固定值为hitsdb
host IP或VIP域名 填写注册实例的Host,详情请参见连接实例
port 端口 默认值为8242。
virtualDomainSwitch 是否使用VIPServer 默认值为false,如果需要使用VIPServer,则virtualDomainSwitch设置为true。
httpConnectionPool HTTP连接池 默认值为10。
httpCompress 使用GZIP压缩 默认值为false,即不压缩。
httpConnectTimeout HTTP连接超时时间 默认值为0。
ioThreadCount IO线程数 默认值为1。
batchPutBufferSize 缓冲区大小 默认值为10000。
batchPutRetryCount 写入重试次数 默认值为3。
batchPutSize 每次提交数据量 默认每次提交500个数据点。
batchPutTimeLimit 缓冲区等待时间 默认值为200,单位为毫秒。
batchPutConsumerThreadCount 序列化线程数 默认值为1。

Blink写入TSDB模型

Blink 3.2 及以上版本支持6种Blink写入TSDB的模型,分别是:
  • 支持单值无tag数据点的写入,其schema格式如下所示,包括3个字段,这3个字段名称不可使用其他名称代替。
    metric,timestamp,value
  • 支持单值带tag数据点的写入,其schema格式如下所示,除metric、timestamp和value关键词名字必须保持一致外,tag的名称可以任意指定。
    metric,timestamp,value,tagKey1,....,tagKeyN
  • 支持单值带不确定tag个数的数据点的写入,其schema格式如下所示,包括4个字段,这4个字段名称不可使用其他名称代替。
    metric,timestamp,value,tags
    其中,tags的内容为形如如下格式的JSON字符串,便于绕过Blink table schema需要固定tag个数的限制。
    {"tagKey1":"tagValue1","tagKey2":"tagValue2",……,"tagKeyN":"tagValueN"}
  • 支持多值无tag数据点的写入,其schema格式如下所示。
    metric,timestamp,field_name1,field_name2,……,field_nameN
    其中metric和timestamp字段名称不可使用其他名称代替。对于多值的fields,由于需要区分tag和field,同时兼容之前的单值写入,这里约定需要给每个field加上固定前缀field,自动识别field字段。例如,对于一个field名称field_name1,在写入TSDB时,会自动将前缀field_去掉,只保留name1,即对于上面的schema,实际写入TSDB的格式如下,name1和name2是多值field的名称。
    metric,timestamp,name1,name2,……,nameN
  • 支持多值带tag数据点的写入,其schema格式如下所示,除metric和timestamp关键词名字必须保持一致外,tag的名称可以任意指定。
    metric,timestamp,tagKey1,....,tagKeyN,field_name1,field_name2,……,field_nameN
  • 支持单值带不确定tag个数的数据点的写入,其schema格式如下所示。
    metric,timestamp,tags,field_name1,field_name2,……,field_nameN
    其中,tags的内容类似如下JSON字符串,便于绕过Blink table schema需要固定tag个数的限制。
    {"tagKey1":"tagValue1","tagKey2":"tagValue2",……,"tagKeyN":"tagValueN"}

常见问题

Q:为什么Failover中会报错:LONG类型不能转换成INT类型?

A:Blink 2.2.5以下版本仅支持INT类型。Blink 2.2.5及以上版本支持BIGINT类型。