Tous les produits
Search
Centre de documentation

Tablestore:Aggregation

Dernière mise à jour :Aug 18, 2026

Utilisez le SDK Tablestore pour Python pour agréger des métriques et regrouper les résultats de l'index de recherche.

Prérequis

Installez le SDK Tablestore pour Python et initialisez un client.

La fonctionnalité d'agrégation nécessite la version 5.2.1 ou ultérieure du SDK. Nous vous recommandons d'utiliser la dernière version.

Description

L'agrégation calcule des métriques ou crée des groupes à partir des résultats des requêtes sur l'index de recherche. Ajoutez des objets d'agrégation de métriques à SearchQuery.aggs et des objets de regroupement à SearchQuery.group_bys. Chaque name d'une requête doit être unique et identifie le résultat correspondant dans la réponse. Pour ne récupérer que les résultats d'agrégation, définissez limit sur 0.

Fonctionnalité

Description

Min, Max, Sum, Avg

Calcule les valeurs minimale, maximale, la somme et la moyenne.

Count, DistinctCount

Compte les lignes dont les valeurs de champ ne sont pas vides et les valeurs de champ distinctes.

Percentiles

Calcule un ou plusieurs centiles.

TopRows

Renvoie les premières lignes triées de chaque groupe sous forme de sous-agrégation.

GroupByField, GroupByComposite

Regroupe par valeur de champ unique ou par combinaison de champs.

GroupByRange, GroupByGeoDistance, GroupByFilter

Regroupe par plage numérique, distance géographique ou conditions de filtre.

GroupByHistogram, GroupByDateHistogram, GroupByGeoGrid

Crée des histogrammes numériques, des histogrammes de dates ou des groupes de grille GeoHash.

Important

Les champs d'index de recherche utilisés pour l'agrégation doivent avoir le tri et l'agrégation activés. Les types de champs pris en charge varient selon le type d'agrégation et de regroupement. Vous pouvez configurer jusqu'à cinq regroupements au même niveau. Le compte distinct, les centiles et le regroupement par champ utilisent un calcul approximatif. Un grand nombre d'agrégations ou des agrégations profondément imbriquées augmentent la complexité et la latence des requêtes.

L'exemple suivant calcule les valeurs minimale, maximale et moyenne de price et regroupe les lignes par category.

search_query = SearchQuery(
    MatchAllQuery(),
    limit=0,
    aggs=[
        Min("price", name="min_price"),
        Max("price", name="max_price"),
        Avg("price", name="avg_price"),
    ],
    group_bys=[
        GroupByField("category", name="by_category"),
    ],
)
response = client.search(
    "example_table",
    "example_index",
    search_query,
)
for result in response.agg_results:
    print(result.name, result.value)
for result in response.group_by_results:
    print(result.name, result.items)

Paramètres

Requête de recherche

La méthode search accepte les paramètres suivants.

Nom

Type

Description

table_name (obligatoire)

str

Nom de la table de données.

index_name (obligatoire)

str

Nom de l'index de recherche.

search_query (obligatoire)

SearchQuery

Condition de requête et configurations courantes.

columns_to_get (facultatif)

ColumnsToGet

Configuration des colonnes renvoyées. Si ce paramètre est omis, seules les colonnes de clé primaire sont renvoyées.

routing_keys (facultatif)

list

Valeurs de clé primaire des champs de routage personnalisés. Ce paramètre n'est pas requis si le routage personnalisé n'est pas configuré.

timeout_s (facultatif)

int

Délai d'expiration de la requête en secondes. Si ce paramètre est omis, le délai d'expiration du client s'applique.

Configuration de la requête

search_query est de type SearchQuery et contient les paramètres suivants liés à l'agrégation.

Nom

Type

Description

query (obligatoire)

Query

Condition de requête qui détermine la portée de l'agrégation. Utilisez MatchAllQuery pour agréger toutes les lignes.

aggs (facultatif)

list[Agg]

Liste des agrégations de métriques. Vous pouvez combiner des agrégations aux noms différents.

group_bys (facultatif)

list[BaseGroupBy]

Liste des regroupements. Vous pouvez combiner des regroupements aux noms différents.

limit (facultatif)

int

Nombre de lignes de requête à renvoyer. Définissez ce paramètre sur 0 pour ne récupérer que les résultats d'agrégation.

Agrégations de métriques

Ajoutez les objets suivants à search_query.aggs. field désigne le champ d'agrégation, name identifie le résultat et missing_value spécifie la valeur à utiliser lorsque le champ est manquant. Si missing_value n'est pas spécifié, les lignes sans ce champ sont ignorées.

Min, Max et Avg

Nom

Type

Description

field (obligatoire)

str

Champ d'agrégation. Types pris en charge : Long, Double et Date.

missing_value (facultatif)

str / int / float

Valeur utilisée lorsque le champ est manquant.

name (facultatif)

str

Nom de l'agrégation. Valeurs par défaut : min, max et avg, respectivement.

Sum

Nom

Type

Description

field (obligatoire)

str

Champ d'agrégation. Types pris en charge : Long et Double.

missing_value (facultatif)

int / float

Valeur utilisée dans la somme lorsque le champ est manquant.

name (facultatif)

str

Nom de l'agrégation. Valeur par défaut : sum.

Count

Nom

Type

Description

field (obligatoire)

str

Champ dont les lignes non vides sont comptées. Types pris en charge : Long, Double, Boolean, Keyword, Date et GeoPoint.

name (facultatif)

str

Nom de l'agrégation. Valeur par défaut : count.

DistinctCount

Nom

Type

Description

field (obligatoire)

str

Champ dont les valeurs distinctes sont comptées. Types pris en charge : Long, Double, Boolean, Keyword, Date et GeoPoint.

missing_value (facultatif)

str / int / float / bool

Valeur incluse dans le compte distinct lorsque le champ est manquant.

name (facultatif)

str

Nom de l'agrégation. Valeur par défaut : distinct_count.

Percentiles

Nom

Type

Description

field (obligatoire)

str

Champ d'agrégation. Types pris en charge : Long, Double et Date.

percentiles_list (obligatoire)

list[float]

Centiles à calculer, par exemple [50, 90, 99].

missing_value (facultatif)

str / int / float

Valeur utilisée lorsque le champ est manquant.

name (facultatif)

str

Nom de l'agrégation. Valeur par défaut : percentiles.

TopRows

Nom

Type

Description

limit (obligatoire)

int

Nombre maximal de lignes à renvoyer pour chaque groupe.

sort (obligatoire)

Sort

Ordre de tri des lignes dans chaque groupe.

name (facultatif)

str

Nom de l'agrégation. Valeur par défaut : top_rows.

Remarque

DistinctCount est approximatif. Les résultats sont proches de la valeur exacte en dessous de 10 000 valeurs distinctes, avec une erreur d'environ 2 % pour 100 millions de valeurs. Percentiles est également approximatif ; les centiles extrêmes sont généralement plus précis que la médiane. Utilisez TopRows uniquement comme sous-agrégation d'un regroupement.

Regroupement

Ajoutez les objets suivants à search_query.group_bys. Utilisez sub_aggs et sub_group_bys pour effectuer des sous-agrégations de métriques et des sous-regroupements dans chaque groupe.

GroupByField

Nom

Type

Description

field_name (obligatoire)

str

Champ de regroupement. Types pris en charge : Long, Double, Boolean, Keyword et Date.

size (facultatif)

int

Nombre de groupes à renvoyer. Valeur par défaut : 10. Valeur maximale : 2000.

group_by_sort (facultatif)

list

Règles de tri des groupes. Par défaut, les groupes sont triés par nombre de lignes décroissant. GroupKeySort, RowCountSort et SubAggSort sont pris en charge.

sub_aggs (facultatif)

list[Agg]

Sous-agrégations de métriques.

sub_group_bys (facultatif)

list[BaseGroupBy]

Sous-regroupements.

name (facultatif)

str

Nom du regroupement. Valeur par défaut : group_by_field.

GroupByComposite

Nom

Type

Description

sources (obligatoire)

list[BaseGroupBy]

Sources de regroupement multi-champs. Vous pouvez spécifier jusqu'à 32 sources de type GroupByField, GroupByHistogram ou GroupByDateHistogram.

size (facultatif)

int

Nombre de groupes à renvoyer. Valeur par défaut : 10. Valeur maximale : 2000.

next_token (facultatif)

bytes

Jeton pour la page suivante de groupes. Omettez-le lors de la première requête.

suggested_size (facultatif)

int

Limite souple pour les scénarios de calcul à haut débit. Ne le spécifiez pas conjointement avec size.

sub_aggs (facultatif)

list[Agg]

Sous-agrégations de métriques.

sub_group_bys (facultatif)

list[BaseGroupBy]

Sous-regroupements. GroupByComposite ne peut pas être un sous-groupe d'un autre regroupement.

name (facultatif)

str

Nom du regroupement. Valeur par défaut : group_by_composite.

GroupByRange

Nom

Type

Description

field_name (obligatoire)

str

Champ de regroupement. Types pris en charge : Long et Double.

ranges (obligatoire)

list[tuple]

Plages fermées à gauche et ouvertes à droite, par exemple [(0, 100), (100, 200)].

sub_aggs (facultatif)

list[Agg]

Sous-agrégations de métriques.

sub_group_bys (facultatif)

list[BaseGroupBy]

Sous-regroupements.

name (facultatif)

str

Nom du regroupement. Valeur par défaut : group_by_range.

GroupByGeoDistance

Nom

Type

Description

field_name (obligatoire)

str

Champ de regroupement GeoPoint.

origin (obligatoire)

GeoPoint

Point central. Les paramètres du constructeur sont la latitude suivie de la longitude.

ranges (obligatoire)

list[tuple]

Plages de distance en mètres. Chaque plage est fermée à gauche et ouverte à droite.

sub_aggs (facultatif)

list[Agg]

Sous-agrégations de métriques.

sub_group_bys (facultatif)

list[BaseGroupBy]

Sous-regroupements.

name (facultatif)

str

Nom du regroupement. Valeur par défaut : group_by_geo_distance.

GroupByFilter

Nom

Type

Description

filters (obligatoire)

list[Query]

Conditions de filtre. L'ordre des résultats correspond à l'ordre des conditions.

sub_aggs (facultatif)

list[Agg]

Sous-agrégations de métriques.

sub_group_bys (facultatif)

list[BaseGroupBy]

Sous-regroupements.

name (facultatif)

str

Nom du regroupement. Valeur par défaut : group_by_filter.

GroupByHistogram

Nom

Type

Description

field_name (obligatoire)

str

Champ de regroupement. Types pris en charge : Long et Double.

interval (obligatoire)

int / float

Intervalle de l'histogramme numérique.

field_range (obligatoire)

FieldRange

Plage d'agrégation. (max-min)/interval ne peut pas dépasser 2000.

missing_value (facultatif)

int / float

Valeur utilisée dans l'histogramme lorsque le champ est manquant.

min_doc_count (facultatif)

int

Nombre minimal de lignes pour un compartiment. Les compartiments contenant moins de lignes ne sont pas renvoyés.

group_by_sort (facultatif)

list

Règles de tri des groupes.

sub_aggs (facultatif)

list[Agg]

Sous-agrégations de métriques.

sub_group_bys (facultatif)

list[BaseGroupBy]

Sous-regroupements.

name (facultatif)

str

Nom du regroupement. Valeur par défaut : group_by_histogram.

GroupByDateHistogram

Nom

Type

Description

field_name (obligatoire)

str

Champ de regroupement Date.

interval (obligatoire)

DateTimeValue

Intervalle de date ou d'heure, composé d'une valeur et de DateTimeUnit.

field_range (obligatoire)

FieldRange

Plage d'agrégation. Le serveur requiert ce paramètre bien que le constructeur Python permette de l'omettre.

missing (facultatif)

str

Valeur de date utilisée dans l'histogramme lorsque le champ est manquant.

min_doc_count (facultatif)

int

Nombre minimal de lignes pour un compartiment. Les compartiments contenant moins de lignes ne sont pas renvoyés.

time_zone (facultatif)

str

Fuseau horaire au format +hh:mm ou -hh:mm, par exemple +08:00.

group_by_sort (facultatif)

list

Règles de tri des groupes.

offset (facultatif)

DateTimeValue

Décalage des limites de compartiment par rapport à l'origine par défaut.

sub_aggs (facultatif)

list[Agg]

Sous-agrégations de métriques.

sub_group_bys (facultatif)

list[BaseGroupBy]

Sous-regroupements.

name (facultatif)

str

Nom du regroupement. Valeur par défaut : group_by_date_histogram.

GroupByGeoGrid

Nom

Type

Description

field_name (obligatoire)

str

Champ de regroupement GeoPoint.

precision (obligatoire)

GeoHashPrecision

Précision de la grille GeoHash. Un numéro d'énumération plus élevé représente une grille plus petite.

size (facultatif)

int

Nombre de groupes de grille à renvoyer.

sub_aggs (facultatif)

list[Agg]

Sous-agrégations de métriques.

sub_group_bys (facultatif)

list[BaseGroupBy]

Sous-regroupements.

name (facultatif)

str

Nom du regroupement. Valeur par défaut : group_by_geo_grid.

Remarque

GroupByComposite nécessite le SDK Tablestore pour Python 6.4.4 ou une version ultérieure. S'il existe de nombreux groupes, spécifiez size et paginez en utilisant next_token de chaque résultat jusqu'à ce que le jeton soit vide.

Colonnes renvoyées

columns_to_get est de type ColumnsToGet et contient les paramètres suivants.

Nom

Type

Description

column_names (facultatif)

list[str]

Noms des colonnes d'attributs à renvoyer. Spécifiez ce paramètre uniquement lorsque return_type est SPECIFIED.

return_type (facultatif)

ColumnReturnType

Mode de renvoi des colonnes. NONE (par défaut) renvoie uniquement les colonnes de clé primaire ; SPECIFIED renvoie les colonnes d'attributs spécifiées ; ALL renvoie toutes les colonnes d'attributs de la table ; et ALL_FROM_INDEX renvoie tous les champs stockés dans l'index.

Réponse

La méthode search renvoie un objet SearchResponse. Le tableau suivant décrit les champs principaux.

Champ

Type

Description

rows

list[Row]

Lignes renvoyées par la requête. Le nombre ne dépasse pas limit.

next_token

bytes

Jeton pour la page suivante. Une valeur vide indique qu'aucune autre donnée n'est disponible.

total_count

int

Nombre de lignes correspondantes. La valeur dépend de get_total_count.

is_all_succeed

bool

Indique si toutes les partitions d'index ont été interrogées. Si la valeur est False, des résultats partiels sont renvoyés.

agg_results

list[AggResult]

Résultats d'agrégation de métriques. Ce champ est vide si aggs n'est pas configuré.

group_by_results

list[GroupByResult]

Résultats de regroupement. Ce champ est vide si group_bys n'est pas configuré.

search_hits

list[SearchHit]

Résultats de recherche, y compris des informations étendues telles que les lignes, les scores de pertinence et les mises en évidence.

Chaque élément de agg_results utilise name et value pour identifier une agrégation et sa valeur. Chaque élément de group_by_results utilise name et items pour renvoyer les clés de groupe, le nombre de lignes, les sous-agrégations et les sous-regroupements. Un résultat GroupByComposite contient également source_group_by_names et next_token pour les lectures continues. Les keys de chaque groupe constituent une liste de chaînes alignée avec sources ; une valeur de champ manquante est représentée par None.

Réponse compatible avec les tuples

À partir du SDK Tablestore pour Python 5.2.0, les API de recherche renvoient des objets de réponse au lieu de tuples. Les versions 5.1.0 et antérieures renvoient directement des tuples. Dans la version 5.2.1 et ultérieures, vous pouvez appeler SearchResponse.v1_response() pour obtenir un tuple compatible avec les versions antérieures. Pour le nouveau code, accédez directement aux attributs SearchResponse afin d'éviter les erreurs de déballage si les champs de réponse sont étendus.

(
    rows,
    next_token,
    total_count,
    is_all_succeed,
    agg_results,
    group_by_results,
    search_hits,
) = response.v1_response()

Exemples

Paginer un regroupement multi-champs

L'exemple suivant regroupe par category et price et renvoie deux groupes par page.

sources = [
    GroupByField("category", name="category_source"),
    GroupByField("price", name="price_source"),
]
next_token = None
all_items = []

while True:
    group_by = GroupByComposite(
        sources,
        size=2,
        next_token=next_token,
        name="by_category_and_price",
    )
    response = client.search(
        "example_table",
        "example_index",
        SearchQuery(MatchAllQuery(), limit=0, group_bys=[group_by]),
    )
    result = response.group_by_results[0]
    all_items.extend(result.items)
    next_token = result.next_token
    if not next_token:
        break

for item in all_items:
    print(item.keys, item.row_count)

Créer un histogramme de dates et une grille géographique

L'exemple suivant crée un histogramme de dates quotidien et regroupe les emplacements dans des grilles GeoHash d'environ 39 km par 19 km.

group_bys = [
    GroupByDateHistogram(
        "event_date",
        DateTimeValue(1, DateTimeUnit.DAY),
        field_range=FieldRange("2026-08-01", "2026-08-04"),
        name="by_day",
    ),
    GroupByGeoGrid(
        "location",
        GeoHashPrecision.GHP_39KM_19KM_4,
        name="by_geo_grid",
    ),
]
response = client.search(
    "example_table",
    "example_index",
    SearchQuery(MatchAllQuery(), limit=0, group_bys=group_bys),
)
for result in response.group_by_results:
    print(result.name, result.items)