...
6、对齐的时间序列(Aligned timeseries)
对齐的多个时间序列需要同时创建,可以删除其中某列,但不能新增列。。
aligned不可以在对齐序列所属的设备下创建非对齐的序列,不可以在非对齐序列所属的设备下创建对齐序列。
...
Code Block | ||||
---|---|---|---|---|
| ||||
// 在实体 root.sg1.d2 下创建一组对齐的时间序列 create aligned timeseries root.sg1.d2.(s1 FLOAT encoding=RLE, s2 INT32 encoding=Grollia compression=SNAPPY) compression=SNAPPY // 注: // 1.可以指定每条时间序列的编码注:可以指定每条时间序列的编码(encoding)和压缩方式(compression),但是暂不支持指定别名(alias),props,但是暂不支持指定 props, attributes, tags 等。 // 2.未指定 compression 的时间序列,则采用系统默认配置;小括号外的 compression 定义时间列压缩方式和未显式声明的列的压缩方式。 // 插入语句,必须使用 aligned 关键词 insert into root.sg.d2(time, s1, s2) aligned values(1, 1, 2) insert into root.sg.d2(time, s1) aligned values(2, 1) //允许单独写某条时间序列,其他时间序列在该时间点上为空值 // 场景2所创建的对齐时间序列所属物理实体可以扩充时间序列,但需要在该物理实体下嵌套新实体。 // 例如,可以向d2下继续添加时间序列: create timeseries root.sg1.d2.t1.s1 FLOAT create timeseries root.sg1.d2.v1.(s1 FLOAT, s2 FLOAT) |
...
insert into root.sg1.sgd1.d3v1(time, 陀螺仪(s1, s2)) aligned values(1,(1,2))
Code Block | ||||
---|---|---|---|---|
| ||||
// 服务器需要做类型推断,可能会有额外耗时
void insertAlignedRecord(String prefixPath, long time, List<String> measurements, List<String> values)
|
...
// 提供数据类型后,服务器不需要做类型推断,可以提高性能
void insertAlignedRecord(String prefixPath, long time, List<String> measurements, List<TSDataType> types, List<Object> values |
...
) // 应用到上面的例子即: void insertAlignedRecord( "root. |
...
sg1. |
...
d1. |
...
v1", 1, Arrays.asList("s1", "s2"), Arrays.asList("1", "2") ) |
...
...
// 只插入到部分序列,其他序列值自动置为 null void insertAlignedRecord( "root.sg1.d1.v1", 1, Arrays.asList("s1"), Arrays.asList("1") ) // 也可以通过null显式声明 void insertAlignedRecord( "root.sg1.d1.v1", 1, Arrays.asList("s1","s2"), Arrays.asList("1",null) ) |
Code Block | ||||
---|---|---|---|---|
| ||||
// 插入一个 Tablet
void insertTablet(Tablet tablet) |
...
// 插入多个 Tablet void insertTablets(Map<String, Tablet> tablet) |
...
...
// 对齐的时间序列通过 measurementSchema 构建 Tablet List<IMeasurementSchema> schemaList = new ArrayList<>(); schemaList.add(new |
...
measurementSchema(new String[] {"s1", "s2"}, new TSDataType[] {TSDataType.INT64, TSDataType.INT32})); Tablet tablet = new Tablet("root.sg1.d1. |
...
v1", schemaList); |
...
TODO:更新下面的API描述
//多元序列允许某列的某些行有空值,如时间戳2下只有s1有值,s2无值,则只需:
insert into root.sg.d1(time, b(s1)) values(2,(1))
//上述例子也可以通过null显式声明:
insert into root.sg.d1(time, b(s1, s2)) values(2,(1, null))
//多元序列允许各列独自写入:
insert into root.sg.d1(time, b(s1)) values(3,(1))
...