文章目录

  • 安装
  • 语法说明
  • 基本接口说明
  • 数据定义接口DDL和插入数据简单例子
  • 针对原生接口的链接池

  • 前提JDK >= 1.8 Maven >= 3.6


    安装

    maven中加入依赖

    <dependencies>
        <dependency>
          <groupId>org.apache.iotdb</groupId>
          <artifactId>iotdb-session</artifactId>
          <version>1.3.2</version>
        </dependency>
    </dependencies>
    

    语法说明

  • 对于 IoTDB-SQL 接口:传入的 SQL 参数需要符合 语法规范 ,并且针对 JAVA 字符串进行反转义,如双引号前需要加反斜杠。(即:经 JAVA 转义之后与命令行执行的 SQL 语句一致。)

  • 对于其他接口:
    – 经参数传入的路径或路径前缀中的节点: 在 SQL 语句中需要使用反引号()进行转义的,此处均需要进行转义。 - 经参数传入的标识符(如模板名):在 SQL 语句中需要使用反引号()进行转义的,均可以不用进行转义。

  • 语法详细说明可以参考官方文档语法使用

  • 基本接口说明

    初始化session

    // 全部使用默认配置
    session = new Session.Builder.build();
    
    // 指定一个可连接节点
    session = 
        new Session.Builder()
            .host(String host)
            .port(int port)
            .build();
    
    // 指定多个可连接节点
    session = 
        new Session.Builder()
            .nodeUrls(List<String> nodeUrls)
            .build();
    
    // 其他配置项
    session = 
        new Session.Builder()
            .fetchSize(int fetchSize)
            .username(String username)
            .password(String password)
            .thriftDefaultBufferSize(int thriftDefaultBufferSize)
            .thriftMaxFrameSize(int thriftMaxFrameSize)
            .enableRedirection(boolean enableRedirection)
            .version(Version version)
            .build();
    

    开启session

    void open()
    

    关闭session

    void close()
    

    数据定义接口DDL和插入数据简单例子

    设置数据库

    void setStorageGroup(String storageGroupId)
    

    删除单个或多个数据库

    void deleteStorageGroup(String storageGroup)
    void deleteStorageGroups(List<String> storageGroups)
    

    创建单个或多个时间序列

    void createTimeseries(String path, TSDataType dataType,
          TSEncoding encoding, CompressionType compressor, Map<String, String> props,
          Map<String, String> tags, Map<String, String> attributes, String measurementAlias)
          
    void createMultiTimeseries(List<String> paths, List<TSDataType> dataTypes,
          List<TSEncoding> encodings, List<CompressionType> compressors,
          List<Map<String, String>> propsList, List<Map<String, String>> tagsList,
          List<Map<String, String>> attributesList, List<String> measurementAliasList)
    

    创建对齐时间序列

    void createAlignedTimeseries(String prefixPath, List<String> measurements,
          List<TSDataType> dataTypes, List<TSEncoding> encodings,
          List <CompressionType> compressors, List<String> measurementAliasList);
    

    删除一个或多个时间序列

    void deleteTimeseries(String path)
    void deleteTimeseries(List<String> paths)
    

    检测时间序列是否存在

    boolean checkTimeseriesExists(String path)
    

    创建数据直接插入数据库

     // 设置表结构
     List<MeasurementSchema> schemaList = new ArrayList<>();
     schemaList.add(new MeasurementSchema("字段值1", TSDataType.DOUBLE));
     schemaList.add(new MeasurementSchema("字段值2", TSDataType.INT32));
     schemaList.add(new MeasurementSchema("字段值3", TSDataType.TEXT));
     // 创建路径
     String iotdbPath = "root.db.xx.yy";
     String value1 = "值1";
     String value2 = "值2";
     String value3 = "值3";
     Map<String, Tablet> tabletsMap=new HashMap<>();
     // 路径 表结构 每次插入最大量 maxNum = 1000
     Tablet tablet new Tablet(iotdbPath, schemaList, maxNum);
     int rowIndex = tablet.rowSize++;
     tablet.addTimestamp(rowIndex, offset);
     tablet.addValue(schemaList.get(0).getMeasurementId(), rowIndex, Convert.toDouble(value1));
     tablet.addValue(schemaList.get(1).getMeasurementId(), rowIndex, value2);
     tablet.addValue(schemaList.get(2).getMeasurementId(), rowIndex, value3);
     tabletsMap.put(iotdbPath,tablet);
     // 创建
     iotDbUtil.pool.insertTablets(tabletsMap,true);
    

    关于IOTDB连接,查询,写个工具类统一管理、处理。当然可能有更优解。眼下还没来得及学习。

    针对原生接口的链接池

    官方提供了一个针对原生接口的连接池 (SessionPool),使用该接口时,你只需要指定连接池的大小,就可以在使用时从池中获取连接。
    如果超过 60s 都没得到一个连接的话,那么会打印一条警告日志,但是程序仍将继续等待。

    当一个连接被用完后,他会自动返回池中等待下次被使用;
    当一个连接损坏后,他会从池中被删除,并重建一个连接重新执行用户的操作;
    你还可以像创建 Session 那样在创建 SessionPool 时指定多个可连接节点的 url,以保证分布式集群中客户端的高可用性。

    对于查询操作:

    使用 SessionPool 进行查询时,得到的结果集是SessionDataSet的封装类SessionDataSetWrapper;
    若对于一个查询的结果集,用户并没有遍历完且不再想继续遍历时,需要手动调用释放连接的操作closeResultSet;
    若对一个查询的结果集遍历时出现异常,也需要手动调用释放连接的操作closeResultSet.
    可以调用 SessionDataSetWrapper 的 getColumnNames() 方法得到结果集列名

    作者:wangyanfei2021

    物联沃分享整理
    物联沃-IOTWORD物联网 » JAVA接入IOTDB

    发表回复