Description
Feature Request
Could be considered a bug, really a matter of perspective.
Proposal: [Description of the feature]
If there is a fill()
clause attached to the query, the query should return all buckets specified, even if there are no matching points.
Current behavior: [What currently happens]
If the query has nothing but null results, the fill()
clause is ignored.
Simple measurement with one point from yesterday:
> select * from fillfoo
name: fillfoo
-------------
time value
2016-07-05T20:20:00Z 42
>
Selecting a SUM
with a GROUP BY time()
and fill()
clauses returns all expected buckets, with the fill()
clause applied to buckets with no data:
> select sum(value) from fillfoo where time > now() - 21h group by time(4h) fill(0)
name: fillfoo
-------------
time sum
2016-07-05T16:00:00Z 0
2016-07-05T20:00:00Z 42
2016-07-06T00:00:00Z 0
2016-07-06T04:00:00Z 0
2016-07-06T08:00:00Z 0
2016-07-06T12:00:00Z 0
2016-07-06T16:00:00Z 0
However, if every bucket has no data, fill()
is not invoked.
> select sum(value) from fillfoo where time > now() - 20h group by time(4h) fill(0)
>
Desired behavior: [What you would like to happen]
fill()
should be used to populate all buckets that don't otherwise have data, including when all buckets are null.
> select sum(value) from fillfoo where time > now() - 20h group by time(4h) fill(0)
name: fillfoo
-------------
time sum
2016-07-06T00:00:00Z 0
2016-07-06T04:00:00Z 0
2016-07-06T08:00:00Z 0
2016-07-06T12:00:00Z 0
2016-07-06T16:00:00Z 0
Use case: [Why is this important (helps with prioritizing requests)]
This is not expected behavior and leads to user confusion when they expect fill()
to always be applied:
https://groups.google.com/d/msgid/influxdb/6b233752-edd2-4523-9022-5c83dbcae344%40googlegroups.com
#6412
#6953