IoTDB入门教程

环境安装

Java

下载地址

  • 推荐安装Java 1.8,安装路径不要带中文字符,空格。

Java Archive Downloads - Java SE 8u211 and later | Oracle 中国(windows)

How To Install Java with Apt-Get on Debian 8 | DigitalOcean(debian)

配置环境变量

参考Java 开发环境配置 | 菜鸟教程 (runoob.com)

iotdb

简介

IoTDB 是针对时间序列数据收集、存储与分析一体化的数据管理引擎。它具有体量轻、性能高、易使用的特点,完美对接 Hadoop 与 Spark 生态,适用于工业物联网应用中海量时间序列数据高速写入和复杂分析查询的需求。

基础概念

以下图时间序列"root.ln.wf01.wt01"为例,其中root.ln为数据库,wf01为路径,wt01为实体,status为物理量

img

对齐的时间序列(Aligned timeseries)

在实际应用中,存在某些实体的多个物理量同时采样(如 GPS 的经度和维度),形成在时间列上对齐的多条时间序列。详见例程中“创建对齐的时间序列”。

下载地址

发行版本

验证安装成功

  • 启动IoTDB
# 以Windows系统为例,在sbin目录下:
start-standalone.bat
  • 显示下列日志启动成功
Congratulation, IoTDB DataNode is set up successfully. Now, enjoy yourself!
  • 停止IoTDB
stop-standalone.bat

基本用法

语法类似SQL,命令行交互方式使用Cli工具(类似MySQL Command Line)

启停Cli工具

# 启动
start-cli.bat -h 127.0.0.1 -p 6667 -u root -pw root
# 停止
quit
# 停止
exit

启动后出现如图提示即为启动成功。

---------------------
Starting IoTDB Cli
---------------------
 _____       _________  ______   ______
|_   _|     |  _   _  ||_   _ `.|_   _ \
  | |   .--.|_/ | | \_|  | | `. \ | |_) |
  | | / .'`\ \  | |      | |  | | |  __'.
 _| |_| \__. | _| |_    _| |_.' /_| |__) |
|_____|'.__.' |_____|  |______.'|_______/  version 1.1.0 (Build: 807ec8b-dev)


Successfully login at 127.0.0.1:6667
IoTDB>

创建数据库

 create database root.ln

查看系统当前所有的 database

 show databases

创建时间序列

简介:数据在 IoTDB 中的组织形式是以时间序列为单位,每一个时间序列中有若干个数据-时间点对,每一个时间序列属于一个 database

CREATE TIMESERIES root.ln.wf01.wt01.status WITH DATATYPE=BOOLEAN, ENCODING=PLAIN
CREATE TIMESERIES root.ln.wf01.wt01.temperature WITH DATATYPE=FLOAT, ENCODING=RLE

查看系统时间序列

--查看所有时间序列
SHOW TIMESERIES
--查看某一个时间序列
SHOW TIMESERIES root.ln.wf01.wt01.status

插入数据

--向 root.ln.wf01.wt01.status 时间序列中插入数据,在插入数据时需要首先指定时间戳和路径后缀名称:
INSERT INTO root.ln.wf01.wt01(timestamp,status) values(100,true);
--向多个时间序列中同时插入数据,这些时间序列同属于一个时间戳
INSERT INTO root.ln.wf01.wt01(timestamp,status,temperature) values(200,false,20.71);

查询

--查询指定的时间序列
SELECT status FROM root.ln.wf01.wt01
--查询所有的时间序列
SELECT * FROM root.ln.wf01.wt01

Python操作

安装thrift、apache-iotdb包

pip install thrift
pip install apache-iotdb

示例

DDL

from iotdb.Session import Session
from iotdb.utils.IoTDBConstants import TSDataType, TSEncoding, Compressor

# 初始化 Session
session = Session(host="127.0.0.1", port="6667", user="root", password="root", fetch_size=1024, zone_id="UTC+8")

# 开启连接,并决定是否开启 RPC 压缩,注意: 客户端的 RPC 压缩开启状态需和服务端一致
session.open(enable_rpc_compression=False)

# 创建数据库
session.set_storage_group("root.test")

# 创建时间序列
session.create_time_series("root.test.d_01.s_01", TSDataType.BOOLEAN, TSEncoding.PLAIN, Compressor.SNAPPY)

# 创建多个时间序列
session.create_multi_time_series(
    ["root.test.d_01.id", "root.test.d_01.name"],
    [TSDataType.INT64, TSDataType.TEXT],
    [TSEncoding.PLAIN, TSEncoding.PLAIN],
    [Compressor.SNAPPY, Compressor.SNAPPY],
    props_lst=None, tags_lst=None, attributes_lst=None, alias_lst=None
)

# 创建对齐时间序列
session.create_aligned_time_series(
    "root.sg_test_01.d_02",
    ["length", "width"],
    [TSDataType.FLOAT, TSDataType.FLOAT],
    [TSEncoding.PLAIN, TSEncoding.PLAIN],
    [Compressor.LZ4, Compressor.LZ4],
)

# 检查时间序列是否存在
ret = session.check_time_series_exists("root.test.d_01.id")
print(ret)

# 删除时间序列
session.delete_time_series("root.sg_test_01.d_01.s_01")

# 删除数据库
session.delete_storage_groups(["root.test"])

# 关闭Session
session.close()

DML

  1. 普通Tablet
values_ = [
    [False, 10, 11, 1.1, 10011.1, "test01"],
    [True, 100, 11111, 1.25, 101.0, "test02"],
    [False, 100, 1, 188.1, 688.25, "test03"],
    [True, 0, 0, 0, 6.25, "test04"],
]
timestamps_ = [1, 2, 3, 4]
measurements_ = ["s_01", "s_02", "s_03", "s_04", "s_05", "s_06"]
data_types_ = [
    TSDataType.BOOLEAN,
    TSDataType.INT32,
    TSDataType.INT64,
    TSDataType.FLOAT,
    TSDataType.DOUBLE,
    TSDataType.TEXT,
]
tablet_ = Tablet(
    "root.sg_test_01.d_01", measurements_, data_types_, values_, timestamps_
)
session.insert_tablet(tablet_)

SQL接口

# 执行查询语句
# session.execute_query_statement(sql)
# eg:查询并打印
with session.execute_query_statement(
    "select * from root.sg_test_01.d_01"
) as session_data_set:
    session_data_set.set_fetch_size(1024)
    while session_data_set.has_next():
        print(session_data_set.next())

# 执行非查询语句
# session.execute_non_query_statement(sql)
# eg:插入数据
session.execute_non_query_statement(
    "insert into root.sg_test_01.d_02(timestamp, s_02) aligned values(16, 188)"
)

# 执行语句,可替换前两个接口
# session.execute_statement(sql)

注意

  1. Numpy Tablet、元数据模版接口、对 Pandas 的支持详见IoTDB入门教程
  2. IoTDB SQLAlchemy Dialect仍在完善中,请勿在生产环境中使用!

扩展阅读

IoTDB用户手册

Home - IOTDB - Apache Software Foundation

进行数据读写的例子:Session Example

关于对齐时间序列读写的例子:Aligned Timeseries Session Example

posted @ 2023-05-05 17:32  某科学的撒把豆子  阅读(510)  评论(0)    收藏  举报