Query TopNAggregation

Query operation queries the data in a top-n-aggregation.

bydbctl is the command line tool in examples.

The input contains two parts:

  • Request: a YAML-based text which is defined by the API
  • Time Range: YAML and CLI’s flags both support it.

Time Range

The query specification contains time_range field. The request should set absolute times to it. bydbctl also provides start and end flags to support passing absolute and relative times.

“start” and “end” specify a time range during which the query is performed, they can be an absolute time like “2006-01-02T15:04:05Z07:00”, or relative time (to the current time) like “-30m”, or “30m”. They are both optional and their default values follow the rules below:

  • when “start” and “end” are both absent, “start = now - 30 minutes” and “end = now”, namely past 30 minutes;
  • when “start” is absent and “end” is present, this command calculates “start” (minus 30 units), e.g. “end = 2022-11-09T12:34:00Z”, so “start = end - 30 minutes = 2022-11-09T12:04:00Z”;
  • when “start” is present and “end” is absent, this command calculates “end” (plus 30 units), e.g. “start = 2022-11-09T12:04:00Z”, so “end = start + 30 minutes = 2022-11-09T12:34:00Z”.

Understand the schema you are querying

Before querying the data, you need to know the top-n-aggregation name, source measure and other basic information in the top-n-aggregation. You can use the bydbctl topn get command to get the top-n-aggregation schema. If you want to get the schema of a top-n-aggregation named service_instance_cpm_minute_top_bottom_100 in the group sw_metric, you can use the below command:

bydbctl topn get -g sw_metric -n service_instance_cpm_minute_top_bottom_100
topNAggregation:
  countersNumber: 1000
  criteria: null
  fieldName: value
  fieldValueSort: SORT_UNSPECIFIED
  groupByTagNames:
  - service_id
  lruSize: 10
  metadata:
    group: sw_metric
    name: service_instance_cpm_minute_top_bottom_100
  sourceMeasure:
    group: sw_metric
    name: service_instance_cpm_minute
  updatedAt: null

Examples

The following examples use above schema to show how to query data in a top-n-aggregation and cover some common use cases:

Query between specific time range

To retrieve a series of items between 2021-09-01T23:10:00Z and 2021-09-01T23:35:00Z could use the below command. These items also choose a tag service_id which lives in a family named default. The fieldValueSort is an enumeration type, with 0 for SORT_UNSPECIFIED, 1 for SORT_DESC, and 2 for SORT_ASC.

bydbctl topn query -f - <<EOF
name: "service_instance_cpm_minute_top_bottom_100"
groups: ["sw_metric"]
tagProjection:
  tagFamilies:
    - name: "default"
      tags: ["service_id"]
timeRange:
  begin: 2021-09-01T23:10:00+08:00
  end: 2021-09-01T23:35:00+08:00
topN: 3
agg: "AGGREGATION_FUNCTION_MAX"
fieldValueSort: "SORT_DESC"
EOF

Query using relative time duration

The below command could query data in the last 30 minutes using relative time duration :

bydbctl topn query --start -30m -f - <<EOF
name: "service_instance_cpm_minute_top_bottom_100"
groups: ["sw_metric"]
tagProjection:
  tagFamilies:
    - name: "default"
      tags: ["service_id"]
topN: 3
agg: "AGGREGATION_FUNCTION_MAX"
fieldValueSort: "SORT_DESC"
EOF

Query with filter

The below command could query data with a filter where the service_id is svc_1:

bydbctl topn query -f - <<EOF
name: "service_instance_cpm_minute_top_bottom_100"
groups: ["sw_metric"]
topN: 3
agg: "AGGREGATION_FUNCTION_MAX"
fieldValueSort: "SORT_DESC"
conditions:
  - name: "service_id"
    op: "BINARY_OP_EQ"
    value:
      str:
        value: "svc_1"
EOF

Note: Only tags defined in groupByTagNames and used with the EQ operation are supported for filtering.

More filter operations can be found in here.

More examples can be found in here.

API Reference

MeasureService v1