C# 原生接口

环境要求

  • .NET SDK >= 5.0 或 .NET Framework 4.x
  • Thrift >= 0.14.1
  • NLog >= 4.7.9

依赖安装

您可以使用 NuGet Package Manager, .NET CLI等工具来安装,以 .NET CLI为例

如果您使用的是.NET 5.0 或者更高版本的SDK,输入如下命令即可安装最新的NuGet包

dotnet add package Apache.IoTDB

如果您想安装更早版本的客户端,只需要指定版本即可

# 安装0.12.1.2版本的客户端
dotnet add package Apache.IoTDB --version 0.12.1.2

快速入门

// 参数定义
string host = "localhost";
int port = 6667;
int pool_size = 2;

// 初始化session
var session_pool = new SessionPool(host, port, pool_size);

// 开启session
await session_pool.Open(false);

// 创建时间序列
await session_pool.CreateTimeSeries("root.test_group.test_device.ts1", TSDataType.TEXT, TSEncoding.PLAIN, Compressor.UNCOMPRESSED);
await session_pool.CreateTimeSeries("root.test_group.test_device.ts2", TSDataType.BOOLEAN, TSEncoding.PLAIN, Compressor.UNCOMPRESSED);
await session_pool.CreateTimeSeries("root.test_group.test_device.ts3", TSDataType.INT32, TSEncoding.PLAIN, Compressor.UNCOMPRESSED);

// 插入record
var measures = new List<string>{"ts1", "ts2", "ts3"};
var values = new List<object> { "test_text", true, (int)123 };
var timestamp = 1;
var rowRecord = new RowRecord(timestamp, values, measures);
await session_pool.InsertRecordAsync("root.test_group.test_device", rowRecord);

// 插入Tablet
var timestamp_lst = new List<long>{ timestamp + 1 };
var value_lst = new List<object> {"iotdb", true, (int) 12};
var tablet = new Tablet("root.test_group.test_device", measures, value_lst, timestamp_lst);
await session_pool.InsertTabletAsync(tablet);

// 关闭Session
await session_pool.Close();

全量接口说明

SessionPool 连接池支持并发客户端请求,线程安全。当 pool_size设为 1 时,其行为等同于单个 session。推荐使用 SessionPool ,作为实现与数据库交互的核心接口,SessionPool 集成了丰富的方法,支持数据写入、查询以及元数据操作等功能,详细介绍见下文。

基础接口

方法名参数描述示例
Openbool打开会话session_pool.Open(false)
Closenull关闭会话session_pool.Close()
IsOpennull查看会话状态session_pool.IsOpen()
OpenDebugModeLoggingConfiguration=null启用调试模式session_pool.OpenDebugMode()
CloseDebugModenull禁用调试模式session_pool.CloseDebugMode()
SetTimeZonestring设置时区session_pool.GetTimeZone()
GetTimeZonenull获取时区session_pool.GetTimeZone()

元数据接口

方法名参数描述示例
SetStorageGroupstring(创建)存储组session_pool.SetStorageGroup(“root.97209_TEST_CSHARP_CLIENT_GROUP_01”)
CreateTimeSeriesstring, TSDataType, TSEncoding, Compressor创建时间序列session_pool.InsertTabletsAsync(tablets)
CreateMultiTimeSeriesAsyncList, List , List , List创建多个时间序列session_pool.CreateMultiTimeSeriesAsync(ts_path_lst, data_type_lst, encoding_lst, compressor_lst);
CheckTimeSeriesExistsAsyncstring查看时间序列是否存在session_pool.CheckTimeSeriesExistsAsync(time series)

写入接口

C# 原生接口支持通过 Record 和 Tablet 两种方式进行数据写入:

  • RowRecord 是对 IoTDB 中的record数据进行封装和抽象,适合单行数据写入的场景,其构造方法如下
var rowRecord = 
  new RowRecord(long timestamps, List<object> values, List<string> measurements);
  • Tablet 是一种类似于表格的数据结构,适合一个设备若干行非空数据块写入的场景,其构造方法如下
var tablet = 
  new Tablet(string deviceId,  List<string> measurements, List<List<object>> values, List<long> timestamps);

Record

方法名参数描述示例
InsertRecordAsyncstring, RowRecord插入单条记录session_pool.InsertRecordAsync(“root.97209_TEST_CSHARP_CLIENT_GROUP.TEST_CSHARP_CLIENT_DEVICE”, new RowRecord(1, values, measures));
InsertRecordsAsyncList, List插入多条记录session_pool.InsertRecordsAsync(device_id, rowRecords)
InsertRecordsOfOneDeviceAsyncstring, List插入同一设备的记录session_pool.InsertRecordsOfOneDeviceAsync(device_id, rowRecords)
InsertRecordsOfOneDeviceSortedAsyncstring, List插入同一设备的有序记录session_pool.InsertRecordsOfOneDeviceSortedAsync(deviceId, sortedRowRecords);
TestInsertRecordAsyncstring, RowRecord测试插入记录session_pool.TestInsertRecordAsync(“root.97209_TEST_CSHARP_CLIENT_GROUP.TEST_CSHARP_CLIENT_DEVICE”, rowRecord)
TestInsertRecordsAsyncList, List测试插入记录session_pool.TestInsertRecordsAsync(device_id, rowRecords)

Tablet

方法名参数描述示例
InsertTabletAsyncTablet插入单个 tabletsession_pool.InsertTabletAsync(tablet)
InsertTabletsAsyncList插入一批 tabletssession_pool.InsertTabletsAsync(tablets)
TestInsertTabletAsyncTablet测试插入 tabletsession_pool.TestInsertTabletAsync(tablet)
TestInsertTabletsAsyncList测试插入 tabletssession_pool.TestInsertTabletsAsync(tablets)

查询接口

方法名参数描述示例
ExecuteQueryStatementAsyncstring执行 SQL 查询语句session_pool.ExecuteQueryStatementAsync(“select * from root.97209_TEST_CSHARP_CLIENT_GROUP.TEST_CSHARP_CLIENT_DEVICE where time<15”);
ExecuteNonQueryStatementAsyncstring执行 SQL 非查询语句session_pool.ExecuteNonQueryStatementAsync( “create timeseries root.97209_TEST_CSHARP_CLIENT_GROUP.TEST_CSHARP_CLIENT_DEVICE.status with datatype=BOOLEAN,encoding=PLAIN”)

删除接口

方法名参数描述示例
DeleteStorageGroupAsyncstring删除单个存储组session_pool.DeleteStorageGroupAsync(“root.97209_TEST_CSHARP_CLIENT_GROUP_01”)
DeleteStorageGroupsAsyncList删除存储组session_pool.DeleteStorageGroupAsync(“root.97209_TEST_CSHARP_CLIENT_GROUP”)
DeleteTimeSeriesAsyncList删除时间序列session_pool.DeleteTimeSeriesAsync(ts_path_lst)
DeleteTimeSeriesAsyncstring删除时间序列session_pool.DeleteTimeSeriesAsync(ts_path)
DeleteDataAsyncList, long, long删除数据session_pool.DeleteDataAsync(ts_path_lst, 2, 3)

示例代码

完整示例请参考:Apache.IoTDB.Samples