Return data query_api.query_data_frame() are vary from time to time given the query only use absolute values

Steps to reproduce:
List the minimal actions needed to reproduce the behavior.

tz = datetime.timezone(datetime.timedelta(hours=7))
p = {
    "_start": datetime.datetime(2022, 5, 28).astimezone(tz),
    "_end": datetime.datetime(2022, 5, 29).astimezone(tz),
}
        
dfs = query_api.query_data_frame('''
from(bucket:"db-5")
    |> range(start: _start, stop: _end) 
    |> filter(fn: (r) => r["_measurement"] == "mqtt")
''', params=p)
dfs = {df['mqtt_topic'][0]:df for df in dfs}
  1. influx cloud database set up with some data
  2. run query_api.query_data_frame()

Expected behavior:
Describe what you expected to happen.

Always return all 40 dataframes.

Actual behavior:
Describe What actually happened.

Below are 4 consecutive run.

Return 34-40 [34, 36, 37, 40] dataframes randomly.

Further inspection shown that db return different size of byte → different content too.

Link to the Github isuue
Link to Stackoverflow with similar case

Solultion in github issue.

I think I found why it is happening the way it is.
I naively assume that all dataframes is different mqtt_topic.
Actually, that is not the case. the way db return data in random order might be what to blame.
When the consecutive dataframe(in fact it is csv data) having the same columns, it merges.
that why we see the size changes and that is why the number of dataframe vary.
from the API perspective side, why does the api implicitly split the data into arbitrary dataframes(depend on server)?
Would it be better to just always return 1 big dataframe with null values.