All Products
Search
Document Center

Time Series Database:Use the SDK multi-value data model to read data

Last Updated:Mar 28, 2026

Use the multiFieldQuery() method to query data stored in the multi-value data model. A single query retrieves multiple fields from the same metric, with independent aggregators and downsampling settings per field.

How it works

Build a query in three steps:

  1. Create one MultiFieldSubQueryDetails object per field. Each specifies the field name, aggregator, and downsampling interval.

  2. Create a MultiFieldSubQuery that groups the field details under a metric name and applies an optional tag filter.

  3. Create a MultiFieldQuery with the time range and the subquery, then call tsdb.multiFieldQuery(query).

Query multi-value data

The following example queries three specific fields (speed, level, temperature) and all fields using MAX and MIN aggregators. Results are filtered by the district tag.

// Step 1: Define field-level query details.
// Each MultiFieldSubQueryDetails specifies a field, aggregator, and downsampling interval.
MultiFieldSubQueryDetails speedFieldDetails = MultiFieldSubQueryDetails
        .field("speed").aggregator(Aggregator.SUM).downsample("2s-sum").build();
MultiFieldSubQueryDetails levelFieldDetails = MultiFieldSubQueryDetails
        .field("level").aggregator(Aggregator.AVG).downsample("2s-avg").build();
MultiFieldSubQueryDetails tempFieldDetails = MultiFieldSubQueryDetails
        .field("temperature").aggregator(Aggregator.COUNT).downsample("2s-count").build();
// Use "*" to query all fields. Set an alias to distinguish results when multiple
// wildcard queries are included.
MultiFieldSubQueryDetails allFieldsDetails1 = MultiFieldSubQueryDetails
        .field("*").aggregator(Aggregator.MAX).downsample("2s-max").alias("max_").build();
MultiFieldSubQueryDetails allFieldsDetails2 = MultiFieldSubQueryDetails
        .field("*").aggregator(Aggregator.MIN).downsample("2s-min").alias("min_").build();

List<MultiFieldSubQueryDetails> subQueryDetails = new LinkedList<>();
subQueryDetails.add(speedFieldDetails);
subQueryDetails.add(levelFieldDetails);
subQueryDetails.add(tempFieldDetails);
subQueryDetails.add(allFieldsDetails1);
subQueryDetails.add(allFieldsDetails2);

// Step 2: Create a subquery for the multi-value data model.
// Specify the metric, the field details list, and an optional tag filter.
MultiFieldSubQuery subQuery = MultiFieldSubQuery.metric(metric).fieldsInfo(subQueryDetails)
        .filter(Filter.filter(FilterType.LiteralOr, "district", "Yuhang|Xiacheng|Xihu", true).build())
        .build();

// Step 3: Set the time range and run the query.
MultiFieldQuery query = MultiFieldQuery.start(1542772000L).end(1542772020L).msResolution(false)
        .sub(subQuery).build();

List<MultiFieldQueryResult> results = tsdb.multiFieldQuery(query);

Parameters

MultiFieldSubQueryDetails

ParameterRequiredDescriptionExample
fieldYesField name to query. Use "*" to query all fields."speed", "*"
aggregatorYesAggregation function applied to data points. Example values used in the SDK: SUM, AVG, COUNT, MAX, MIN.Aggregator.SUM
downsampleYesDownsampling interval and function in <interval><unit>-<function> format. For example, "2s-sum" applies a SUM function over a 2-second interval."2s-sum"
aliasNoAlias prefix for returned field names. Set an alias to distinguish results when multiple wildcard ("*") field queries are included."max_"
MultiFieldSubQueryDetails also accepts dpValue and rate parameters for advanced query scenarios.

MultiFieldSubQuery

ParameterRequiredDescriptionExample
metricYesThe metric to query."wind"
fieldsInfoYesList of MultiFieldSubQueryDetails objects.See above
filterNoTag filter for narrowing results. Use Filter.filter(FilterType, tagKey, tagValues, groupBy).FilterType.LiteralOr, "district", "Yuhang|Xiacheng|Xihu", true

MultiFieldQuery

ParameterRequiredDescriptionExample
startYesQuery start time as a Unix timestamp.1542772000L
endYesQuery end time as a Unix timestamp.1542772020L
msResolutionNoSet to true to return timestamps in milliseconds. Set to false to return timestamps in seconds.false
subYesThe MultiFieldSubQuery to run.
limit / offsetNoPagination parameters for large result sets.