This is an automated email from the ASF dual-hosted git repository. haonan pushed a commit to branch query_v2_py in repository https://gitbox.apache.org/repos/asf/iotdb.git
commit 8a67fd3b0846a51e8d117e83b7ee50dacaae050d Author: HTHou <[email protected]> AuthorDate: Thu Mar 20 12:00:37 2025 +0800 dev --- .../client-py/iotdb/utils/IoTDBRpcDataSet.py | 2 +- iotdb-client/client-py/session_example.py | 367 ++++++++++++++++++++- 2 files changed, 366 insertions(+), 3 deletions(-) diff --git a/iotdb-client/client-py/iotdb/utils/IoTDBRpcDataSet.py b/iotdb-client/client-py/iotdb/utils/IoTDBRpcDataSet.py index 7d4c17907bd..2d30d30c66d 100644 --- a/iotdb-client/client-py/iotdb/utils/IoTDBRpcDataSet.py +++ b/iotdb-client/client-py/iotdb/utils/IoTDBRpcDataSet.py @@ -246,7 +246,7 @@ class IoTDBRpcDataSet(object): data_array = tmp_array result[i + 1] = data_array - self.data_frame = pd.DataFrame(result) + self.data_frame = pd.DataFrame(result, dtype=object) self.__query_result = None if not self.data_frame.empty: self.has_cached_data_frame = True diff --git a/iotdb-client/client-py/session_example.py b/iotdb-client/client-py/session_example.py index 676682794ac..ca610de9a0c 100644 --- a/iotdb-client/client-py/session_example.py +++ b/iotdb-client/client-py/session_example.py @@ -41,15 +41,378 @@ session = Session.init_from_node_urls( ) session.open(False) -with session.execute_query_statement("select * from root.**") as dataset: +# create and delete databases +session.set_storage_group("root.sg_test_01") +session.set_storage_group("root.sg_test_02") +session.set_storage_group("root.sg_test_03") +session.set_storage_group("root.sg_test_04") +session.delete_storage_group("root.sg_test_02") +session.delete_storage_groups(["root.sg_test_03", "root.sg_test_04"]) + +# setting time series. +session.create_time_series( + "root.sg_test_01.d_01.s_01", TSDataType.BOOLEAN, TSEncoding.PLAIN, Compressor.SNAPPY +) +session.create_time_series( + "root.sg_test_01.d_01.s_02", TSDataType.INT32, TSEncoding.PLAIN, Compressor.SNAPPY +) +session.create_time_series( + "root.sg_test_01.d_01.s_03", TSDataType.INT64, TSEncoding.PLAIN, Compressor.SNAPPY +) +session.create_time_series( + "root.sg_test_01.d_02.s_01", + TSDataType.BOOLEAN, + TSEncoding.PLAIN, + Compressor.SNAPPY, + None, + {"tag1": "v1"}, + {"description": "v1"}, + "temperature", +) + +# setting multiple time series once. +ts_path_lst_ = [ + "root.sg_test_01.d_01.s_04", + "root.sg_test_01.d_01.s_05", + "root.sg_test_01.d_01.s_06", + "root.sg_test_01.d_01.s_07", + "root.sg_test_01.d_01.s_08", + "root.sg_test_01.d_01.s_09", +] +data_type_lst_ = [ + TSDataType.FLOAT, + TSDataType.DOUBLE, + TSDataType.TEXT, + TSDataType.FLOAT, + TSDataType.DOUBLE, + TSDataType.TEXT, +] +encoding_lst_ = [TSEncoding.PLAIN for _ in range(len(data_type_lst_))] +compressor_lst_ = [Compressor.SNAPPY for _ in range(len(data_type_lst_))] +session.create_multi_time_series( + ts_path_lst_, data_type_lst_, encoding_lst_, compressor_lst_ +) + +ts_path_lst_ = [ + "root.sg_test_01.d_02.s_04", + "root.sg_test_01.d_02.s_05", + "root.sg_test_01.d_02.s_06", + "root.sg_test_01.d_02.s_07", + "root.sg_test_01.d_02.s_08", + "root.sg_test_01.d_02.s_09", +] +data_type_lst_ = [ + TSDataType.FLOAT, + TSDataType.DOUBLE, + TSDataType.TEXT, + TSDataType.FLOAT, + TSDataType.DOUBLE, + TSDataType.TEXT, +] +encoding_lst_ = [TSEncoding.PLAIN for _ in range(len(data_type_lst_))] +compressor_lst_ = [Compressor.SNAPPY for _ in range(len(data_type_lst_))] +tags_lst_ = [{"tag2": "v2"} for _ in range(len(data_type_lst_))] +attributes_lst_ = [{"description": "v2"} for _ in range(len(data_type_lst_))] +session.create_multi_time_series( + ts_path_lst_, + data_type_lst_, + encoding_lst_, + compressor_lst_, + None, + tags_lst_, + attributes_lst_, + None, +) + +# delete time series +session.delete_time_series( + [ + "root.sg_test_01.d_01.s_07", + "root.sg_test_01.d_01.s_08", + "root.sg_test_01.d_01.s_09", + ] +) + +# checking time series +print( + "s_07 expecting False, checking result: ", + session.check_time_series_exists("root.sg_test_01.d_01.s_07"), +) +print( + "s_03 expecting True, checking result: ", + session.check_time_series_exists("root.sg_test_01.d_01.s_03"), +) +print( + "d_02.s_01 expecting True, checking result: ", + session.check_time_series_exists("root.sg_test_01.d_02.s_01"), +) +print( + "d_02.s_06 expecting True, checking result: ", + session.check_time_series_exists("root.sg_test_01.d_02.s_06"), +) + +# insert one record into the database. +measurements_ = ["s_01", "s_02", "s_03", "s_04", "s_05", "s_06"] +values_ = [False, 10, 11, 1.1, 10011.1, "test_record"] +data_types_ = [ + TSDataType.BOOLEAN, + TSDataType.INT32, + TSDataType.INT64, + TSDataType.FLOAT, + TSDataType.DOUBLE, + TSDataType.TEXT, +] +session.insert_record("root.sg_test_01.d_01", 1, measurements_, data_types_, values_) + +# insert multiple records into database +measurements_list_ = [ + ["s_01", "s_02", "s_03", "s_04", "s_05", "s_06"], + ["s_01", "s_02", "s_03", "s_04", "s_05", "s_06"], +] +values_list_ = [ + [False, 22, 33, 4.4, 55.1, "test_records01"], + [True, 77, 88, 1.25, 8.125, bytes("test_records02", "utf-8")], +] +data_type_list_ = [data_types_, data_types_] +device_ids_ = ["root.sg_test_01.d_01", "root.sg_test_01.d_01"] +session.insert_records( + device_ids_, [2, 3], measurements_list_, data_type_list_, values_list_ +) + +# insert one tablet into the database. +values_ = [ + [False, 10, 11, 1.1, 10011.1, "test01"], + [True, 100, 11111, 1.25, 101.0, "test02"], + [False, 100, 1, 188.1, 688.25, "test03"], + [True, 0, 0, 0, 6.25, "test04"], +] # Non-ASCII text will cause error since bytes can only hold 0-128 nums. +timestamps_ = [4, 5, 6, 7] +tablet_ = Tablet( + "root.sg_test_01.d_01", measurements_, data_types_, values_, timestamps_ +) +session.insert_tablet(tablet_) + +# insert one numpy tablet into the database. +np_values_ = [ + np.array([False, True, False, True], TSDataType.BOOLEAN.np_dtype()), + np.array([10, 100, 100, 0], TSDataType.INT32.np_dtype()), + np.array([11, 11111, 1, 0], TSDataType.INT64.np_dtype()), + np.array([1.1, 1.25, 188.1, 0], TSDataType.FLOAT.np_dtype()), + np.array([10011.1, 101.0, 688.25, 6.25], TSDataType.DOUBLE.np_dtype()), + np.array(["test01", "test02", "test03", "test04"], TSDataType.TEXT.np_dtype()), +] +np_timestamps_ = np.array([1, 2, 3, 4], TSDataType.INT64.np_dtype()) +np_tablet_ = NumpyTablet( + "root.sg_test_01.d_02", measurements_, data_types_, np_values_, np_timestamps_ +) +session.insert_tablet(np_tablet_) + +# insert one unsorted numpy tablet into the database. +np_values_unsorted = [ + np.array([False, False, False, True, True], np.dtype(">?")), + np.array([0, 10, 100, 1000, 10000], np.dtype(">i4")), + np.array([1, 11, 111, 1111, 11111], np.dtype(">i8")), + np.array([1.1, 1.25, 188.1, 0, 8.999], np.dtype(">f4")), + np.array([10011.1, 101.0, 688.25, 6.25, 8, 776], np.dtype(">f8")), + np.array(["test09", "test08", "test07", "test06", "test05"]), +] +np_timestamps_unsorted = np.array([9, 8, 7, 6, 5], np.dtype(">i8")) +np_tablet_unsorted = NumpyTablet( + "root.sg_test_01.d_02", + measurements_, + data_types_, + np_values_unsorted, + np_timestamps_unsorted, +) + +# insert one numpy tablet into the database. +np_values_ = [ + np.array([False, True, False, True], TSDataType.BOOLEAN.np_dtype()), + np.array([10, 100, 100, 0], TSDataType.INT32.np_dtype()), + np.array([11, 11111, 1, 0], TSDataType.INT64.np_dtype()), + np.array([1.1, 1.25, 188.1, 0], TSDataType.FLOAT.np_dtype()), + np.array([10011.1, 101.0, 688.25, 6.25], TSDataType.DOUBLE.np_dtype()), + np.array(["test01", "test02", "test03", "test04"]), +] +np_timestamps_ = np.array([98, 99, 100, 101], TSDataType.INT64.np_dtype()) +np_bitmaps_ = [] +for i in range(len(measurements_)): + np_bitmaps_.append(BitMap(len(np_timestamps_))) +np_bitmaps_[0].mark(0) +np_bitmaps_[1].mark(1) +np_bitmaps_[2].mark(2) +np_bitmaps_[4].mark(3) +np_bitmaps_[5].mark(3) +np_tablet_with_none = NumpyTablet( + "root.sg_test_01.d_02", + measurements_, + data_types_, + np_values_, + np_timestamps_, + np_bitmaps_, +) +session.insert_tablet(np_tablet_with_none) + + +session.insert_tablet(np_tablet_unsorted) +print(np_tablet_unsorted.get_timestamps()) +for value in np_tablet_unsorted.get_values(): + print(value) + +# insert multiple tablets into database +tablet_01 = Tablet( + "root.sg_test_01.d_01", measurements_, data_types_, values_, [8, 9, 10, 11] +) +tablet_02 = Tablet( + "root.sg_test_01.d_01", measurements_, data_types_, values_, [12, 13, 14, 15] +) +session.insert_tablets([tablet_01, tablet_02]) + +# insert one tablet with empty cells into the database. +values_ = [ + [None, 10, 11, 1.1, 10011.1, "test01"], + [True, None, 11111, 1.25, 101.0, "test02"], + [False, 100, 1, None, 688.25, "test03"], + [True, 0, 0, 0, 6.25, None], +] # Non-ASCII text will cause error since bytes can only hold 0-128 nums. +timestamps_ = [16, 17, 18, 19] +tablet_ = Tablet( + "root.sg_test_01.d_01", measurements_, data_types_, values_, timestamps_ +) +session.insert_tablet(tablet_) + +# insert records of one device +time_list = [1, 2, 3] +measurements_list = [ + ["s_01", "s_02", "s_03"], + ["s_01", "s_02", "s_03"], + ["s_01", "s_02", "s_03"], +] +data_types_list = [ + [TSDataType.BOOLEAN, TSDataType.INT32, TSDataType.INT64], + [TSDataType.BOOLEAN, TSDataType.INT32, TSDataType.INT64], + [TSDataType.BOOLEAN, TSDataType.INT32, TSDataType.INT64], +] +values_list = [[False, 22, 33], [True, 1, 23], [False, 15, 26]] + +session.insert_records_of_one_device( + "root.sg_test_01.d_01", time_list, measurements_list, data_types_list, values_list +) + +# execute non-query sql statement +session.execute_non_query_statement( + "insert into root.sg_test_01.d_01(timestamp, s_02) values(16, 188)" +) + +# execute sql query statement +with session.execute_query_statement( + "select * from root.sg_test_01.d_01" +) as session_data_set: + session_data_set.set_fetch_size(1024) + while session_data_set.has_next(): + print(session_data_set.next()) +# execute sql query statement +with session.execute_query_statement( + "select s_01, s_02, s_03, s_04, s_05, s_06 from root.sg_test_01.d_02" +) as session_data_set: + session_data_set.set_fetch_size(1024) + while session_data_set.has_next(): + print(session_data_set.next()) + +# execute statement +with session.execute_statement( + "select * from root.sg_test_01.d_01" +) as session_data_set: + while session_data_set.has_next(): + print(session_data_set.next()) + +session.execute_statement( + "insert into root.sg_test_01.d_01(timestamp, s_02) values(16, 188)" +) + +# insert string records of one device +time_list = [1, 2, 3] +measurements_list = [ + ["s_01", "s_02", "s_03"], + ["s_01", "s_02", "s_03"], + ["s_01", "s_02", "s_03"], +] +values_list = [["False", "22", "33"], ["True", "1", "23"], ["False", "15", "26"]] + +session.insert_string_records_of_one_device( + "root.sg_test_01.d_03", + time_list, + measurements_list, + values_list, +) + +with session.execute_raw_data_query( + ["root.sg_test_01.d_03.s_01", "root.sg_test_01.d_03.s_02"], 1, 4 +) as session_data_set: + session_data_set.set_fetch_size(1024) + while session_data_set.has_next(): + print(session_data_set.next()) + +with session.execute_last_data_query( + ["root.sg_test_01.d_03.s_01", "root.sg_test_01.d_03.s_02"], 0 +) as session_data_set: + session_data_set.set_fetch_size(1024) + while session_data_set.has_next(): + print(session_data_set.next()) + +# insert tablet with new data types +measurements_new_type = ["s_01", "s_02", "s_03", "s_04"] +data_types_new_type = [ + TSDataType.DATE, + TSDataType.TIMESTAMP, + TSDataType.BLOB, + TSDataType.STRING, +] +values_new_type = [ + [date(2024, 1, 1), 1, b"\x12\x34", "test01"], + [date(2024, 1, 2), 2, b"\x12\x34", "test02"], + [date(2024, 1, 3), 3, b"\x12\x34", "test03"], + [date(2024, 1, 4), 4, b"\x12\x34", "test04"], +] +timestamps_new_type = [1, 2, 3, 4] +tablet_new_type = Tablet( + "root.sg_test_01.d_04", + measurements_new_type, + data_types_new_type, + values_new_type, + timestamps_new_type, +) +session.insert_tablet(tablet_new_type) +np_values_new_type = [ + np.array([date(2024, 2, 4), date(2024, 3, 4), date(2024, 4, 4), date(2024, 5, 4)]), + np.array([5, 6, 7, 8], TSDataType.INT64.np_dtype()), + np.array([b"\x12\x34", b"\x12\x34", b"\x12\x34", b"\x12\x34"]), + np.array(["test01", "test02", "test03", "test04"]), +] +np_timestamps_new_type = np.array([5, 6, 7, 8], TSDataType.INT64.np_dtype()) +np_tablet_new_type = NumpyTablet( + "root.sg_test_01.d_04", + measurements_new_type, + data_types_new_type, + np_values_new_type, + np_timestamps_new_type, +) +session.insert_tablet(np_tablet_new_type) +with session.execute_query_statement( + "select s_01,s_02,s_03,s_04 from root.sg_test_01.d_04" +) as dataset: print(dataset.get_column_names()) while dataset.has_next(): print(dataset.next()) -with session.execute_query_statement("select * from root.**") as dataset: +with session.execute_query_statement( + "select s_01,s_02,s_03,s_04 from root.sg_test_01.d_04" +) as dataset: df = dataset.todf() print(df.to_string()) +# delete database +session.delete_storage_group("root.sg_test_01") # close session connection. session.close()
