<!--

    Licensed to the Apache Software Foundation (ASF) under one
    or more contributor license agreements.  See the NOTICE file
    distributed with this work for additional information
    regarding copyright ownership.  The ASF licenses this file
    to you under the Apache License, Version 2.0 (the
    "License"); you may not use this file except in compliance
    with the License.  You may obtain a copy of the License at
    
        http://www.apache.org/licenses/LICENSE-2.0
    
    Unless required by applicable law or agreed to in writing,
    software distributed under the License is distributed on an
    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    KIND, either express or implied.  See the License for the
    specific language governing permissions and limitations
    under the License.

-->

## 原生接口对比

此章节主要为Java原生接口与Python原生接口的差异性对比，主要为方便区分Java原生接口与Python原生的不同之处。



| 序号 | 接口名称以及作用          | Java接口函数                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  | Python接口函数                                               | <div style="width: 200pt">接口对比说明</div>                                                 |
| ---- | ------------------------- |-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| ------------------------------------------------------------ | ------------------------------------------------------------ |
| 1    | 初始化Session             | `Session.Builder.build();     Session.Builder().host(String host).port(int port).build();     Session.Builder().nodeUrls(List<String> nodeUrls).build();     Session.Builder().fetchSize(int fetchSize).username(String  username).password(String password).thriftDefaultBufferSize(int  thriftDefaultBufferSize).thriftMaxFrameSize(int  thriftMaxFrameSize).enableRedirection(boolean  enableCacheLeader).version(Version version).build();`                                                                                                                                                                                                           | `Session(ip, port_, username_,  password_,fetch_size=1024, zone_id="UTC+8")` | 1.Python原生接口缺少使用默认配置初始化session     2.Python原生接口缺少指定多个可连接节点初始化session     3.Python原生接口缺失使用其他配置项初始化session |
| 2    | 开启 Session              | `void open()     void open(boolean enableRPCCompression)`                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 | `session.open(enable_rpc_compression=False)`                 |                                                              |
| 3    | 关闭 Session              | `void close()`                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            | `session.close()`                                            |                                                              |
| 4    | 设置 Database                | `void setStorageGroup(String  storageGroupId)`                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            | `session.set_storage_group(group_name)`                      |                                                              |
| 5    | 删除 database                | `void deleteStorageGroup(String  storageGroup)     void deleteStorageGroups(List<String> storageGroups)`                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  | `session.delete_storage_group(group_name)     session.delete_storage_groups(group_name_lst)` |                                                              |
| 6    | 创建时间序列              | `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)`                                                                                                                    | `session.create_time_series(ts_path,  data_type, encoding, compressor,props=None, tags=None, attributes=None,  alias=None)             session.create_multi_time_series(ts_path_lst, data_type_lst, encoding_lst, compressor_lst,props_lst=None,  tags_lst=None, attributes_lst=None, alias_lst=None)` |                                                              |
| 7    | 创建对齐时间序列          | `void  createAlignedTimeseries(String prefixPath, List<String>  measurements,List<TSDataType> dataTypes, List<TSEncoding>  encodings,CompressionType compressor, List<String>  measurementAliasList);`                                                                                                                                                                                                                                                                                                                                                                                                                                                    | `session.create_aligned_time_series(device_id,  measurements_lst, data_type_lst, encoding_lst, compressor_lst)` |                                                              |
| 8    | 删除时间序列              | `void deleteTimeseries(String  path)     void deleteTimeseries(List<String> paths)`                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       | `session.delete_time_series(paths_list)`                     | Python原生接口缺少删除一个时间序列的接口                     |
| 9    | 检测时间序列是否存在      | `boolean  checkTimeseriesExists(String path)`                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             | `session.check_time_series_exists(path)`                     |                                                              |
| 10   | 元数据模版                | `public void  createSchemaTemplate(Template template);`                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   |                                                              |                                                              |
| 11   | 插入Tablet                | `void insertTablet(Tablet  tablet)     void insertTablets(Map<String, Tablet> tablets)`                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   | `session.insert_tablet(tablet_)     session.insert_tablets(tablet_lst)` |                                                              |
| 12   | 插入Record                | `void insertRecord(String  prefixPath, long time, List<String> measurements,List<TSDataType>  types, List<Object> values)     void insertRecords(List<String> deviceIds,List<Long>  times,List<List<String>> measurementsList,List<List<TSDataType>>  typesList,List<List<Object>> valuesList)     void insertRecordsOfOneDevice(String deviceId, List<Long>  times,List<List<Object>> valuesList)`                                                                                                                                                                                                                                                       | `session.insert_record(device_id,  timestamp, measurements_, data_types_, values_)     session.insert_records(device_ids_, time_list_, measurements_list_,  data_type_list_, values_list_)     session.insert_records_of_one_device(device_id, time_list, measurements_list,  data_types_list, values_list)` |                                                              |
| 13   | 带有类型推断的写入        | `void insertRecord(String  prefixPath, long time, List<String> measurements, List<String>  values)     void insertRecords(List<String> deviceIds, List<Long>  times,List<List<String>> measurementsList, List<List<String>>  valuesList)     void insertStringRecordsOfOneDevice(String deviceId, List<Long>  times,List<List<String>> measurementsList,  List<List<String>> valuesList)`                                                                                                                                                                                                                                                                 | `session.insert_str_record(device_id,  timestamp, measurements, string_values)` | 1.Python原生接口缺少插入多个  Record的接口     2.Python原生接口缺少插入同属于一个 device 的多个 Record |
| 14   | 对齐时间序列的写入        | `insertAlignedRecord     insertAlignedRecords     insertAlignedRecordsOfOneDevice     insertAlignedStringRecordsOfOneDevice     insertAlignedTablet     insertAlignedTablets`                                                                                                                                                                                                                                                                                                                                                                                                                                                                             | `insert_aligned_record     insert_aligned_records     insert_aligned_records_of_one_device     insert_aligned_tablet     insert_aligned_tablets` | Python原生接口缺少带有判断类型的对齐时间序列的写入           |
| 15   | 数据删除                  | `void deleteData(String path,  long endTime)     void deleteData(List<String> paths, long endTime)`                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       |                                                              | 1.Python原生接口缺少删除一条数据的接口     2.Python原生接口缺少删除多条数据的接口 |
| 16   | 数据查询                  | `SessionDataSet  executeRawDataQuery(List<String> paths, long startTime, long  endTime)     SessionDataSet executeLastDataQuery(List<String> paths, long  LastTime)`                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      |                                                              | 1.Python原生接口缺少原始数据查询的接口     2.Python原生接口缺少查询最后一条时间戳大于等于某个时间点的数据的接口 |
| 17   | IoTDB-SQL 接口-查询语句   | `SessionDataSet  executeQueryStatement(String sql)`                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       | `session.execute_query_statement(sql)`                       |                                                              |
| 18   | IoTDB-SQL 接口-非查询语句 | `void  executeNonQueryStatement(String sql)`                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              | `session.execute_non_query_statement(sql)`                   |                                                              |
| 19   | 测试接口                  | `void testInsertRecord(String  deviceId, long time, List<String> measurements, List<String>  values)     void testInsertRecord(String deviceId, long time, List<String>  measurements,List<TSDataType> types, List<Object> values)     void testInsertRecords(List<String> deviceIds, List<Long>  times,List<List<String>> measurementsList,  List<List<String>> valuesList)     void testInsertRecords(List<String> deviceIds, List<Long> times,List<List<String>>  measurementsList, List<List<TSDataType>>  typesList,List<List<Object>> valuesList)     void testInsertTablet(Tablet tablet)     void testInsertTablets(Map<String, Tablet> tablets)` | Python  客户端对测试的支持是基于testcontainers库             | Python接口无原生的测试接口                                   |
| 20   | 针对原生接口的连接池      | `SessionPool`                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             |                                                              | Python接口无针对原生接口的连接池                             |
| 21   | 集群信息相关的接口        | `iotdb-thrift-cluster`                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    |                                                              | Python接口不支持集群信息相关的接口                           |