Skip to content

Commit f071cc0

Browse files
Return empty DataFrame for empty timestream query (#1430)
* Return empty DataFrame for empty timestream query * Black * Trigger CI/CD * Fix test query * Remove semicolon from query * Trigger CI/CD Co-authored-by: jaidisido <[email protected]>
1 parent e43f31b commit f071cc0

File tree

2 files changed

+35
-1
lines changed

2 files changed

+35
-1
lines changed

awswrangler/timestream.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -292,7 +292,8 @@ def query(
292292
result_iterator = _paginate_query(sql, pagination_config, boto3_session)
293293
if chunked:
294294
return result_iterator
295-
return pd.concat(result_iterator, ignore_index=True)
295+
# Prepending an empty DataFrame ensures returning an empty DataFrame if result_iterator is empty
296+
return pd.concat(itertools.chain([pd.DataFrame()], result_iterator), ignore_index=True)
296297

297298

298299
def create_database(

tests/test_timestream.py

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,39 @@ def test_basic_scenario(timestream_database_and_table, pagination):
4949
assert df.shape == (3, 8)
5050

5151

52+
@pytest.mark.parametrize("chunked", [False, True])
53+
def test_empty_query(timestream_database_and_table: str, chunked: bool) -> None:
54+
df = pd.DataFrame(
55+
{
56+
"time": [datetime.now() for _ in range(5)],
57+
"dim0": ["foo", "boo", "bar", "fizz", "buzz"],
58+
"dim1": [1, 2, 3, 4, 5],
59+
"measure": [1.0, 1.1, 1.2, 1.3, 1.4],
60+
}
61+
)
62+
rejected_records = wr.timestream.write(
63+
df=df,
64+
database=timestream_database_and_table,
65+
table=timestream_database_and_table,
66+
time_col="time",
67+
measure_col="measure",
68+
dimensions_cols=["dim0", "dim1"],
69+
)
70+
assert len(rejected_records) == 0
71+
72+
output = wr.timestream.query(
73+
f"""SELECT *
74+
FROM "{timestream_database_and_table}"."{timestream_database_and_table}"
75+
WHERE dim0 = 'non_existing_test_dimension'
76+
""",
77+
)
78+
79+
if chunked:
80+
assert list(output) == []
81+
else:
82+
assert output.empty
83+
84+
5285
def test_chunked_scenario(timestream_database_and_table):
5386
df = pd.DataFrame(
5487
{

0 commit comments

Comments
 (0)