本文为您介绍如何创建实时计算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可以为多列。
- 必须声明metric、timestamp和value,且字段名称、字段顺序和字段数据类型必须和TSDB保持完全一致。
- 参数设置详情请参见Write data。
WITH参数
参数 | 说明 | 备注 |
---|---|---|
type | 结果表类型 | 固定值为hitsdb 。
|
host | IP或VIP域名 | 填写注册实例的Host,详情请参见Connect to the instance。 |
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类型。