// Select the bottom `num` points for `field` and sort by any extra tags or fields. func (n *chainnode) Bottom(num int64, field string, fieldsAndTags ...string) *InfluxQLNode { tags := make([]int, len(fieldsAndTags)) for i := range fieldsAndTags { tags[i] = i } i := newInfluxQLNode("bottom", field, n.Provides(), BatchEdge, ReduceCreater{ CreateFloatBulkReducer: func() (FloatBulkPointAggregator, influxql.FloatPointEmitter) { fn := influxql.NewFloatSliceFuncReducer(influxql.NewFloatBottomReduceSliceFunc( int(num), tags, influxql.Interval{}, )) return fn, fn }, CreateIntegerBulkReducer: func() (IntegerBulkPointAggregator, influxql.IntegerPointEmitter) { fn := influxql.NewIntegerSliceFuncReducer(influxql.NewIntegerBottomReduceSliceFunc( int(num), tags, influxql.Interval{}, )) return fn, fn }, TopBottomCallInfo: &TopBottomCallInfo{ FieldsAndTags: fieldsAndTags, }, }) n.linkChild(i) return i }
// Produce batch of only the distinct points. func (n *chainnode) Distinct(field string) *InfluxQLNode { i := newInfluxQLNode("distinct", field, n.Provides(), BatchEdge, ReduceCreater{ CreateFloatBulkReducer: func() (FloatBulkPointAggregator, influxql.FloatPointEmitter) { fn := influxql.NewFloatSliceFuncReducer(influxql.FloatDistinctReduceSlice) return fn, fn }, CreateIntegerBulkReducer: func() (IntegerBulkPointAggregator, influxql.IntegerPointEmitter) { fn := influxql.NewIntegerSliceFuncReducer(influxql.IntegerDistinctReduceSlice) return fn, fn }, }) n.linkChild(i) return i }
// Select a point at the given percentile. This is a selector function, no interpolation between points is performed. func (n *chainnode) Percentile(field string, percentile float64) *InfluxQLNode { i := newInfluxQLNode("percentile", field, n.Provides(), StreamEdge, ReduceCreater{ CreateFloatBulkReducer: func() (FloatBulkPointAggregator, influxql.FloatPointEmitter) { fn := influxql.NewFloatSliceFuncReducer(influxql.NewFloatPercentileReduceSliceFunc(percentile)) return fn, fn }, CreateIntegerBulkReducer: func() (IntegerBulkPointAggregator, influxql.IntegerPointEmitter) { fn := influxql.NewIntegerSliceFuncReducer(influxql.NewIntegerPercentileReduceSliceFunc(percentile)) return fn, fn }, }) n.linkChild(i) return i }