使用Apache IoTDB进行IoT相关开发的架构设计与功能实现(6)

简介: 接下来我们讨论一下关于创建存储组的相关方面,在这里值得注意的是,当路径本身或路径的父/子层已经被设置为存储组时,则不允许将路径设置为存储组。例如,设置是不可行的​​root.ln.wf01​​存在两个存储组时,作为一个存储组​​root.ln​​和​​root.sgcc​​。系统会给出相应的错误提示。

创建存储组

根据存储模型,我们可以设置相应的存储组。用于创建存储组的SQL语句如下:

  1. IoTDB > set storage group to root.ln
  2. IoTDB > set storage group to root.sgcc

因此,我们可以使用上述两条SQL语句创建两个存储组。

值得注意的是,当路径本身或路径的父/子层已经被设置为存储组时,则不允许将路径设置为存储组。例如,设置是不可行的root.ln.wf01存在两个存储组时,作为一个存储组root.ln和root.sgcc。系统会给出相应的错误提示,如下所示:

  1. IoTDB> set storage group to root.ln.wf01
  2. Msg: org.apache.iotdb.exception.MetadataErrorException: org.apache.iotdb.exception.PathErrorException: The prefix of root.ln.wf01 has been set to the storage group.

显示存储组

创建存储组后,我们可以使用显示存储组语句来查看所有存储组。SQL语句如下所示:

  1. IoTDB> show storage group

结果如下:

创建时间序列

根据前面选择的存储模型,我们可以在两个存储组中分别创建相应的时间序列。用于创建时间序列的SQL语句如下:

  1. IoTDB > create timeseries root.ln.wf01.wt01.status with datatype=BOOLEAN,encoding=PLAIN
  2. IoTDB > create timeseries root.ln.wf01.wt01.temperature with datatype=FLOAT,encoding=RLE
  3. IoTDB > create timeseries root.ln.wf02.wt02.hardware with datatype=TEXT,encoding=PLAIN
  4. IoTDB > create timeseries root.ln.wf02.wt02.status with datatype=BOOLEAN,encoding=PLAIN
  5. IoTDB > create timeseries root.sgcc.wf03.wt01.status with datatype=BOOLEAN,encoding=PLAIN
  6. IoTDB > create timeseries root.sgcc.wf03.wt01.temperature with datatype=FLOAT,encoding=RLE

值得注意的是,当CRATE TIMESERIES语句中的编码方式与数据类型冲突时,系统会给出相应的错误提示,如下所示:

  1. IoTDB> create timeseries root.ln.wf02.wt02.status WITH DATATYPE=BOOLEAN, ENCODING=TS_2DIFF
  2. error: encoding TS_2DIFF does not support BOOLEAN

请参考编码用于数据类型和编码之间的对应。

标签和属性管理

我们还可以在创建一个时间序列时添加别名、额外的标记和属性信息。用于创建带有额外标记和属性信息的时间序列的SQL语句扩展如下:

  1. 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。所以我们可以用temprature替换s1任何地方。

注意,额外的标记和属性信息的大小不应该超过tag_attribute_total_size.

tag和attribute之间的唯一区别是我们将在tag上维护一个倒排索引,所以我们可以在show timeseries where子句中使用tag property,如下所示Show Timeseries部分。

更新标签操作

我们可以在创建标签信息后更新它,如下所示:

  • 重命名标签/属性键
  1. ALTER timeseries root.turbine.d1.s1 RENAME tag1 TO newTag1
  • 重置标签/属性值
  1. ALTER timeseries root.turbine.d1.s1 SET tag1=newV1, attr1=newV1
  • 删除现有标签/属性
  1. ALTER timeseries root.turbine.d1.s1 DROP tag1, tag2
  • 添加新标签
  1. ALTER timeseries root.turbine.d1.s1 ADD TAGS tag3=v3, tag4=v4
  • 添加新属性
  1. ALTER timeseries root.turbine.d1.s1 ADD ATTRIBUTES attr3=v3, attr4=v4
  • 向上插入别名、标签和属性

如果别名或键值不存在,请添加别名或新的键值,否则,用新值更新旧值。

  1. ALTER timeseries root.turbine.d1.s1 UPSERT ALIAS=newAlias TAGS(tag3=v3, tag4=v4) ATTRIBUTES(attr3=v3, attr4=v4)

显示时间序列

  • 显示时间序列前缀路径?showWhereClause?limitClause?
    在显示时间序列、返回时间序列信息后面可以添加三个可选子句

时间序列信息包括:时间序列路径、测量别名、所属存储组、数据类型、编码类型、压缩类型、标签和属性。

示例:

  • 显示时间序列
    以JSON形式显示所有时间序列信息
  • 显示时间序列<Path>
    返回给定<Path>. <Path>必须是前缀路径或带星号的路径或时间序列路径。SQL语句如下:
  1. IoTDB> show timeseries root
  2. IoTDB> show timeseries root.ln

结果分别如下所示:

  • 显示时间序列(<PrefixPath>)?where子句
    返回满足where条件并以前缀路径SQL语句开头的所有timeseries信息,如下所示:
  1. show timeseries root.ln where unit=c
  2. show timeseries root.ln where description contains 'test1'

结果分别如下所示:

注意,我们只支持where子句中的一个条件。它要么是一个相等的过滤器,要么是一个contains过滤器。在这两种情况下,where条件中的属性必须是标记。

  • 显示时间序列限制整数偏移量整数
    返回从偏移量开始的所有时间序列信息,并限制返回的序列数

值得注意的是,当查询的路径不存在时,系统不会返回任何时间序列。

相关文章
|
存储 分布式计算 物联网
Apache IoTDB进行IoT相关开发实践
当今社会,物联网技术的发展带来了许多繁琐的挑战,尤其是在数据库管理系统领域,比如实时整合海量数据、处理流中的事件以及处理数据的安全性。例如,应用于智能城市的基于物联网的交通传感器可以实时生成大量的交通数据。据估计,未来5年,物联网设备的数量将达数万亿。物联网产生大量的数据,包括流数据、时间序列数据、RFID数据、传感数据等。要有效地管理这些数据,就需要使用数据库。数据库在充分处理物联网数据方面扮演着非常重要的角色。因此,适当的数据库与适当的平台同等重要。由于物联网在世界上不同的环境中运行,选择合适的数据库变得非常重要。 原创文字,IoTDB 社区可进行使用与传播 一、什么是IoTDB 我
809 9
Apache IoTDB进行IoT相关开发实践
|
传感器 存储 物联网
在物联网(IoT)快速发展的今天,C语言作为物联网开发中的关键工具,以其高效、灵活、可移植的特点
在物联网(IoT)快速发展的今天,C语言作为物联网开发中的关键工具,以其高效、灵活、可移植的特点,广泛应用于嵌入式系统开发、通信协议实现及后端服务构建等领域,成为推动物联网技术进步的重要力量。
805 1
|
Rust 资源调度 安全
为什么使用 Rust over C++ 进行 IoT 解决方案开发
为什么使用 Rust over C++ 进行 IoT 解决方案开发
778 7
|
Java 持续交付 项目管理
Maven是一款基于Apache许可的项目管理和构建自动化工具,在Java开发中极为流行。
Maven是一款基于Apache许可的项目管理和构建自动化工具,在Java开发中极为流行。它采用项目对象模型(POM)来描述项目,简化构建流程。Maven提供依赖管理、标准构建生命周期、插件扩展等功能,支持多模块项目及版本控制。在Java Web开发中,Maven能够自动生成项目结构、管理依赖、自动化构建流程并运行多种插件任务,如代码质量检查和单元测试。遵循Maven的最佳实践,结合持续集成工具,可以显著提升开发效率和项目质量。
429 1
|
Apache 开发者 Java
Apache Wicket揭秘:如何巧妙利用模型与表单机制,实现Web应用高效开发?
【8月更文挑战第31天】本文深入探讨了Apache Wicket的模型与表单处理机制。Wicket作为一个组件化的Java Web框架,提供了多种模型实现,如CompoundPropertyModel等,充当组件与数据间的桥梁。文章通过示例介绍了模型创建及使用方法,并详细讲解了表单组件、提交处理及验证机制,帮助开发者更好地理解如何利用Wicket构建高效、易维护的Web应用程序。
535 0
|
Cloud Native Serverless API
微服务架构实战指南:从单体应用到云原生的蜕变之路
🌟蒋星熠Jaxonic,代码为舟的星际旅人。深耕微服务架构,擅以DDD拆分服务、构建高可用通信与治理体系。分享从单体到云原生的实战经验,探索技术演进的无限可能。
1184 4
微服务架构实战指南:从单体应用到云原生的蜕变之路
|
弹性计算 API 持续交付
后端服务架构的微服务化转型
本文旨在探讨后端服务从单体架构向微服务架构转型的过程,分析微服务架构的优势和面临的挑战。文章首先介绍单体架构的局限性,然后详细阐述微服务架构的核心概念及其在现代软件开发中的应用。通过对比两种架构,指出微服务化转型的必要性和实施策略。最后,讨论了微服务架构实施过程中可能遇到的问题及解决方案。
|
Cloud Native Devops 云计算
云计算的未来:云原生架构与微服务的革命####
【10月更文挑战第21天】 随着企业数字化转型的加速,云原生技术正迅速成为IT行业的新宠。本文深入探讨了云原生架构的核心理念、关键技术如容器化和微服务的优势,以及如何通过这些技术实现高效、灵活且可扩展的现代应用开发。我们将揭示云原生如何重塑软件开发流程,提升业务敏捷性,并探索其对企业IT架构的深远影响。 ####
621 3
|
Java 开发者 微服务
从单体到微服务:如何借助 Spring Cloud 实现架构转型
**Spring Cloud** 是一套基于 Spring 框架的**微服务架构解决方案**,它提供了一系列的工具和组件,帮助开发者快速构建分布式系统,尤其是微服务架构。
3149 70
从单体到微服务:如何借助 Spring Cloud 实现架构转型

推荐镜像

更多