| <!-- |
| |
| Licensed to the Apache Software Foundation (ASF) under one |
| or more contributor license agreements. See the NOTICE file |
| distributed with this work for additional information |
| regarding copyright ownership. The ASF licenses this file |
| to you under the Apache License, Version 2.0 (the |
| "License"); you may not use this file except in compliance |
| with the License. You may obtain a copy of the License at |
| |
| http://www.apache.org/licenses/LICENSE-2.0 |
| |
| Unless required by applicable law or agreed to in writing, |
| software distributed under the License is distributed on an |
| "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| KIND, either express or implied. See the License for the |
| specific language governing permissions and limitations |
| under the License. |
| |
| --> |
| |
| ## 时间序列管理 |
| |
| ### 创建时间序列 |
| |
| 根据建立的数据模型,我们可以分别在两个存储组中创建相应的时间序列。创建时间序列的 SQL 语句如下所示: |
| |
| ``` |
| IoTDB > create timeseries root.ln.wf01.wt01.status with datatype=BOOLEAN,encoding=PLAIN |
| IoTDB > create timeseries root.ln.wf01.wt01.temperature with datatype=FLOAT,encoding=RLE |
| IoTDB > create timeseries root.ln.wf02.wt02.hardware with datatype=TEXT,encoding=PLAIN |
| IoTDB > create timeseries root.ln.wf02.wt02.status with datatype=BOOLEAN,encoding=PLAIN |
| IoTDB > create timeseries root.sgcc.wf03.wt01.status with datatype=BOOLEAN,encoding=PLAIN |
| IoTDB > create timeseries root.sgcc.wf03.wt01.temperature with datatype=FLOAT,encoding=RLE |
| ``` |
| |
| 从 v0.13 起,可以使用简化版的 SQL 语句创建时间序列: |
| |
| ``` |
| IoTDB > create timeseries root.ln.wf01.wt01.status BOOLEAN encoding=PLAIN |
| IoTDB > create timeseries root.ln.wf01.wt01.temperature FLOAT encoding=RLE |
| IoTDB > create timeseries root.ln.wf02.wt02.hardware TEXT encoding=PLAIN |
| IoTDB > create timeseries root.ln.wf02.wt02.status BOOLEAN encoding=PLAIN |
| IoTDB > create timeseries root.sgcc.wf03.wt01.status BOOLEAN encoding=PLAIN |
| IoTDB > create timeseries root.sgcc.wf03.wt01.temperature FLOAT encoding=RLE |
| ``` |
| |
| 需要注意的是,当创建时间序列时指定的编码方式与数据类型不对应时,系统会给出相应的错误提示,如下所示: |
| ``` |
| IoTDB> create timeseries root.ln.wf02.wt02.status WITH DATATYPE=BOOLEAN, ENCODING=TS_2DIFF |
| error: encoding TS_2DIFF does not support BOOLEAN |
| ``` |
| |
| 详细的数据类型与编码方式的对应列表请参见 [编码方式](../Basic-Concept/Encoding.md)。 |
| |
| ### 创建对齐时间序列 |
| |
| 创建一组对齐时间序列的SQL语句如下所示: |
| |
| ``` |
| IoTDB> CREATE ALIGNED TIMESERIES root.ln.wf01.GPS(latitude FLOAT encoding=PLAIN compressor=SNAPPY, longitude FLOAT encoding=PLAIN compressor=SNAPPY) |
| ``` |
| |
| 一组对齐序列中的序列可以有不同的数据类型、编码方式以及压缩方式。 |
| |
| 对齐的时间序列也支持设置别名、标签、属性。 |
| |
| ### 删除时间序列 |
| |
| 我们可以使用`(DELETE | DROP) TimeSeries <PathPattern>`语句来删除我们之前创建的时间序列。SQL 语句如下所示: |
| |
| ``` |
| IoTDB> delete timeseries root.ln.wf01.wt01.status |
| IoTDB> delete timeseries root.ln.wf01.wt01.temperature, root.ln.wf02.wt02.hardware |
| IoTDB> delete timeseries root.ln.wf02.* |
| IoTDB> drop timeseries root.ln.wf02.* |
| ``` |
| |
| ### 查看时间序列 |
| |
| * SHOW LATEST? TIMESERIES pathPattern? timeseriesWhereClause? limitClause? |
| |
| SHOW TIMESERIES 中可以有四种可选的子句,查询结果为这些时间序列的所有信息 |
| |
| 时间序列信息具体包括:时间序列路径名,database,Measurement 别名,数据类型,编码方式,压缩方式,属性和标签。 |
| |
| 示例: |
| |
| * SHOW TIMESERIES |
| |
| 展示系统中所有的时间序列信息 |
| |
| * SHOW TIMESERIES <`Path`> |
| |
| 返回给定路径的下的所有时间序列信息。其中 `Path` 需要为一个时间序列路径或路径模式。例如,分别查看`root`路径和`root.ln`路径下的时间序列,SQL 语句如下所示: |
| |
| ``` |
| IoTDB> show timeseries root.** |
| IoTDB> show timeseries root.ln.** |
| ``` |
| |
| 执行结果分别为: |
| |
| ``` |
| +-------------------------------+--------+-------------+--------+--------+-----------+-------------------------------------------+--------------------------------------------------------+--------+-------------------+ |
| | timeseries| alias| database|dataType|encoding|compression| tags| attributes|deadband|deadband parameters| |
| +-------------------------------+--------+-------------+--------+--------+-----------+-------------------------------------------+--------------------------------------------------------+--------+-------------------+ |
| |root.sgcc.wf03.wt01.temperature| null| root.sgcc| FLOAT| RLE| SNAPPY| null| null| null| null| |
| | root.sgcc.wf03.wt01.status| null| root.sgcc| BOOLEAN| PLAIN| SNAPPY| null| null| null| null| |
| | root.turbine.d1.s1|newAlias| root.turbine| FLOAT| RLE| SNAPPY|{"newTag1":"newV1","tag4":"v4","tag3":"v3"}|{"attr2":"v2","attr1":"newV1","attr4":"v4","attr3":"v3"}| null| null| |
| | root.ln.wf02.wt02.hardware| null| root.ln| TEXT| PLAIN| SNAPPY| null| null| null| null| |
| | root.ln.wf02.wt02.status| null| root.ln| BOOLEAN| PLAIN| SNAPPY| null| null| null| null| |
| | root.ln.wf01.wt01.temperature| null| root.ln| FLOAT| RLE| SNAPPY| null| null| null| null| |
| | root.ln.wf01.wt01.status| null| root.ln| BOOLEAN| PLAIN| SNAPPY| null| null| null| null| |
| +-------------------------------+--------+-------------+--------+--------+-----------+-------------------------------------------+--------------------------------------------------------+--------+-------------------+ |
| Total line number = 7 |
| It costs 0.016s |
| |
| +-----------------------------+-----+-------------+--------+--------+-----------+----+----------+--------+-------------------+ |
| | timeseries|alias| database|dataType|encoding|compression|tags|attributes|deadband|deadband parameters| |
| +-----------------------------+-----+-------------+--------+--------+-----------+----+----------+--------+-------------------+ |
| | root.ln.wf02.wt02.hardware| null| root.ln| TEXT| PLAIN| SNAPPY|null| null| null| null| |
| | root.ln.wf02.wt02.status| null| root.ln| BOOLEAN| PLAIN| SNAPPY|null| null| null| null| |
| |root.ln.wf01.wt01.temperature| null| root.ln| FLOAT| RLE| SNAPPY|null| null| null| null| |
| | root.ln.wf01.wt01.status| null| root.ln| BOOLEAN| PLAIN| SNAPPY|null| null| null| null| |
| +-----------------------------+-----+-------------+--------+--------+-----------+----+----------+--------+-------------------+ |
| Total line number = 4 |
| It costs 0.004s |
| ``` |
| |
| * SHOW TIMESERIES LIMIT INT OFFSET INT |
| |
| 只返回从指定下标开始的结果,最大返回条数被 LIMIT 限制,用于分页查询。例如: |
| |
| ``` |
| show timeseries root.ln.** limit 10 offset 10 |
| ``` |
| |
| * SHOW TIMESERIES WHERE TIMESERIES contains 'containStr' |
| |
| 对查询结果集根据 timeseries 名称进行字符串模糊匹配过滤。例如: |
| |
| ``` |
| show timeseries root.ln.** where timeseries contains 'wf01.wt' |
| ``` |
| |
| 执行结果为: |
| |
| ``` |
| +-------------------------------+--------+-------------+--------+--------+-----------+-------------------------------------------+--------------------------------------------------------+--------+-------------------+ |
| | timeseries| alias| database|dataType|encoding|compression| tags| attributes|deadband|deadband parameters| |
| +-------------------------------+--------+-------------+--------+--------+-----------+-------------------------------------------+--------------------------------------------------------+--------+-------------------+ |
| | root.ln.wf01.wt01.temperature| null| root.ln| FLOAT| RLE| SNAPPY| null| null| null| null| |
| | root.ln.wf01.wt01.status| null| root.ln| BOOLEAN| PLAIN| SNAPPY| null| null| null| null| |
| +-------------------------------+--------+-------------+--------+--------+-----------+-------------------------------------------+--------------------------------------------------------+--------+-------------------+ |
| Total line number = 2 |
| It costs 0.016s |
| ``` |
| |
| * SHOW TIMESERIES WHERE DataType=type |
| |
| 对查询结果集根据时间序列数据类型进行过滤。例如: |
| |
| ``` |
| show timeseries root.ln.** where dataType=FLOAT |
| ``` |
| |
| 执行结果为: |
| |
| ``` |
| +-------------------------------+--------+-------------+--------+--------+-----------+-------------------------------------------+--------------------------------------------------------+--------+-------------------+ |
| | timeseries| alias| database|dataType|encoding|compression| tags| attributes|deadband|deadband parameters| |
| +-------------------------------+--------+-------------+--------+--------+-----------+-------------------------------------------+--------------------------------------------------------+--------+-------------------+ |
| |root.sgcc.wf03.wt01.temperature| null| root.sgcc| FLOAT| RLE| SNAPPY| null| null| null| null| |
| | root.turbine.d1.s1|newAlias| root.turbine| FLOAT| RLE| SNAPPY|{"newTag1":"newV1","tag4":"v4","tag3":"v3"}|{"attr2":"v2","attr1":"newV1","attr4":"v4","attr3":"v3"}| null| null| |
| | root.ln.wf01.wt01.temperature| null| root.ln| FLOAT| RLE| SNAPPY| null| null| null| null| |
| +-------------------------------+--------+-------------+--------+--------+-----------+-------------------------------------------+--------------------------------------------------------+--------+-------------------+ |
| Total line number = 3 |
| It costs 0.016s |
| |
| ``` |
| |
| |
| * SHOW LATEST TIMESERIES |
| |
| 表示查询出的时间序列需要按照最近插入时间戳降序排列 |
| |
| |
| 需要注意的是,当查询路径不存在时,系统会返回 0 条时间序列。 |
| |
| ### 统计时间序列总数 |
| |
| IoTDB 支持使用`COUNT TIMESERIES<Path>`来统计一条路径中的时间序列个数。SQL 语句如下所示: |
| |
| * 可以通过 `WHERE` 条件对时间序列名称进行字符串模糊匹配,语法为: `COUNT TIMESERIES <Path> WHERE TIMESERIES contains 'containStr'` 。 |
| * 可以通过 `WHERE` 条件对时间序列数据类型进行过滤,语法为: `COUNT TIMESERIES <Path> WHERE DataType=<DataType>'`。 |
| * 可以通过 `WHERE` 条件对标签点进行过滤,语法为: `COUNT TIMESERIES <Path> WHERE TAGS(key)='value'` 或 `COUNT TIMESERIES <Path> WHERE TAGS(key) contains 'value'`。 |
| * 可以通过定义`LEVEL`来统计指定层级下的时间序列个数。这条语句可以用来统计每一个设备下的传感器数量,语法为:`COUNT TIMESERIES <Path> GROUP BY LEVEL=<INTEGER>`。 |
| |
| ``` |
| IoTDB > COUNT TIMESERIES root.** |
| IoTDB > COUNT TIMESERIES root.ln.** |
| IoTDB > COUNT TIMESERIES root.ln.*.*.status |
| IoTDB > COUNT TIMESERIES root.ln.wf01.wt01.status |
| IoTDB > COUNT TIMESERIES root.** WHERE TIMESERIES contains 'sgcc' |
| IoTDB > COUNT TIMESERIES root.** WHERE DATATYPE = INT64 |
| IoTDB > COUNT TIMESERIES root.** WHERE TAGS(unit) contains 'c' |
| IoTDB > COUNT TIMESERIES root.** WHERE TAGS(unit) = 'c' |
| IoTDB > COUNT TIMESERIES root.** WHERE TIMESERIES contains 'sgcc' group by level = 1 |
| ``` |
| |
| 例如有如下时间序列(可以使用`show timeseries`展示所有时间序列): |
| |
| ``` |
| +-------------------------------+--------+-------------+--------+--------+-----------+-------------------------------------------+--------------------------------------------------------+--------+-------------------+ |
| | timeseries| alias| database|dataType|encoding|compression| tags| attributes|deadband|deadband parameters| |
| +-------------------------------+--------+-------------+--------+--------+-----------+-------------------------------------------+--------------------------------------------------------+--------+-------------------+ |
| |root.sgcc.wf03.wt01.temperature| null| root.sgcc| FLOAT| RLE| SNAPPY| null| null| null| null| |
| | root.sgcc.wf03.wt01.status| null| root.sgcc| BOOLEAN| PLAIN| SNAPPY| null| null| null| null| |
| | root.turbine.d1.s1|newAlias| root.turbine| FLOAT| RLE| SNAPPY|{"newTag1":"newV1","tag4":"v4","tag3":"v3"}|{"attr2":"v2","attr1":"newV1","attr4":"v4","attr3":"v3"}| null| null| |
| | root.ln.wf02.wt02.hardware| null| root.ln| TEXT| PLAIN| SNAPPY| {"unit":"c"}| null| null| null| |
| | root.ln.wf02.wt02.status| null| root.ln| BOOLEAN| PLAIN| SNAPPY| {"description":"test1"}| null| null| null| |
| | root.ln.wf01.wt01.temperature| null| root.ln| FLOAT| RLE| SNAPPY| null| null| null| null| |
| | root.ln.wf01.wt01.status| null| root.ln| BOOLEAN| PLAIN| SNAPPY| null| null| null| null| |
| +-------------------------------+--------+-------------+--------+--------+-----------+-------------------------------------------+--------------------------------------------------------+--------+-------------------+ |
| Total line number = 7 |
| It costs 0.004s |
| ``` |
| |
| 那么 Metadata Tree 如下所示: |
| |
| <img style="width:100%; max-width:600px; margin-left:auto; margin-right:auto; display:block;" src="https://alioss.timecho.com/docs/img/github/69792176-1718f400-1201-11ea-861a-1a83c07ca144.jpg"> |
| |
| 可以看到,`root`被定义为`LEVEL=0`。那么当你输入如下语句时: |
| |
| ``` |
| IoTDB > COUNT TIMESERIES root.** GROUP BY LEVEL=1 |
| IoTDB > COUNT TIMESERIES root.ln.** GROUP BY LEVEL=2 |
| IoTDB > COUNT TIMESERIES root.ln.wf01.* GROUP BY LEVEL=2 |
| ``` |
| |
| 你将得到以下结果: |
| |
| ``` |
| IoTDB> COUNT TIMESERIES root.** GROUP BY LEVEL=1 |
| +------------+-----------------+ |
| | column|count(timeseries)| |
| +------------+-----------------+ |
| | root.sgcc| 2| |
| |root.turbine| 1| |
| | root.ln| 4| |
| +------------+-----------------+ |
| Total line number = 3 |
| It costs 0.002s |
| |
| IoTDB > COUNT TIMESERIES root.ln.** GROUP BY LEVEL=2 |
| +------------+-----------------+ |
| | column|count(timeseries)| |
| +------------+-----------------+ |
| |root.ln.wf02| 2| |
| |root.ln.wf01| 2| |
| +------------+-----------------+ |
| Total line number = 2 |
| It costs 0.002s |
| |
| IoTDB > COUNT TIMESERIES root.ln.wf01.* GROUP BY LEVEL=2 |
| +------------+-----------------+ |
| | column|count(timeseries)| |
| +------------+-----------------+ |
| |root.ln.wf01| 2| |
| +------------+-----------------+ |
| Total line number = 1 |
| It costs 0.002s |
| ``` |
| |
| > 注意:时间序列的路径只是过滤条件,与 level 的定义无关。 |
| |
| ### 标签点管理 |
| |
| 我们可以在创建时间序列的时候,为它添加别名和额外的标签和属性信息。 |
| |
| 标签和属性的区别在于: |
| |
| * 标签可以用来查询时间序列路径,会在内存中维护标点到时间序列路径的倒排索引:标签 -> 时间序列路径 |
| * 属性只能用时间序列路径来查询:时间序列路径 -> 属性 |
| |
| 所用到的扩展的创建时间序列的 SQL 语句如下所示: |
| ``` |
| create timeseries root.turbine.d1.s1(temprature) with datatype=FLOAT, encoding=RLE, compression=SNAPPY tags(tag1=v1, tag2=v2) attributes(attr1=v1, attr2=v2) |
| ``` |
| |
| 括号里的`temprature`是`s1`这个传感器的别名。 |
| 我们可以在任何用到`s1`的地方,将其用`temprature`代替,这两者是等价的。 |
| |
| > IoTDB 同时支持在查询语句中 [使用 AS 函数](../Reference/SQL-Reference.md#数据管理语句) 设置别名。二者的区别在于:AS 函数设置的别名用于替代整条时间序列名,且是临时的,不与时间序列绑定;而上文中的别名只作为传感器的别名,与其绑定且可与原传感器名等价使用。 |
| |
| > 注意:额外的标签和属性信息总的大小不能超过`tag_attribute_total_size`. |
| |
| * 标签点属性更新 |
| 创建时间序列后,我们也可以对其原有的标签点属性进行更新,主要有以下六种更新方式: |
| * 重命名标签或属性 |
| ``` |
| ALTER timeseries root.turbine.d1.s1 RENAME tag1 TO newTag1 |
| ``` |
| * 重新设置标签或属性的值 |
| ``` |
| ALTER timeseries root.turbine.d1.s1 SET newTag1=newV1, attr1=newV1 |
| ``` |
| * 删除已经存在的标签或属性 |
| ``` |
| ALTER timeseries root.turbine.d1.s1 DROP tag1, tag2 |
| ``` |
| * 添加新的标签 |
| ``` |
| ALTER timeseries root.turbine.d1.s1 ADD TAGS tag3=v3, tag4=v4 |
| ``` |
| * 添加新的属性 |
| ``` |
| ALTER timeseries root.turbine.d1.s1 ADD ATTRIBUTES attr3=v3, attr4=v4 |
| ``` |
| * 更新插入别名,标签和属性 |
| > 如果该别名,标签或属性原来不存在,则插入,否则,用新值更新原来的旧值 |
| ``` |
| ALTER timeseries root.turbine.d1.s1 UPSERT ALIAS=newAlias TAGS(tag2=newV2, tag3=v3) ATTRIBUTES(attr3=v3, attr4=v4) |
| ``` |
| |
| * 使用标签作为过滤条件查询时间序列,使用 TAGS(tagKey) 来标识作为过滤条件的标签 |
| ``` |
| SHOW TIMESERIES (<`PathPattern`>)? timeseriesWhereClause |
| ``` |
| |
| 返回给定路径的下的所有满足条件的时间序列信息,SQL 语句如下所示: |
| |
| ``` |
| ALTER timeseries root.ln.wf02.wt02.hardware ADD TAGS unit=c |
| ALTER timeseries root.ln.wf02.wt02.status ADD TAGS description=test1 |
| show timeseries root.ln.** where TAGS(unit)='c' |
| show timeseries root.ln.** where TAGS(description) contains 'test1' |
| ``` |
| |
| 执行结果分别为: |
| |
| ``` |
| +--------------------------+-----+-------------+--------+--------+-----------+------------+----------+--------+-------------------+ |
| | timeseries|alias| database|dataType|encoding|compression| tags|attributes|deadband|deadband parameters| |
| +--------------------------+-----+-------------+--------+--------+-----------+------------+----------+--------+-------------------+ |
| |root.ln.wf02.wt02.hardware| null| root.ln| TEXT| PLAIN| SNAPPY|{"unit":"c"}| null| null| null| |
| +--------------------------+-----+-------------+--------+--------+-----------+------------+----------+--------+-------------------+ |
| Total line number = 1 |
| It costs 0.005s |
| |
| +------------------------+-----+-------------+--------+--------+-----------+-----------------------+----------+--------+-------------------+ |
| | timeseries|alias| database|dataType|encoding|compression| tags|attributes|deadband|deadband parameters| |
| +------------------------+-----+-------------+--------+--------+-----------+-----------------------+----------+--------+-------------------+ |
| |root.ln.wf02.wt02.status| null| root.ln| BOOLEAN| PLAIN| SNAPPY|{"description":"test1"}| null| null| null| |
| +------------------------+-----+-------------+--------+--------+-----------+-----------------------+----------+--------+-------------------+ |
| Total line number = 1 |
| It costs 0.004s |
| ``` |
| |
| - 使用标签作为过滤条件统计时间序列数量 |
| |
| ``` |
| COUNT TIMESERIES (<`PathPattern`>)? timeseriesWhereClause |
| COUNT TIMESERIES (<`PathPattern`>)? timeseriesWhereClause GROUP BY LEVEL=<INTEGER> |
| ``` |
| |
| 返回给定路径的下的所有满足条件的时间序列的数量,SQL 语句如下所示: |
| |
| ``` |
| count timeseries |
| count timeseries root.** where TAGS(unit)='c' |
| count timeseries root.** where TAGS(unit)='c' group by level = 2 |
| ``` |
| |
| 执行结果分别为: |
| |
| ``` |
| IoTDB> count timeseries |
| +-----------------+ |
| |count(timeseries)| |
| +-----------------+ |
| | 6| |
| +-----------------+ |
| Total line number = 1 |
| It costs 0.019s |
| IoTDB> count timeseries root.** where TAGS(unit)='c' |
| +-----------------+ |
| |count(timeseries)| |
| +-----------------+ |
| | 2| |
| +-----------------+ |
| Total line number = 1 |
| It costs 0.020s |
| IoTDB> count timeseries root.** where TAGS(unit)='c' group by level = 2 |
| +--------------+-----------------+ |
| | column|count(timeseries)| |
| +--------------+-----------------+ |
| | root.ln.wf02| 2| |
| | root.ln.wf01| 0| |
| |root.sgcc.wf03| 0| |
| +--------------+-----------------+ |
| Total line number = 3 |
| It costs 0.011s |
| ``` |
| |
| > 注意,现在我们只支持一个查询条件,要么是等值条件查询,要么是包含条件查询。当然 where 子句中涉及的必须是标签值,而不能是属性值。 |
| |
| 创建对齐时间序列 |
| |
| ``` |
| create aligned timeseries root.sg1.d1(s1 INT32 tags(tag1=v1, tag2=v2) attributes(attr1=v1, attr2=v2), s2 DOUBLE tags(tag3=v3, tag4=v4) attributes(attr3=v3, attr4=v4)) |
| ``` |
| |
| 执行结果如下: |
| |
| ``` |
| IoTDB> show timeseries |
| +--------------+-----+-------------+--------+--------+-----------+-------------------------+---------------------------+--------+-------------------+ |
| | timeseries|alias| database|dataType|encoding|compression| tags| attributes|deadband|deadband parameters| |
| +--------------+-----+-------------+--------+--------+-----------+-------------------------+---------------------------+--------+-------------------+ |
| |root.sg1.d1.s1| null| root.sg1| INT32| RLE| SNAPPY|{"tag1":"v1","tag2":"v2"}|{"attr2":"v2","attr1":"v1"}| null| null| |
| |root.sg1.d1.s2| null| root.sg1| DOUBLE| GORILLA| SNAPPY|{"tag4":"v4","tag3":"v3"}|{"attr4":"v4","attr3":"v3"}| null| null| |
| +--------------+-----+-------------+--------+--------+-----------+-------------------------+---------------------------+--------+-------------------+ |
| ``` |
| |
| 支持查询: |
| |
| ``` |
| IoTDB> show timeseries where TAGS(tag1)='v1' |
| +--------------+-----+-------------+--------+--------+-----------+-------------------------+---------------------------+--------+-------------------+ |
| | timeseries|alias| database|dataType|encoding|compression| tags| attributes|deadband|deadband parameters| |
| +--------------+-----+-------------+--------+--------+-----------+-------------------------+---------------------------+--------+-------------------+ |
| |root.sg1.d1.s1| null| root.sg1| INT32| RLE| SNAPPY|{"tag1":"v1","tag2":"v2"}|{"attr2":"v2","attr1":"v1"}| null| null| |
| +--------------+-----+-------------+--------+--------+-----------+-------------------------+---------------------------+--------+-------------------+ |
| ``` |
| |
| 上述对时间序列标签、属性的更新等操作都支持。 |