通信服务协议

Thrift rpc 接口

简介

Thrift是一个远程方法调用软件框架,用来进行可扩展且跨语言的服务的开发。 它结合了功能强大的软件堆栈和代码生成引擎, 以构建在 C++, Java, Go,Python, PHP, Ruby, Erlang, Perl, Haskell, C#, Cocoa, JavaScript, Node.js, Smalltalk, and OCaml 这些编程语言间无缝结合的、高效的服务。

IoTDB服务端和客户端之间使用thrift进行通信,实际使用中建议使用IoTDB提供的原生客户端封装: Session或Session Pool。如有特殊需要,您也可以直接针对RPC接口进行编程

默认IoTDB服务端使用6667端口作为RPC通信端口,可修改配置项中的

1. rpc_port=6667

更改默认接口

rpc接口

1. // 打开一个 session
2. TSOpenSessionResp openSession(1:TSOpenSessionReq req);

4. // 关闭一个 session
5. TSStatus closeSession(1:TSCloseSessionReq req);

7. // 执行一条 SQL 语句
8. TSExecuteStatementResp executeStatement(1:TSExecuteStatementReq req);

10. // 批量执行 SQL 语句
11. TSStatus executeBatchStatement(1:TSExecuteBatchStatementReq req);

13. // 执行查询 SQL 语句
14. TSExecuteStatementResp executeQueryStatement(1:TSExecuteStatementReq req);

16. // 执行插入、删除 SQL 语句
17. TSExecuteStatementResp executeUpdateStatement(1:TSExecuteStatementReq req);

19. // 向服务器取下一批查询结果
20. TSFetchResultsResp fetchResults(1:TSFetchResultsReq req)

22. // 获取元数据
23. TSFetchMetadataResp fetchMetadata(1:TSFetchMetadataReq req)

25. // 取消某次查询操作
26. TSStatus cancelOperation(1:TSCancelOperationReq req);

28. // 关闭查询操作数据集,释放资源
29. TSStatus closeOperation(1:TSCloseOperationReq req);

31. // 获取时区信息
32. TSGetTimeZoneResp getTimeZone(1:i64 sessionId);

34. // 设置时区
35. TSStatus setTimeZone(1:TSSetTimeZoneReq req);

37. // 获取服务端配置
38. ServerProperties getProperties();

40. // 设置存储组
41. TSStatus setStorageGroup(1:i64 sessionId, 2:string storageGroup);

43. // 创建时间序列
44. TSStatus createTimeseries(1:TSCreateTimeseriesReq req);

46. // 创建多条时间序列
47. TSStatus createMultiTimeseries(1:TSCreateMultiTimeseriesReq req);

49. // 删除时间序列
50. TSStatus deleteTimeseries(1:i64 sessionId, 2:list<string> path)

52. // 删除存储组
53. TSStatus deleteStorageGroups(1:i64 sessionId, 2:list<string> storageGroup);

55. // 按行插入数据
56. TSStatus insertRecord(1:TSInsertRecordReq req);

58. // 按String格式插入一条数据
59. TSStatus insertStringRecord(1:TSInsertStringRecordReq req);

61. // 按列插入数据
62. TSStatus insertTablet(1:TSInsertTabletReq req);

64. // 按列批量插入数据
65. TSStatus insertTablets(1:TSInsertTabletsReq req);

67. // 按行批量插入数据
68. TSStatus insertRecords(1:TSInsertRecordsReq req);

70. // 按行批量插入同属于某个设备的数据
71. TSStatus insertRecordsOfOneDevice(1:TSInsertRecordsOfOneDeviceReq req);

73. // 按String格式批量按行插入数据
74. TSStatus insertStringRecords(1:TSInsertStringRecordsReq req);

76. // 测试按列插入数据的延迟,注意:该接口不真实插入数据,只用来测试网络延迟
77. TSStatus testInsertTablet(1:TSInsertTabletReq req);

79. // 测试批量按列插入数据的延迟,注意:该接口不真实插入数据,只用来测试网络延迟
80. TSStatus testInsertTablets(1:TSInsertTabletsReq req);

82. // 测试按行插入数据的延迟,注意:该接口不真实插入数据,只用来测试网络延迟
83. TSStatus testInsertRecord(1:TSInsertRecordReq req);

85. // 测试按String格式按行插入数据的延迟,注意:该接口不真实插入数据,只用来测试网络延迟
86. TSStatus testInsertStringRecord(1:TSInsertStringRecordReq req);

88. // 测试按行插入数据的延迟,注意:该接口不真实插入数据,只用来测试网络延迟
89. TSStatus testInsertRecords(1:TSInsertRecordsReq req);

91. // 测试按行批量插入同属于某个设备的数据的延迟,注意:该接口不真实插入数据,只用来测试网络延迟
92. TSStatus testInsertRecordsOfOneDevice(1:TSInsertRecordsOfOneDeviceReq req);

94. // 测试按String格式批量按行插入数据的延迟,注意:该接口不真实插入数据,只用来测试网络延迟
95. TSStatus testInsertStringRecords(1:TSInsertStringRecordsReq req);

97. // 删除数据
98. TSStatus deleteData(1:TSDeleteDataReq req);

100. // 执行原始数据查询
101. TSExecuteStatementResp executeRawDataQuery(1:TSRawDataQueryReq req);

103. // 向服务器申请一个查询语句ID
104. i64 requestStatementId(1:i64 sessionId);

IDL定义文件位置

IDL定义文件的路径是thrift/src/main/thrift/rpc.thrift,其中包括了结构体定义与函数定义、

生成文件位置

在mvn编译过程中,会调用thrift编译IDL文件,生成最终的.class文件 生成的文件夹路径为thrift/target/classes/org/apache/iotdb/service/rpc/thrift