influxdata / influxdata/influxdb

fill should force a return of values, even if the query has none

Open
#6,967 40 comments 129 reactions 2 assignees Claimed by @docmerlin View on GitHub
area/2.x area/influxql area/queries flux/triaged pm/review support
Dominant language
Rust
Stars
31.7k
Forks
3.7k
Avg merge
13h 37m
Merged PRs (30d)
8

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
https://github.com/influxdata/influxdb/issues/6412
https://github.com/influxdata/influxdb/issues/6953

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.