Skip to content

Commit b679881

Browse files
committed
add sessiondataset.has_next_df and .next_df to python api from 2082
1 parent 4ac05d8 commit b679881

16 files changed

Lines changed: 597 additions & 12 deletions

src/UserGuide/Master/Table/API/Programming-Python-Native-API_apache.md

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,27 @@ pip3 install apache-iotdb>=2.0
4545
| execute_query_statement | Executes a query SQL statement and retrieves results. | sql: `str` | `SessionDataSet` |
4646
| close | Closes the session and releases resources. | None | None |
4747

48+
**Since V2.0.8-beta**, `SessionDataSet` provides methods for batch DataFrame retrieval to efficiently handle large-volume queries:
49+
50+
```python
51+
# Batch DataFrame retrieval
52+
has_next = result.has_next_df()
53+
if has_next:
54+
df = result.next_df()
55+
# Process DataFrame
56+
```
57+
58+
**Method Details:**
59+
- `has_next_df()`: Returns `True`/`False` indicating whether more data exists
60+
- `next_df()`: Returns a `DataFrame` or `None`. Each call returns `fetchSize` rows (default: 5000 rows, controlled by Session's `fetch_size` parameter):
61+
- If remaining data ≥ `fetchSize`: returns `fetchSize` rows
62+
- If remaining data < `fetchSize`: returns all remaining rows
63+
- If traversal completes: returns `None`
64+
- Session validates `fetchSize` at initialization: if ≤0, resets to 5000 and logs warning: `fetch_size xxx is illegal, use default fetch_size 5000`
65+
66+
**Note:** Avoid mixing different traversal methods (e.g., combining `todf()` with `next_df()`), which may cause unexpected errors.
67+
68+
4869
#### Sample Code
4970

5071
```Python
@@ -488,10 +509,16 @@ def query_data():
488509
print(res.next())
489510

490511
print("get data from table1")
491-
res = session.execute_query_statement("select * from table0")
512+
res = session.execute_query_statement("select * from table1")
492513
while res.has_next():
493514
print(res.next())
494515

516+
# Querying Table Data Using Batch DataFrame (Recommended for Large Datasets)
517+
print("get data from table0 using batch DataFrame")
518+
res = session.execute_query_statement("select * from table0")
519+
while res.has_next_df():
520+
print(res.next_df())
521+
495522
session.close()
496523

497524

src/UserGuide/Master/Table/API/Programming-Python-Native-API_timecho.md

Lines changed: 29 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,27 @@ pip3 install apache-iotdb>=2.0
4545
| execute_query_statement | Executes a query SQL statement and retrieves results. | sql: `str` | `SessionDataSet` |
4646
| close | Closes the session and releases resources. | None | None |
4747

48+
**Since V2.0.8**, `SessionDataSet` provides methods for batch DataFrame retrieval to efficiently handle large-volume queries:
49+
50+
```python
51+
# Batch DataFrame retrieval
52+
has_next = result.has_next_df()
53+
if has_next:
54+
df = result.next_df()
55+
# Process DataFrame
56+
```
57+
58+
**Method Details:**
59+
- `has_next_df()`: Returns `True`/`False` indicating whether more data exists
60+
- `next_df()`: Returns a `DataFrame` or `None`. Each call returns `fetchSize` rows (default: 5000 rows, controlled by Session's `fetch_size` parameter):
61+
- If remaining data ≥ `fetchSize`: returns `fetchSize` rows
62+
- If remaining data < `fetchSize`: returns all remaining rows
63+
- If traversal completes: returns `None`
64+
- Session validates `fetchSize` at initialization: if ≤0, resets to 5000 and logs warning: `fetch_size xxx is illegal, use default fetch_size 5000`
65+
66+
**Note:** Avoid mixing different traversal methods (e.g., combining `todf()` with `next_df()`), which may cause unexpected errors.
67+
68+
4869
#### Sample Code
4970

5071
```Python
@@ -488,10 +509,16 @@ def query_data():
488509
print(res.next())
489510

490511
print("get data from table1")
491-
res = session.execute_query_statement("select * from table0")
512+
res = session.execute_query_statement("select * from table1")
492513
while res.has_next():
493514
print(res.next())
494-
515+
516+
# Querying Table Data Using Batch DataFrame (Recommended for Large Datasets)
517+
print("get data from table0 using batch DataFrame")
518+
res = session.execute_query_statement("select * from table0")
519+
while res.has_next_df():
520+
print(res.next_df())
521+
495522
session.close()
496523

497524

src/UserGuide/Master/Tree/API/Programming-Python-Native-API_apache.md

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -556,6 +556,52 @@ session.close()
556556
df = ...
557557
```
558558

559+
**Since V2.0.8-beta**, `SessionDataSet` provides methods for batch DataFrame retrieval to efficiently handle large-volume queries:
560+
561+
```python
562+
# Batch DataFrame retrieval
563+
has_next = result.has_next_df()
564+
if has_next:
565+
df = result.next_df()
566+
# Process DataFrame
567+
```
568+
569+
**Method Details:**
570+
- `has_next_df()`: Returns `True`/`False` indicating whether more data exists
571+
- `next_df()`: Returns a `DataFrame` or `None`. Each call returns `fetchSize` rows (default: 5000 rows, controlled by Session's `fetch_size` parameter):
572+
- If remaining data ≥ `fetchSize`: returns `fetchSize` rows
573+
- If remaining data < `fetchSize`: returns all remaining rows
574+
- If traversal completes: returns `None`
575+
- Session validates `fetchSize` at initialization: if ≤0, resets to 5000 and logs warning: `fetch_size xxx is illegal, use default fetch_size 5000`
576+
577+
**Note:** Avoid mixing different traversal methods (e.g., combining `todf()` with `next_df()`), which may cause unexpected errors.
578+
579+
**Usage Example:**
580+
581+
```python
582+
from iotdb.Session import Session
583+
584+
# Initialize session with fetch_size=2
585+
session = Session(
586+
host="127.0.0.1", port="6667", fetch_size=2
587+
)
588+
session.open(False)
589+
session.execute_non_query_statement("CREATE DATABASE root.device0")
590+
591+
# Insert 3 records
592+
session.insert_str_record("root.device0", 123, "pressure", "15.0")
593+
session.insert_str_record("root.device0", 124, "pressure", "15.0")
594+
session.insert_str_record("root.device0", 125, "pressure", "15.0")
595+
596+
# Query and batch retrieve
597+
with session.execute_query_statement("SELECT * FROM root.device0") as session_data_set:
598+
while session_data_set.has_next_df():
599+
df = session_data_set.next_df()
600+
# Outputs two DataFrames: first with 2 rows, second with 1 row
601+
print(df)
602+
603+
session.close()
604+
```
559605

560606
## 10. IoTDB Testcontainer
561607

src/UserGuide/Master/Tree/API/Programming-Python-Native-API_timecho.md

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -557,6 +557,54 @@ df = ...
557557
```
558558

559559

560+
**Since V2.0.8**, `SessionDataSet` provides methods for batch DataFrame retrieval to efficiently handle large-volume queries:
561+
562+
```python
563+
# Batch DataFrame retrieval
564+
has_next = result.has_next_df()
565+
if has_next:
566+
df = result.next_df()
567+
# Process DataFrame
568+
```
569+
570+
**Method Details:**
571+
- `has_next_df()`: Returns `True`/`False` indicating whether more data exists
572+
- `next_df()`: Returns a `DataFrame` or `None`. Each call returns `fetchSize` rows (default: 5000 rows, controlled by Session's `fetch_size` parameter):
573+
- If remaining data ≥ `fetchSize`: returns `fetchSize` rows
574+
- If remaining data < `fetchSize`: returns all remaining rows
575+
- If traversal completes: returns `None`
576+
- Session validates `fetchSize` at initialization: if ≤0, resets to 5000 and logs warning: `fetch_size xxx is illegal, use default fetch_size 5000`
577+
578+
**Note:** Avoid mixing different traversal methods (e.g., combining `todf()` with `next_df()`), which may cause unexpected errors.
579+
580+
**Usage Example:**
581+
582+
```python
583+
from iotdb.Session import Session
584+
585+
# Initialize session with fetch_size=2
586+
session = Session(
587+
host="127.0.0.1", port="6667", fetch_size=2
588+
)
589+
session.open(False)
590+
session.execute_non_query_statement("CREATE DATABASE root.device0")
591+
592+
# Insert 3 records
593+
session.insert_str_record("root.device0", 123, "pressure", "15.0")
594+
session.insert_str_record("root.device0", 124, "pressure", "15.0")
595+
session.insert_str_record("root.device0", 125, "pressure", "15.0")
596+
597+
# Query and batch retrieve
598+
with session.execute_query_statement("SELECT * FROM root.device0") as session_data_set:
599+
while session_data_set.has_next_df():
600+
df = session_data_set.next_df()
601+
# Outputs two DataFrames: first with 2 rows, second with 1 row
602+
print(df)
603+
604+
session.close()
605+
```
606+
607+
560608
## 10. IoTDB Testcontainer
561609

562610
The Test Support is based on the lib `testcontainers` (https://testcontainers-python.readthedocs.io/en/latest/index.html) which you need to install in your project if you want to use the feature.

src/UserGuide/latest-Table/API/Programming-Python-Native-API_apache.md

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,27 @@ pip3 install apache-iotdb>=2.0
4545
| execute_query_statement | Executes a query SQL statement and retrieves results. | sql: `str` | `SessionDataSet` |
4646
| close | Closes the session and releases resources. | None | None |
4747

48+
**Since V2.0.8-beta**, `SessionDataSet` provides methods for batch DataFrame retrieval to efficiently handle large-volume queries:
49+
50+
```python
51+
# Batch DataFrame retrieval
52+
has_next = result.has_next_df()
53+
if has_next:
54+
df = result.next_df()
55+
# Process DataFrame
56+
```
57+
58+
**Method Details:**
59+
- `has_next_df()`: Returns `True`/`False` indicating whether ore data exists
60+
- `next_df()`: Returns a `DataFrame` or `None`. Each call returns `fetchSize` rows (default: 5000 rows, controlled by Session's `fetch_size` parameter):
61+
- If remaining data ≥ `fetchSize`: returns `fetchSize` rows
62+
- If remaining data < `fetchSize`: returns all remaining rows
63+
- If traversal completes: returns `None`
64+
- Session validates `fetchSize` at initialization: if ≤0, resets to 5000 and logs warning: `fetch_size xxx is illegal, use default fetch_size 5000`
65+
66+
**Note:** Avoid mixing different traversal methods (e.g., combining `todf()` with `next_df()`), which may cause unexpected errors.
67+
68+
4869
#### Sample Code
4970

5071
```Python
@@ -488,10 +509,16 @@ def query_data():
488509
print(res.next())
489510

490511
print("get data from table1")
491-
res = session.execute_query_statement("select * from table0")
512+
res = session.execute_query_statement("select * from table1")
492513
while res.has_next():
493514
print(res.next())
494515

516+
# Querying Table Data Using Batch DataFrame (Recommended for Large Datasets)
517+
print("get data from table0 using batch DataFrame")
518+
res = session.execute_query_statement("select * from table0")
519+
while res.has_next_df():
520+
print(res.next_df())
521+
495522
session.close()
496523

497524

src/UserGuide/latest-Table/API/Programming-Python-Native-API_timecho.md

Lines changed: 28 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,26 @@ pip3 install apache-iotdb>=2.0
4545
| execute_query_statement | Executes a query SQL statement and retrieves results. | sql: `str` | `SessionDataSet` |
4646
| close | Closes the session and releases resources. | None | None |
4747

48+
**Since V2.0.8**, `SessionDataSet` provides methods for batch DataFrame retrieval to efficiently handle large-volume queries:
49+
50+
```python
51+
# Batch DataFrame retrieval
52+
has_next = result.has_next_df()
53+
if has_next:
54+
df = result.next_df()
55+
# Process DataFrame
56+
```
57+
58+
**Method Details:**
59+
- `has_next_df()`: Returns `True`/`False` indicating whether more data exists
60+
- `next_df()`: Returns a `DataFrame` or `None`. Each call returns `fetchSize` rows (default: 5000 rows, controlled by Session's `fetch_size` parameter):
61+
- If remaining data ≥ `fetchSize`: returns `fetchSize` rows
62+
- If remaining data < `fetchSize`: returns all remaining rows
63+
- If traversal completes: returns `None`
64+
- Session validates `fetchSize` at initialization: if ≤0, resets to 5000 and logs warning: `fetch_size xxx is illegal, use default fetch_size 5000`
65+
66+
**Note:** Avoid mixing different traversal methods (e.g., combining `todf()` with `next_df()`), which may cause unexpected errors.
67+
4868
#### Sample Code
4969

5070
```Python
@@ -488,10 +508,16 @@ def query_data():
488508
print(res.next())
489509

490510
print("get data from table1")
491-
res = session.execute_query_statement("select * from table0")
511+
res = session.execute_query_statement("select * from table1")
492512
while res.has_next():
493513
print(res.next())
494-
514+
515+
# Querying Table Data Using Batch DataFrame (Recommended for Large Datasets)
516+
print("get data from table0 using batch DataFrame")
517+
res = session.execute_query_statement("select * from table0")
518+
while res.has_next_df():
519+
print(res.next_df())
520+
495521
session.close()
496522

497523

src/UserGuide/latest/API/Programming-Python-Native-API_apache.md

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -556,6 +556,52 @@ session.close()
556556
df = ...
557557
```
558558

559+
**Since V2.0.8-beta**, `SessionDataSet` provides methods for batch DataFrame retrieval to efficiently handle large-volume queries:
560+
561+
```python
562+
# Batch DataFrame retrieval
563+
has_next = result.has_next_df()
564+
if has_next:
565+
df = result.next_df()
566+
# Process DataFrame
567+
```
568+
569+
**Method Details:**
570+
- `has_next_df()`: Returns `True`/`False` indicating whether more data exists
571+
- `next_df()`: Returns a `DataFrame` or `None`. Each call returns `fetchSize` rows (default: 5000 rows, controlled by Session's `fetch_size` parameter):
572+
- If remaining data ≥ `fetchSize`: returns `fetchSize` rows
573+
- If remaining data < `fetchSize`: returns all remaining rows
574+
- If traversal completes: returns `None`
575+
- Session validates `fetchSize` at initialization: if ≤0, resets to 5000 and logs warning: `fetch_size xxx is illegal, use default fetch_size 5000`
576+
577+
**Note:** Avoid mixing different traversal methods (e.g., combining `todf()` with `next_df()`), which may cause unexpected errors.
578+
579+
**Usage Example:**
580+
581+
```python
582+
from iotdb.Session import Session
583+
584+
# Initialize session with fetch_size=2
585+
session = Session(
586+
host="127.0.0.1", port="6667", fetch_size=2
587+
)
588+
session.open(False)
589+
session.execute_non_query_statement("CREATE DATABASE root.device0")
590+
591+
# Insert 3 records
592+
session.insert_str_record("root.device0", 123, "pressure", "15.0")
593+
session.insert_str_record("root.device0", 124, "pressure", "15.0")
594+
session.insert_str_record("root.device0", 125, "pressure", "15.0")
595+
596+
# Query and batch retrieve
597+
with session.execute_query_statement("SELECT * FROM root.device0") as session_data_set:
598+
while session_data_set.has_next_df():
599+
df = session_data_set.next_df()
600+
# Outputs two DataFrames: first with 2 rows, second with 1 row
601+
print(df)
602+
603+
session.close()
604+
```
559605

560606
## 10. IoTDB Testcontainer
561607

0 commit comments

Comments
 (0)