Skip to content

Commit 16a555c

Browse files
authored
add sessiondataset.has_next_df and .next_df to python api from 2082 (#996)
* add sessiondataset.has_next_df and .next_df to python api from 2082 * adjust version beta * remove beta from timecho
1 parent 764b963 commit 16a555c

16 files changed

+609
-25
lines changed

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

Lines changed: 30 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,27 @@ Note: Do not use a newer client to connect to an older server, as this may cause
4646
| execute_query_statement | Executes a query SQL statement and retrieves results. | sql: `str` | `SessionDataSet` |
4747
| close | Closes the session and releases resources. | None | None |
4848

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

5172
```Python
@@ -491,10 +512,16 @@ def query_data():
491512
print(res.next())
492513

493514
print("get data from table1")
494-
with session.execute_query_statement("select * from table0") as res:
495-
while res.has_next():
496-
print(res.next())
515+
with session.execute_query_statement("select * from table1") as res:
516+
while res.has_next():
517+
print(res.next())
497518

519+
# Querying Table Data Using Batch DataFrame (Recommended for Large Datasets)
520+
print("get data from table0 using batch DataFrame")
521+
with session.execute_query_statement("select * from table0") as res:
522+
while res.has_next_df():
523+
print(res.next_df())
524+
498525
session.close()
499526

500527

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

Lines changed: 30 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,27 @@ Note: Do not use a newer client to connect to an older server, as this may cause
4646
| execute_query_statement | Executes a query SQL statement and retrieves results. | sql: `str` | `SessionDataSet` |
4747
| close | Closes the session and releases resources. | None | None |
4848

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

5172
```Python
@@ -491,9 +512,15 @@ def query_data():
491512
print(res.next())
492513

493514
print("get data from table1")
494-
with session.execute_query_statement("select * from table0") as res:
495-
while res.has_next():
496-
print(res.next())
515+
with session.execute_query_statement("select * from table1") as res:
516+
while res.has_next():
517+
print(res.next())
518+
519+
# Querying Table Data Using Batch DataFrame (Recommended for Large Datasets)
520+
print("get data from table0 using batch DataFrame")
521+
with session.execute_query_statement("select * from table0") as res:
522+
while res.has_next_df():
523+
print(res.next_df())
497524

498525
session.close()
499526

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
@@ -557,6 +557,52 @@ session.close()
557557
df = ...
558558
```
559559

560+
**Since V2.0.8-beta**, `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+
```
560606

561607
## 10. IoTDB Testcontainer
562608

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
@@ -558,6 +558,54 @@ df = ...
558558
```
559559

560560

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

563611
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
@@ -46,6 +46,27 @@ Note: Do not use a newer client to connect to an older server, as this may cause
4646
| execute_query_statement | Executes a query SQL statement and retrieves results. | sql: `str` | `SessionDataSet` |
4747
| close | Closes the session and releases resources. | None | None |
4848

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

5172
```Python
@@ -491,10 +512,16 @@ def query_data():
491512
print(res.next())
492513

493514
print("get data from table1")
494-
with session.execute_query_statement("select * from table0") as res:
515+
with session.execute_query_statement("select * from table1") as res:
495516
while res.has_next():
496517
print(res.next())
497518

519+
# Querying Table Data Using Batch DataFrame (Recommended for Large Datasets)
520+
print("get data from table0 using batch DataFrame")
521+
with session.execute_query_statement("select * from table0") as res:
522+
while res.has_next_df():
523+
print(res.next_df())
524+
498525
session.close()
499526

500527

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

Lines changed: 31 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,26 @@ Note: Do not use a newer client to connect to an older server, as this may cause
4646
| execute_query_statement | Executes a query SQL statement and retrieves results. | sql: `str` | `SessionDataSet` |
4747
| close | Closes the session and releases resources. | None | None |
4848

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

5171
```Python
@@ -490,11 +510,17 @@ def query_data():
490510
while res.has_next():
491511
print(res.next())
492512

493-
print("get data from table1")
494-
with session.execute_query_statement("select * from table0") as res:
495-
while res.has_next():
496-
print(res.next())
497-
513+
print("get data from table1")
514+
with session.execute_query_statement("select * from table1") as res:
515+
while res.has_next():
516+
print(res.next())
517+
518+
# Querying Table Data Using Batch DataFrame (Recommended for Large Datasets)
519+
print("get data from table0 using batch DataFrame")
520+
with session.execute_query_statement("select * from table0") as res:
521+
while res.has_next_df():
522+
print(res.next_df())
523+
498524
session.close()
499525

500526

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

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

560+
**Since V2.0.8-beta**, `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+
```
560606

561607
## 10. IoTDB Testcontainer
562608

0 commit comments

Comments
 (0)