Apache IoTDB 系列教程-7:时序数据文件格式 TsFile

news/2024/11/2 7:20:39/

75ae1faefbe1d60e5b07bbb7e5617191.png

在大数据生态中有很多文件格式,像 Parquet,ORC,Avro 等等,都是针对嵌套数据设计的文件格式。这些文件格式普遍具有预先定义的schema,数据以行式写入,按属性组织,列式存储。但是这些文件格式一般不能很好地满足时间序列数据的管理需求。比如,在一些时间序列数据的场景中,一般各个序列是独立写入的,时间戳并不对齐;查询结果也需要按照时间戳排序。TsFile(Time series File)就是我们为时序数据场景设计的文件格式。今天主要介绍用法,主要针对 0.10 版本。

正文 2587 字,预计阅读时间 7 分钟。

1、使用场景

文件格式由于比较轻量级,适合在边缘端当做一个数据压缩包使用,这个边缘端可以是设备内部,也可以是工控机、工厂层级。设备上生成的数据可以随时持久化到文件中进行存储。这里说的设备可能一台风机,上边会有多个测点,比如风速传感器、温度传感器等。每个传感器采集的数据就是一个时间序列。联想的IoT平台自2017年就开始使用TsFile存储时序数据。

因此,TsFile 的目标场景是管理一个或多个设备的时序数据。

设备-测点模型

设备(DeviceId):类似表的概念。

测点(MeasurementId):一个设备可以有多个测点,类似表中的列的概念。

时间序列路径(Path):可以通过设备和测点定义 Path(设备Id,测点Id)。

测点描述信息(MeasurementSchema):每个时间序列都对应一个描述信息,包括数据类型、编码方式、压缩方式。

每个时间序列都有两列:时间列、值列。

最近喜欢画图,来画一张,基本就是这样的,不同设备可以有不同的测点。

257a4076f13fd82ffdf75b2037221e26.png

2、注册元数据

使用 TsFile,第一步就是注册元数据。

2.1 注册时间序列:Path+MeasurementSchema

可以通过这种方式把每个时间序列都注册进去。

注册时间序列需要提供一个 Path 和一个 MeasurementSchema 

String path = "test.tsfile";
File f = FSFactoryProducer.getFSFactory().getFile(path);
TsFileWriter tsFileWriter = new TsFileWriter(f);
// add measurements into file schema
tsFileWriter.registerTimeseries(new Path("device_1", "measurement_1"),new MeasurementSchema("measurement_1", TSDataType.INT64, TSEncoding.RLE));

在 0.10 以前,所有设备都共享一个点表,同名 Measurement 的 schema 也需要一样(这就是IoTDB里一个存储组下同名测点类型需要一样的限制的来源)。在 0.10 以后,每个时间序列做到了真正的独立,互不干扰。

2.2 按模板注册设备:设备模板+设备

上面这样一条一条注册比较麻烦,因此提供了一个设备模板的功能。每个模板定义了一组 MeasurementSchema,比如有10个测点,当一个设备关联到了这个模板上,就自动注册出了 10 个序列。

首先生成设备模板,然后注册模板。

Map<String, MeasurementSchema> template = new HashMap<>();
template.put("measurement_1", new MeasurementSchema("measurement_1", TSDataType.INT64, TSEncoding.RLE));
template.put("measurement_2", new MeasurementSchema("measurement_2", TSDataType.DOUBLE, TSEncoding.GORILLA));
tsFileWriter.registerTemplate("template_1", template);

接下来注册设备,按模板名关联到模板上:

tsFileWriter.registerDevice("device_1", "template_1");
tsFileWriter.registerDevice("device_2", "template_1");

这样,我就注册了 2 个设备,每个设备都有 2 个测点。

2.3 注册一个模板,实时写入数据

这个是高级简化版。当我们只注册了一个设备模板时,可以不注册设备,直接写入数据。写入流程中如果发现这个设备写入的数据没有注册,会直接到模板里找同名的 MeasurementSchema 进行注册。这也是继承了 0.9 以前版本的优良传统(0.9以前的版本,TsFile 只能注册一个模板,然后就可以写数据了)。

写数据

TsFile 的数据写入有一个限制,每列都需要按照时间递增写入,否则不保证正确性。

2.4 按设备写入一行数据:TSRecord

一个 TSRecord 是一个设备,一个时间戳,多个测点的值。类似一个表的一行数据。

2.5 按设备写入一批数据:Tablet

哈哈,又看到了 Tablet,对,这个结构是贯穿 TsFile 和 IoTDB Session 的一个结构。表示一个设备,多个时间戳的多个测点的值,类似一个子表。这个子表不能有空值。

同样,这种写入接口速度快,可以达到每秒千万点写入速度。

读数据

查询的接口接收一批路径,一个表达式(可以进行时间过滤和值过滤),其实就对应了 select  和 where 两个子句。

在查询时候,TsFile 的默认表结构是宽表,time, d1.m1, d1.m2, d2.m1, d2.m2。这个结构默认是把给定的查询 Path 按 Time 做对齐,并且进行条件过滤的。

资料

示例代码:

https://github.com/apache/incubator-iotdb/blob/master/example/tsfile/

文档:

http://iotdb.apache.org/zh/UserGuide/V0.10.x/Client/Programming%20-%20TsFile%20API.html

总结

今天介绍了时间序列文件格式 TsFile 的数据模型,元数据注册,写入和读取过程。就到这啦。大家来点 Star 吧!

https://github.com/apache/incubator-iotdb/tree/master

点赞!关注!转发!


http://www.ppmy.cn/news/641633.html

相关文章

TS流格式(转)

TS流格式&#xff08;转&#xff09; 一 从TS流开始 数字电视机顶盒接收到的是一段段的码流&#xff0c;我们称之为TS&#xff08;Transport Stream&#xff0c;传输流&#xff09;&#xff0c;每个TS流都携带一些信息&#xff0c;如Video、Audio以及我们需要学习的PAT、PMT等信…

TS流讲解--什么是ts流

TS流讲解--什么是ts流 目录(?)[-] 一 从TS流开始 一 TS流PS流PES流和ES流都是什么二 TS流是如何产生的三 TS流的格式是怎样的 二 从TS流到PATPMT 一 PAT表Program Association Table节目关联表 1 PAT表的描述表格分析2 PAT表的定义代码分析3 PAT表的结构代码分析 4 PAT表…

Vegas渲染的时候选什么格式?

在使用Vegas制作视频后渲染选取格式的时候&#xff0c;很多小伙伴经常会苦恼。不知道该选哪个格式渲染好&#xff0c;所以今天小编就这个问题来为大家写一篇教程。 首先&#xff0c;编辑好你的视频后&#xff0c;点击“文件”——“渲染为”&#xff0c;进入视频格式的选择界面…

ts流格式解析

一 从TS流开始 数字电视机顶盒接收到的是一段段的码流&#xff0c;我们称之为TS&#xff08;Transport Stream&#xff0c;传输流&#xff09;&#xff0c;每个TS流都携带一些信息&#xff0c;如Video、Audio以及我们需要学习的PAT、PMT等信息。因此&#xff0c;我们首先需要了…

jq 给按钮添加方法_告别存储烦恼,4种快速将M2TS格式转换为MKV的方法。

目前市场上的蓝光碟片和高清摄象机上录制的视频片段通常是M2TS形式。 由于高质量的视频&#xff0c;M2TS格式往往需要占据很大的空间&#xff0c;给用户带来很多不便。 因此&#xff0c;很多人选择将M2TS转换为MKV&#xff0c;作为一种开放的免费多媒体容器格式&#xff0c;MKV…

什么是TS流?

前言 什么是TS流&#xff1f; 百度说&#xff1a;transport stream&#xff08;传送流&#xff09;简称TS流&#xff0c;是根据ITU-T Rec.H.222.0|ISO/IEC 13818-2 和ISO/IEC 13818-3协议定义的一种数据流&#xff0c;防止有可能发生严重错误时进行一道或多道程序编码数据的传…

TS 类型备忘 音视频格式

转自 http://blog.csdn.net/wuxy_shenzhen/article/details/8694768 TS 支持Transport Stream传输流&#xff0c;该类文件扩展名包括.ts、.tp、.m2ts、.tod、.m2t、mts。TS中支持下述格式的视频、音频、字幕。 视频MPEG-1 Video&#xff1a;stream_type为0x01MPEG-2 Video&…

TS文件格式详解及解封装过程

简要 ts是一种封装格式&#xff0c;全名为MPEG-TS&#xff0c;文件分为三层&#xff1a;ts层&#xff08;Transport Stream&#xff09;、pes层&#xff08;Packet Elemental Stream&#xff09;、es层&#xff08;Elementary Stream&#xff09;。es层就是音视频数据&#xf…