当前位置: 首页 > 工具软件 > TDengine > 使用案例 >

TDengine快速入门

衡丰茂
2023-12-01

使用Docker快速搭建TDengine环境

1.创建Docker容器并运行

使用 docker run 命令启动运行 TDengine server 的 docker 容器,并使用 --name 命令行参数将容器命名为 tdengine,使用 --hostname 指定 hostname 为 tdengine-server,通过 -v 挂载本地目录到容器,实现宿主机与容器内部的数据同步,防止容器删除后,数据丢失。

docker run -d --name tdengine --hostname="tdengine-server" -v ~/work/taos/log:/var/log/taos -v ~/work/taos/data:/var/lib/taos  -p 6030-6049:6030-6049 -p 6030-6049:6030-6049/udp tdengine/tdengine
  • –name tdengine:设置容器名称,我们可以通过容器名称来访问对应的容器
  • –hostname=tdengine-server:设置容器内 Linux 系统的 hostname,我们可以通过映射 hostname 和 IP 来解决容器 IP 可能变化的问题。
  • -v:设置宿主机文件目录映射到容器内目录,避免容器删除后数据丢失。

2.使用 docker ps 命令确认容器是否已经正确运行

docker ps

3.通过 docker exec 命令,进入到 docker 容器,进入TDengine客户端

进入tdengine容器

docker exec -it tdengine /bin/bash

进入客户端程序

taos

4.应用示例:在宿主机使用 taosBenchmark 写入数据到 Docker 容器中的 TDengine server

在tdengine容器里执行

taosBenchmark 

回车后,该命令将在数据库 test 下面自动创建一张超级表 meters,该超级表下有 1 万张表,表名为 “d0” 到 “d9999”,每张表有 1 万条记录,每条记录有 (ts, current, voltage, phase) 四个字段,时间戳从 “2017-07-14 10:40:00 000” 到 “2017-07-14 10:40:09 999”,每张表带有标签 location 和 groupId,groupId 被设置为 1 到 10, location 被设置为 “California.SanFrancisco” 或者 “California.SanDieo”。

最后共插入 1 亿条记录。

5.进入 TDengine 客户端,查看 taosBenchmark 生成的数据。

查看数据库

show databases;

查看超级表

use test;

查询表,限制输出十条

select * from test.d0 limit 10;

TDengine 建表

1.创建库

CREATE DATABASE sin KEEP 365 DAYS 10 BLOCKS 6 UPDATE 1;

上述语句将创建一个名为 sin 的库,这个库的数据将保留 365 天(超过 365 天将被自动删除),每 10 天一个数据文件,内存块数为 6,允许更新数据。

创建库之后,需要使用 SQL 命令 USE 将当前库切换过来

USE sin;

2.创建超级表

一个物联网系统,往往存在多种类型的设备,比如对于电网,存在智能电表、变压器、母线、开关等等。为便于多表之间的聚合,使用 TDengine, 需要对每个类型的数据采集点创建一个超级表。

CREATE STABLE gl07 (ts timestamp,value int) TAGS (groupId int);

3.创建表

TDengine 对每个数据采集点需要独立建表。与标准的关系型数据库一样,一张表有表名,Schema,但除此之外,还可以带有一到多个标签。创建时,需要使用超级表做模板,同时指定标签的具体值。

CREATE TABLE d1008 USING gl07 TAGS (1008);

4.自动建表

在某些特殊场景中,用户在写数据时并不确定某个数据采集点的表是否存在,此时可在写入数据时使用自动建表语法来创建不存在的表,若该表已存在则不会建立新表且后面的 USING 语句被忽略。

INSERT INTO d1009 USING gl07 TAGS (1009) VALUES (now, 9);

验证是否创建

select * from d1009;

TDengine SQL写入数据

1.写入一条数据,子表不存在自动创建

INSERT INTO d1009 USING gl07 TAGS (1009) VALUES (now, 10);

2.写入一条数据

INSERT INTO d1001 VALUES (now, 34);

3.写入多条数据

INSERT INTO d1001 VALUES (now,14) (now,16);

Java 连接器

maven依赖

<dependency>
  <groupId>com.taosdata.jdbc</groupId>
  <artifactId>taos-jdbcdriver</artifactId>
  <version>2.0.38</version>
</dependency>

安装客户端驱动 taosc

Windows

  1. 下载客户端安装包

    所有下载

  2. 执行安装程序,按提示选择默认值,完成安装

  3. 安装路径

    默认安装路径为:C:\TDengine,其中包括以下文件(目录):

    • taos.exe:TDengine CLI 命令行程序
    • cfg : 配置文件目录
    • driver: 应用驱动动态链接库
    • examples: 示例程序 bash/C/C#/go/JDBC/Python/Node.js
    • include: 头文件
    • log : 日志文件
    • unins000.exe: 卸载程序
  4. 配置 taos.cfg

    编辑 taos.cfg 文件(默认路径 C:\TDengine\cfg\taos.cfg),将 firstEP 修改为 TDengine 服务器的 End Point,例如:h1.tdengine.com:6030

Linux

  1. 下载客户端安装包

    所有下载

  2. 解压缩软件包

    将软件包放置在当前用户可读写的任意目录下,然后执行下面的命令:tar -xzvf TDengine-client-VERSION.tar.gz 其中 VERSION 需要替换为实际版本的字符串。

  3. 执行安装脚本

    解压软件包之后,会在解压目录下看到以下文件(目录):

    • install_client.sh:安装脚本,用于应用驱动程序
    • taos.tar.gz:应用驱动安装包
    • driver:TDengine 应用驱动 driver
    • examples: 各种编程语言的示例程序(c/C#/go/JDBC/MATLAB/python/R) 运行 install_client.sh 进行安装。
  4. 配置 taos.cfg

    编辑 taos.cfg 文件(默认路径/etc/taos/taos.cfg),将 firstEP 修改为 TDengine 服务器的 End Point,例如:h1.tdengine.com:6030

连接Tdengine写入数据

package com.ambitfly.tdengine;

import com.taosdata.jdbc.SchemalessWriter;
import com.taosdata.jdbc.TSDBDriver;
import com.taosdata.jdbc.enums.SchemalessProtocolType;
import com.taosdata.jdbc.enums.SchemalessTimestampType;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Arrays;
import java.util.List;
import java.util.Properties;

public class WriteToTDengine {
    public static void main(String[] args) throws SQLException {
        String dateBase = "dateBase";
        String stable = "stable";
        insertData(dateBase,stable,getRawData(),getConnection());
    }




    public static Connection getConnection() throws SQLException {
        String jdbcUrl = "jdbc:TAOS://hadoop001:6030?user=root&password=taosdata";
        return DriverManager.getConnection(jdbcUrl);
    }
//            2022-05-31T15:51:26.25
    private static List<String> getRawData() {
        return Arrays.asList(
                "d111211,2022-06-01 17:38:04.68,0,192,111211"
//                ,
//                "d74481,1654105479000,1,192,74481",
//                "d74485,1654105479000,0,192,74485",
//                "d74489,1654105479000,1,192,74489",
//                "d27552,1654105479000,33.75,192,27552",
//                "d27551,1654105479000,0,192,27551"
        );
    }


    private static String getSQL(String dateBase,String stable,List<String> data) {

        StringBuilder sb = new StringBuilder("INSERT INTO ");
        for (String line : data) {
            String[] ps = line.split(",");
            sb.append(dateBase+"." + ps[0]).append(" USING " + dateBase + "." + stable + " TAGS(")
                    .append(ps[4]) // tag: groupId
                    .append(") VALUES(")
                    .append("\'").append(ps[1]).append("\'").append(",") // time_stamp
                    .append(ps[2]).append(",") // value
                    .append(ps[3]).append(") "); // quality_stamp
        }
        return sb.toString();
    }


    public static void insertData(String dateBase,String stable,List<String> data,Connection conn) throws SQLException {
            try (Statement stmt = conn.createStatement()) {
                String sql = getSQL(dateBase,stable,data);
                //System.out.println(sql);
                int rowCount = stmt.executeUpdate(sql);
                //System.out.println("rowCount=" + rowCount); // rowCount=8
            }
    }
}
 类似资料: