Todos os produtos
Search
Central de documentação

Tablestore:Agregação

Última atualização: Oct 09, 2026

Este tópico explica como execute operações de agregação para análise de dados. As operações de agregação calculam valores mínimo, máximo, soma, média, contagem, contagem distinta e percentis. É possível agrupar os resultados por valor de campo, intervalo, localização, filtros, histogramas ou datas, com a opção de execute consultas aninhadas para analisar as linhas de cada grupo. Também é possível combinar várias operações de agregação para crie consultas mais complexas.

Procedimento

A figura a seguir ilustra o procedimento completo de agregação.

fig_agg_pro

O servidor consulta os dados que atendem às condições da consulta e realiza a agregação com base na solicitação. Por isso, o processamento de uma solicitação que exige agregação é mais complexo do que o de uma solicitação sem essa necessidade.

Recursos

A agregação oferece suporte a vários recursos semelhantes às funções SQL. Por exemplo, use a função MIN() para obter o valor mínimo, a função MAX() para o valor máximo, a função SUM() para a soma, a função AVG() para a média, a função COUNT() para a quantidade de linhas, a função COUNT(DISTINCT) para a contagem de linhas distintas, a função ANY_VALUE() para consultar as linhas obtidas a partir dos resultados de uma operação de agregação em cada grupo, e a função GROUP BY para agrupar os resultados da consulta. Além disso, você pode execute operações de agregação para obter estatísticas de percentil, agrupar resultados por valor de campo, intervalo, localização geográfica, filtro, histograma ou histograma de datas, agrupar resultados com base em vários campos e execute consultas aninhadas. A tabela a seguir descreve esses recursos.

Recurso

Descrição

Valor mínimo

Método de agregação usado para retornar o valor mínimo de um campo, de forma semelhante à função MIN do SQL.

Valor máximo

Método de agregação usado para retornar o valor máximo de um campo, de forma semelhante à função MAX do SQL.

Soma

Método de agregação usado para retornar a soma de todos os valores de um campo numérico, de forma semelhante à função SUM do SQL.

Valor médio

Método de agregação usado para retornar a média de todos os valores de um campo numérico, de forma semelhante à função AVG do SQL.

Contagem

Método de agregação usado para retornar o número total de valores de um campo ou o número total de linhas em um índice de pesquisa, de forma semelhante à função COUNT do SQL.

Contagem distinta

Método de agregação usado para retornar o número de valores distintos de um campo, de forma semelhante à função COUNT(DISTINCT) do SQL.

Estatísticas de percentil

Um valor de percentil indica a posição relativa de um valor em um conjunto de dados. Por exemplo, ao coletar estatísticas sobre o tempo de resposta de cada solicitação durante a operação e manutenção (O&M) de rotina do seu sistema, você deve analisar a distribuição do tempo de resposta usando percentis como p25, p50, p90 e p99.

Agrupar por valor de campo

Método de agregação usado para agrupar os resultados da consulta com base nos valores dos campos. Valores idênticos são agrupados. O valor idêntico de cada grupo e a quantidade de valores idênticos em cada grupo são retornados.

Aninhamento no GroupBy

O GroupBy oferece suporte a aninhamento. Você pode execute operações de subagregação usando o GroupBy.

Agrupar por vários campos

Método de agregação usado para agrupar os resultados da consulta com base em vários campos. É possível usar tokens para realizar paginação.

Agrupar por intervalo

Método de agregação usado para agrupar os resultados da consulta com base nos intervalos de valores de um campo. Valores dentro de um intervalo específico são agrupados. A quantidade de valores em cada intervalo é retornada.

Agrupar por localização geográfica

Método de agregação usado para agrupar os resultados da consulta com base nas distâncias das localizações geográficas até um ponto central. Resultados dentro de intervalos de distância específicos são agrupados. A quantidade de valores em cada intervalo é retornada.

Agrupar por filtro

Método de agregação usado para filtrar os resultados da consulta e agrupá-los, obtendo a quantidade de resultados que correspondem a cada filtro. Os resultados são retornados na ordem em que os filtros são especificados.

Consultar por histograma

Método de agregação usado para agrupar os resultados da consulta com base em intervalos de dados específicos. Valores dentro do mesmo intervalo são agrupados. O intervalo de valores de cada grupo e a quantidade de valores em cada grupo são retornados.

Consultar por histograma de datas

Método de agregação usado para agrupar os resultados da consulta com base em intervalos de datas específicos. Valores dentro do mesmo intervalo são agrupados. O intervalo de valores de cada grupo e a quantidade de valores em cada grupo são retornados.

Consultar as linhas obtidas a partir dos resultados de uma operação de agregação em cada grupo

Após agrupar os resultados da consulta, você pode consultar as linhas em cada grupo. Este método funciona de forma semelhante à função ANY_VALUE(campo) no MySQL.

Múltiplas agregações

Você pode execute várias operações de agregação.

Nota

Se você execute várias operações de agregação complexas ao mesmo tempo, o processamento pode levar muito tempo.

Pré-requisitos

Valor mínimo

Método de agregação usado para retornar o valor mínimo de um campo, de forma semelhante à função MIN do SQL.

  • Parâmetros

    Parâmetro

    Descrição

    AggName

    O nome exclusivo da operação de agregação. Você pode consultar os resultados de uma operação de agregação específica com base neste nome.

    FieldName

    O nome do campo usado para execute a operação de agregação. Apenas os tipos LONG, DOUBLE e DATE são suportados.

    Missing

    O valor padrão para o campo usado na operação de agregação em uma linha quando o valor do campo está vazio.

    • Se você não especifique um valor para Missing, a linha será ignorada.

    • Se você especifique um valor para Missing, o valor deste parâmetro será usado como o valor do campo da linha.

  • Exemplo

    /// <summary>
    /// Minimum value. 
    /// </summary>
    /// <param name="otsClient"></param>
    public static void MinAggregation(OTSClient otsClient)
    {
        MinAggregation minAggregation = new MinAggregation();
        minAggregation.AggName = "Min_Agg";
        minAggregation.FieldName = "pk1";
    
        RangeQuery rangeQuery = new RangeQuery();
        rangeQuery.FieldName = "pk1";
        rangeQuery.From = new ColumnValue(0);
        rangeQuery.To = new ColumnValue(100);
    
        SearchQuery seachQuery = new SearchQuery
        {
            Limit = 0,
            Query = rangeQuery,
            AggregationList = new List<IAggregation>
            {
                minAggregation
            }
        };
    
        SearchRequest searchRequest = new SearchRequest(TableName, IndexName, seachQuery);
    
        SearchResponse searchResponse = otsClient.Search(searchRequest);
    
        Console.WriteLine(JsonConvert.SerializeObject(searchResponse.AggregationResults.GetAsMinAggregationResult("Min_Agg")));
    }

Valor máximo

Método de agregação usado para retornar o valor máximo de um campo, de forma semelhante à função MAX do SQL.

  • Parâmetros

    Parâmetro

    Descrição

    AggName

    O nome exclusivo da operação de agregação. Você pode consultar os resultados de uma operação de agregação específica com base neste nome.

    FieldName

    O nome do campo usado para execute a operação de agregação. Apenas os tipos LONG, DOUBLE e DATE são suportados.

    Missing

    O valor padrão para o campo usado na operação de agregação em uma linha quando o valor do campo está vazio.

    • Se você não especifique um valor para Missing, a linha será ignorada.

    • Se você especifique um valor para Missing, o valor deste parâmetro será usado como o valor do campo da linha.

  • Exemplo

    /// <summary>
    /// Maximum value. 
    /// </summary>
    /// <param name="otsClient"></param>
    public static void MaxAggregation(OTSClient otsClient)
    {
        MaxAggregation maxAggregation = new MaxAggregation();
        maxAggregation.AggName = "Max_Agg";
        maxAggregation.FieldName = "pk1";
    
        RangeQuery rangeQuery = new RangeQuery();
        rangeQuery.FieldName = "pk1";
        rangeQuery.From = new ColumnValue(0);
        rangeQuery.To = new ColumnValue(100);
    
        SearchQuery seachQuery = new SearchQuery
        {
            Limit = 0,
            Query = rangeQuery,
            AggregationList = new List<IAggregation>
            {
                maxAggregation
            }
        };
    
        SearchRequest searchRequest = new SearchRequest(TableName, IndexName, seachQuery);
    
        SearchResponse searchResponse = otsClient.Search(searchRequest);
    
        Console.WriteLine(JsonConvert.SerializeObject(searchResponse.AggregationResults.GetAsMaxAggregationResult("Max_Agg")));
    }

Soma

Método de agregação usado para retornar a soma de todos os valores de um campo numérico, de forma semelhante à função SUM do SQL.

  • Parâmetros

    Parâmetro

    Descrição

    AggName

    O nome exclusivo da operação de agregação. Você pode consultar os resultados de uma operação de agregação específica com base neste nome.

    FieldName

    O nome do campo usado para execute a operação de agregação. Apenas os tipos LONG e DOUBLE são suportados.

    Missing

    O valor padrão para o campo usado na operação de agregação em uma linha quando o valor do campo está vazio.

    • Se você não especifique um valor para Missing, a linha será ignorada.

    • Se você especifique um valor para Missing, o valor deste parâmetro será usado como o valor do campo da linha.

  • Exemplo

    /// <summary>
    /// Sum. 
    /// </summary>
    /// <param name="otsClient"></param>
    public static void SumAggregation(OTSClient otsClient)
    {
        SumAggregation sumAggregation = new SumAggregation();
        sumAggregation.AggName = "Sum_Agg";
        sumAggregation.FieldName = "pk1";
    
        RangeQuery rangeQuery = new RangeQuery();
        rangeQuery.FieldName = "pk1";
        rangeQuery.From = new ColumnValue(0);
        rangeQuery.To = new ColumnValue(100);
    
        SearchQuery seachQuery = new SearchQuery
        {
            Limit = 0,
            Query = rangeQuery,
            AggregationList = new List<IAggregation>
            {
                sumAggregation
            }
        };
    
        SearchRequest searchRequest = new SearchRequest(TableName, IndexName, seachQuery);
    
        SearchResponse searchResponse = otsClient.Search(searchRequest);
    
        Console.WriteLine(JsonConvert.SerializeObject(searchResponse.AggregationResults.GetAsSumAggregationResult("Sum_Agg")));
    }

Valor médio

Método de agregação usado para retornar a média de todos os valores de um campo numérico, de forma semelhante à função AVG do SQL.

  • Parâmetros

    Parâmetro

    Descrição

    AggName

    O nome exclusivo da operação de agregação. Você pode consultar os resultados de uma operação de agregação específica com base neste nome.

    FieldName

    O nome do campo usado para execute a operação de agregação. Apenas os tipos LONG, DOUBLE e DATE são suportados.

    Missing

    O valor padrão para o campo usado na operação de agregação em uma linha quando o valor do campo está vazio.

    • Se você não especifique um valor para Missing, a linha será ignorada.

    • Se você especifique um valor para Missing, o valor deste parâmetro será usado como o valor do campo da linha.

  • Exemplo

    /// <summary>
    /// Average value. 
    /// </summary>
    /// <param name="otsClient"></param>
    public static void AvgAggregation(OTSClient otsClient)
    {
        AvgAggregation avgAggregation = new AvgAggregation();
        avgAggregation.AggName = "Avg_Agg";
        avgAggregation.FieldName = "pk1";
    
        RangeQuery rangeQuery = new RangeQuery();
        rangeQuery.FieldName = "pk1";
        rangeQuery.From = new ColumnValue(0);
        rangeQuery.To = new ColumnValue(100);
    
        SearchQuery seachQuery = new SearchQuery
        {
            Limit = 0,
            Query = rangeQuery,
            AggregationList = new List<IAggregation>
            {
                avgAggregation
            }
        };
    
        SearchRequest searchRequest = new SearchRequest(TableName, IndexName, seachQuery);
    
        SearchResponse searchResponse = otsClient.Search(searchRequest);
    
        Console.WriteLine(JsonConvert.SerializeObject(searchResponse.AggregationResults.GetAsAvgAggregationResult("Avg_Agg")));
    }

Contagem

Método de agregação usado para retornar o número total de valores de um campo especificado ou o número total de linhas em um índice de pesquisa, de forma semelhante à função COUNT do SQL.

Nota

Você pode usar os seguintes métodos para consultar o número total de linhas em um índice de pesquisa ou o número total de linhas que atendem às condições da consulta:

  • Use o recurso de contagem da agregação e especifique count(*) na solicitação.

  • Use o recurso de consulta para obter o número de linhas que atendem às condições da consulta. defina setGetTotalCount como true na consulta. Use MatchAllQuery para obter o número total de linhas em um índice de pesquisa.

Você pode usar o nome de uma coluna como valor da expressão de contagem para consultar o número de linhas que contêm a coluna em um índice de pesquisa. Este método é adequado para cenários que envolvem colunas esparsas.

  • Parâmetros

    Parâmetro

    Descrição

    AggName

    O nome exclusivo da operação de agregação. Você pode consultar os resultados de uma operação de agregação específica com base neste nome.

    FieldName

    O nome do campo usado para execute a operação de agregação. Apenas os tipos LONG, DOUBLE, BOOLEAN, KEYWORD, GEO_POINT e DATE são suportados.

  • Exemplo

    /// <summary>
    /// Count. 
    /// </summary>
    /// <param name="otsClient"></param>
    public static void CountAggregation(OTSClient otsClient)
    {
        CountAggregation countAggregation = new CountAggregation();
        countAggregation.AggName = "Count_Agg";
        countAggregation.FieldName = "pk1";
    
        RangeQuery rangeQuery = new RangeQuery();
        rangeQuery.FieldName = "pk1";
        rangeQuery.From = new ColumnValue(0);
        rangeQuery.To = new ColumnValue(100);
    
        SearchQuery seachQuery = new SearchQuery
        {
            Limit = 0,
            Query = rangeQuery,
            AggregationList = new List<IAggregation>
            {
                countAggregation
            }
        };
    
        SearchRequest searchRequest = new SearchRequest(TableName, IndexName, seachQuery);
    
        SearchResponse searchResponse = otsClient.Search(searchRequest);
    
        Console.WriteLine(JsonConvert.SerializeObject(searchResponse.AggregationResults.GetAsCountAggregationResult("Count_Agg")));
    }

Contagem distinta

Método de agregação usado para retornar o número de valores distintos de um campo, de forma semelhante à função COUNT(DISTINCT) do SQL.

Nota

O número de valores distintos é um valor aproximado.

  • Se o número total de linhas antes do uso do recurso de contagem distinta for menor que 10.000, o resultado calculado ficará próximo do valor exato.

  • Se o número total de linhas antes do uso do recurso de contagem distinta for maior ou igual a 100 milhões, a taxa de erro será de aproximadamente 2%.

  • Parâmetros

    Parâmetro

    Descrição

    AggName

    O nome exclusivo da operação de agregação. Você pode consultar os resultados de uma operação de agregação específica com base neste nome.

    FieldName

    O nome do campo usado para execute a operação de agregação. Apenas os tipos LONG, DOUBLE, BOOLEAN, KEYWORD, GEO_POINT e DATE são suportados.

    Missing

    O valor padrão para o campo usado na operação de agregação em uma linha quando o valor do campo está vazio.

    • Se você não especifique um valor para Missing, a linha será ignorada.

    • Se você especifique um valor para Missing, o valor deste parâmetro será usado como o valor do campo da linha.

  • Exemplo

    /// <summary>
    /// Distinct count. 
    /// </summary>
    /// <param name="otsClient"></param>
    public static void DistinctCountAggregation(OTSClient otsClient)
    {
        DistinctCountAggregation distinctCountAggregation = new DistinctCountAggregation();
        distinctCountAggregation.AggName = "DistinctCount_Agg";
        distinctCountAggregation.FieldName = "pk1";
    
        TermsQuery termsQuery = new TermsQuery();
        termsQuery.FieldName = "pk0";
        termsQuery.Terms = new List<ColumnValue>
        {
            new ColumnValue("Sample"),
            new ColumnValue("SearchIndex")
        };
    
        SearchQuery seachQuery = new SearchQuery
        {
            Limit = 0,
            Query = termsQuery,
            AggregationList = new List<IAggregation>
            {
                distinctCountAggregation
            }
        };
    
        SearchRequest searchRequest = new SearchRequest(TableName, IndexName, seachQuery);
    
        SearchResponse searchResponse = otsClient.Search(searchRequest);
    
        Console.WriteLine(JsonConvert.SerializeObject(searchResponse.AggregationResults.GetAsDistinctCountAggregationResult("DistinctCount_Agg")));
    }

Estatísticas de percentil

Um valor de percentil indica a posição relativa de um valor em um conjunto de dados. Por exemplo, ao coletar estatísticas sobre o tempo de resposta de cada solicitação durante a operação e manutenção (O&M) de rotina do seu sistema, você deve analisar a distribuição do tempo de resposta usando percentis como p25, p50, p90 e p99.

Nota

Os percentis são calculados de forma aproximada. Percentis próximos às extremidades costumam ser mais precisos. Por exemplo, P1 e P99 geralmente são mais precisos que P50.

  • Parâmetros

    Parâmetro

    Descrição

    AggName

    O nome exclusivo da operação de agregação. Você pode consultar os resultados de uma operação de agregação específica com base neste nome.

    FieldName

    O nome do campo usado para execute a operação de agregação. Apenas os tipos LONG, DOUBLE e DATE são suportados.

    Percentiles

    Os percentis, como p50, p90 e p99. Você pode especificar um ou mais percentis.

    Missing

    O valor padrão para o campo usado na operação de agregação em uma linha quando o valor do campo está vazio.

    • Se você não especifique um valor para Missing, a linha será ignorada.

    • Se você especifique um valor para Missing, o valor deste parâmetro será usado como o valor do campo da linha.

  • Exemplo

    /// <summary>
    /// Percentile statistics. 
    /// </summary>
    /// <param name="otsClient"></param>
    public static void PercentilesAggregation(OTSClient otsClient)
    {
        PercentilesAggregation percentilesAggregation = new PercentilesAggregation();
        percentilesAggregation.AggName = "Percentiles_Agg";
        percentilesAggregation.FieldName = "pk1";
        percentilesAggregation.Missing = new ColumnValue(10);
        percentilesAggregation.Percentiles = new List<double> { 10.0, 30.0, 60.0, 90.0, 100.0 };
    
        MatchAllQuery matchAllQuery = new MatchAllQuery();
    
        SearchQuery searchQuery = new SearchQuery();
        searchQuery.AggregationList = new List<IAggregation> { percentilesAggregation };
        searchQuery.Query = matchAllQuery;
        searchQuery.Limit = 0;
    
        SearchRequest searchRequest = new SearchRequest(TableName, IndexName, searchQuery);
    
        SearchResponse searchResponse = otsClient.Search(searchRequest);
    
        Console.WriteLine(JsonConvert.SerializeObject(searchResponse));
    }

Agrupar por valor de campo

Método de agregação usado para agrupar os resultados da consulta com base nos valores dos campos. Valores idênticos são agrupados. O valor idêntico de cada grupo e a quantidade de valores idênticos em cada grupo são retornados.

Nota

O número calculado pode ser diferente do número real se a quantidade de valores em um grupo for muito grande.

  • Parâmetros

    Parâmetro

    Descrição

    GroupByName

    O nome exclusivo da operação de agregação. Você pode consultar os resultados de uma operação de agregação específica com base neste nome.

    FieldName

    O nome do campo usado para execute a operação de agregação. Apenas os tipos LONG, DOUBLE, BOOLEAN, KEYWORD e DATE são suportados.

    Size

    O número de grupos que você deseja retornar. Valor padrão: 10. Valor máximo: 2000. Se o número de grupos exceder 2.000, apenas os primeiros 2.000 grupos serão retornados.

    GroupBySorters

    As regras de classificação para os grupos. Por padrão, os grupos são classificados com base no número de itens em ordem decrescente. Se você configure várias regras de classificação, os grupos serão classificados com base na ordem em que as regras foram configure. Parâmetros suportados:

    • Classificar por valor em ordem alfabética.

    • Classificar por valor em ordem alfabética inversa.

    • Classificar por contagem de linhas em ordem crescente.

    • Classificar por contagem de linhas em ordem decrescente.

    • Classificar pelos valores obtidos dos resultados da subagregação em ordem crescente.

    • Classificar pelos valores obtidos dos resultados da subagregação em ordem decrescente.

    SubAggregation e SubGroupBy

    A operação de subagregação. Você pode execute a operação de subagregação com base nos resultados do agrupamento.

    • Cenário

      Consultar o número de product em cada categoria, bem como os preços máximo e mínimo dos product em cada categoria.

    • Métodos

      Agrupe os resultados da consulta por categoria de product para obter o número de product em cada categoria. Em seguida, execute duas operações de subagregação para obter os preços máximo e mínimo dos product em cada categoria.

    • Resultado de exemplo

      • Frutas: 5. O preço máximo é USD 2. O preço mínimo é USD 0,5.

      • Artigos de higiene: 10. O preço máximo é USD 13. O preço mínimo é USD 0,1.

      • Dispositivos eletrônicos: 3. O preço máximo é USD 1.160. O preço mínimo é USD 310.

      • Outros product: 15. O preço máximo é USD 130. O preço mínimo é USD 11.

  • Exemplo

    /// <summary>
    /// Group by field value. 
    /// </summary>
    /// <param name="otsClient"></param>
    public static void GroupByField(OTSClient otsClient)
    {
        GroupByField groupByField = new GroupByField
        {
            GroupByName = "GroupBy_Field",
            FieldName = "pk0",
            GroupBySorters = new List<GroupBySorter>{
                new GroupBySorter()
                {
                    RowCountSort = new RowCountSort{ Order = SortOrder.DESC }
                },
                new GroupBySorter()
                {
                    GroupKeySort = new GroupKeySort{ Order = SortOrder.DESC }
                }
            }
        };
    
        MatchAllQuery matchAllQuery = new MatchAllQuery();
    
        SearchQuery searchQuery = new SearchQuery();
        searchQuery.GroupByList = new List<IGroupBy> { groupByField };
        searchQuery.Query = matchAllQuery;
        searchQuery.Limit = 0;
    
        SearchRequest searchRequest = new SearchRequest(TableName, IndexName, searchQuery);
    
        SearchResponse searchResponse = otsClient.Search(searchRequest);
    
        Console.WriteLine(JsonConvert.SerializeObject(searchResponse));
    }

Agrupar por intervalo

Método de agregação usado para agrupar os resultados da consulta com base nos intervalos de valores de um campo. Valores dentro de um intervalo específico são agrupados. A quantidade de valores em cada intervalo é retornada.

  • Parâmetros

    Parâmetro

    Descrição

    GroupByName

    O nome exclusivo da operação de agregação. Você pode consultar os resultados de uma operação de agregação específica com base neste nome.

    FieldName

    O nome do campo usado para execute a operação de agregação. Apenas os tipos LONG e DOUBLE são suportados.

    Range[double_from, double_to)

    Os intervalos de valores para agrupamento.

    O intervalo de valores pode começar em double.MinValue e terminar em double.MaxValue.

    SubAggregation e SubGroupBy

    A operação de subagregação. Você pode execute a operação de subagregação com base nos resultados do agrupamento.

    Por exemplo, após agrupar os resultados da consulta por volume de vendas e por província, você pode obter a província que tem a maior proporção de volume de vendas em um intervalo especificado. especifique um valor para GroupByField em GroupByRange para execute esta consulta.

  • Exemplo

    /// <summary>
    /// Query by range. 
    /// </summary>
    /// <param name="otsClient"></param>
    public static void GroupByRange(OTSClient otsClient)
    {
        GroupByRange groupByRange = new GroupByRange();
        groupByRange.GroupByName = "GroupBy_Range";
        groupByRange.FieldName = "pk1";
        groupByRange.Ranges = new List<Range>
        {
            new Range(double.MinValue, 5.0),
            new Range(5.0, 50.0),
            new Range(50.0, 100.0),
            new Range(100.0, double.MaxValue)
        };
    
        MatchAllQuery matchAllQuery = new MatchAllQuery();
    
        SearchQuery searchQuery = new SearchQuery();
        searchQuery.GroupByList = new List<IGroupBy> { groupByRange };
        searchQuery.Query = matchAllQuery;
        searchQuery.Limit = 0;
    
        SearchRequest searchRequest = new SearchRequest(TableName, IndexName, searchQuery);
    
        SearchResponse searchResponse = otsClient.Search(searchRequest);
    
        Console.WriteLine(JsonConvert.SerializeObject(searchResponse));
    }

Agrupar por localização geográfica

Método de agregação usado para agrupar os resultados da consulta com base nas distâncias das localizações geográficas até um ponto central. Resultados dentro de intervalos de distância específicos são agrupados. A quantidade de valores em cada intervalo é retornada.

  • Parâmetros

    Parâmetro

    Descrição

    GroupByName

    O nome exclusivo da operação de agregação. Você pode consultar os resultados de uma operação de agregação específica com base neste nome.

    FieldName

    O nome do campo usado para a operação de agregação. Apenas o tipo GEOPOINT é suportado.

    Origin(double latitude, double longitude)

    A longitude e a latitude do ponto central.

    latitude especifica a latitude do ponto central. longitude especifica a longitude do ponto central.

    Range[double_from, double_to)

    Os intervalos de distância usados para agrupamento. Unidade: metros.

    O intervalo de valores pode começar em double.MinValue e terminar em double.MaxValue.

    SubAggregation e SubGroupBy

    A operação de subagregação. Você pode execute a operação de subagregação com base nos resultados do agrupamento.

  • Exemplo

    /// <summary>
    /// Group by geographical location. 
    /// </summary>
    /// <param name="otsClient"></param>
    public static void GroupByGeoDistance(OTSClient otsClient)
    {
        GroupByGeoDistance groupByGeoDistance = new GroupByGeoDistance
        {
            GroupByName = "GroupBy_GeoDistance",
            FieldName = "geo_col",
            Origin = new GeoPoint(0, 0),
            Ranges = new List<Range>
            {
                new Range(double.MinValue , 1000.0),
                new Range(1000.0, 5000.0),
                new Range(5000.0, double.MaxValue)
            }
        };
    
        MatchAllQuery matchAllQuery = new MatchAllQuery();
    
        SearchQuery searchQuery = new SearchQuery();
        searchQuery.GroupByList = new List<IGroupBy> { groupByGeoDistance };
        searchQuery.Query = matchAllQuery;
        searchQuery.Limit = 0;
    
        SearchRequest searchRequest = new SearchRequest(TableName, IndexName, searchQuery);
    
        SearchResponse searchResponse = otsClient.Search(searchRequest);
    
        Console.WriteLine(JsonConvert.SerializeObject(searchResponse));
    }

Agrupar por filtro

Método de agregação usado para filtrar os resultados da consulta e agrupá-los, obtendo a quantidade de resultados que correspondem a cada filtro. Os resultados são retornados na ordem em que os filtros são especificados.

  • Parâmetros

    Parâmetro

    Descrição

    GroupByName

    O nome exclusivo da operação de agregação. Você pode consultar os resultados de uma operação de agregação específica com base neste nome.

    Filters

    Os filtros que podem ser usados para a consulta. Os resultados são retornados na ordem em que os filtros são especificados.

    SubAggregation e SubGroupBy

    A operação de subagregação. Você pode execute a operação de subagregação com base nos resultados do agrupamento.

  • Exemplo

    /// <summary>
    /// Group by filter. 
    /// </summary>
    /// <param name="otsClient"></param>
    public static void GroupByFilter(OTSClient otsClient)
    {
        GroupByFilter groupByFilter = new GroupByFilter
        {
            GroupByName = "GroupBy_Filter",
            Filters = new List<IQuery>
            {
                new RangeQuery
                {
                    FieldName = "pk1",
                    From = new ColumnValue(0.0),
                    To = new ColumnValue(5.0)
                },
            }
        };
    
        TermsQuery termsQuery = new TermsQuery();
        termsQuery.FieldName = "pk0";
        termsQuery.Terms = new List<ColumnValue>
        {
            new ColumnValue("Tablestore SearchIndex"),
            new ColumnValue("SearchIndex")
        };
    
        SearchQuery searchQuery = new SearchQuery();
        searchQuery.GroupByList = new List<IGroupBy> { groupByFilter };
        searchQuery.Query = termsQuery;
        searchQuery.Limit = 0;
    
        SearchRequest searchRequest = new SearchRequest(TableName, IndexName, searchQuery);
    
        SearchResponse searchResponse = otsClient.Search(searchRequest);
    
        Console.WriteLine(JsonConvert.SerializeObject(searchResponse));
    }

Consultar por histograma

Método de agregação usado para agrupar os resultados da consulta com base em intervalos de dados específicos. Valores dentro do mesmo intervalo são agrupados. O intervalo de valores de cada grupo e a quantidade de valores em cada grupo são retornados.

  • Parâmetros

    Parâmetro

    Descrição

    GroupByName

    O nome exclusivo da operação de agregação. Você pode consultar os resultados de uma operação de agregação específica com base neste nome.

    FieldName

    O nome do campo usado para execute a operação de agregação. Apenas os tipos LONG e DOUBLE são suportados.

    Interval

    O intervalo de dados usado para obter os resultados da agregação.

    FieldRange[min,max]

    O intervalo usado junto com o parâmetro de intervalo para limitar o número de grupos. O valor calculado usando a fórmula (FieldRange.max-FieldRange.min)/interval não pode exceder 2.000.

    MinDocCount

    O número mínimo de linhas. Se o número de linhas em um grupo for menor que o número mínimo de linhas, os resultados da agregação para o grupo não serão retornados.

    Missing

    O valor padrão para o campo usado na operação de agregação em uma linha quando o valor do campo está vazio.

    • Se você não especifique um valor para Missing, a linha será ignorada.

    • Se você especifique um valor para Missing, o valor deste parâmetro será usado como o valor do campo da linha.

  • Exemplo

    /// <summary>
    /// Query by histogram. 
    /// </summary>
    /// <param name="otsClient"></param>
    public static void HistogramAggregation(OTSClient otsClient)
    {
        GroupByHistogram groupByHistogram = new GroupByHistogram();
        groupByHistogram.GroupByName = "GroupBy_Histogram";
        groupByHistogram.FieldName = "pk1";
        groupByHistogram.Interval = new ColumnValue(5);
        groupByHistogram.Missing = new ColumnValue(100);
        groupByHistogram.FieldRange = new FieldRange(new ColumnValue(0), new ColumnValue(1000));
    
        MatchAllQuery matchAllQuery = new MatchAllQuery(); ;
    
        SearchQuery searchQuery = new SearchQuery();
        searchQuery.Query = matchAllQuery;
        searchQuery.Limit = 0;
        searchQuery.GroupByList = new List<IGroupBy>
        {
            groupByHistogram
        };
    
        SearchRequest searchRequest = new SearchRequest(TableName, IndexName, searchQuery);
    
        SearchResponse searchResponse = otsClient.Search(searchRequest);
    
        foreach (GroupByHistogramResultItem item in searchResponse.GroupByResults.GetAsGroupByHistogramResult("GroupBy_Histogram").GroupByHistogramResultItems)
        {
            Console.WriteLine(JsonConvert.SerializeObject(item));
        }
    }

Consultar as linhas obtidas a partir dos resultados de uma operação de agregação em cada grupo

Após agrupar os resultados da consulta, você pode consultar as linhas em cada grupo. Este método funciona de forma semelhante à função ANY_VALUE(campo) no MySQL.

Nota

Ao consultar as linhas obtidas a partir dos resultados de uma operação de agregação em cada grupo, os resultados retornados conterão apenas as informações da chave primária se o índice de pesquisa contiver o campo Nested, Geopoint ou Array. Para obter o campo necessário, você deve consultar a tabela de dados.

  • Parâmetros

    Parâmetro

    Descrição

    AggName

    O nome exclusivo da operação de agregação. Você pode consultar os resultados de uma operação de agregação específica com base neste nome.

    Limit

    O número máximo de linhas que podem ser retornadas para cada grupo. Por padrão, apenas uma linha de dados é retornada.

    Sort

    O método de classificação usado para ordenar os dados nos grupos.

    ColumnsToGet

    Os campos que você deseja retornar. Apenas campos em índices de pesquisa são suportados. Os campos ARRAY, DATE, GEOPOINT e NESTED não são suportados.

    O valor deste parâmetro é o mesmo que o valor de columnsToGet em SearchRequest. Basta especifique columnsToGet em SearchRequest.

  • Exemplo

    /// <summary>
    /// Query the rows that are obtained from the results of an aggregation operation in each group. 
    /// </summary>
    /// <param name="otsClient"></param>
    public static void TopRowsAggregation(OTSClient otsClient)
    {
        GroupByField groupByField = new GroupByField();
        groupByField.GroupByName = "GroupBy_Field";
        groupByField.FieldName = "pk0";
        groupByField.SubAggregations = new List<IAggregation>
        {
            new TopRowsAggregation
            {
                AggName = "TopRows_Agg",
                Sort = new Sort(new List<ISorter> { new FieldSort("pk1", SortOrder.DESC) }),
                Limit = 2
            }
        };
    
        MatchAllQuery matchAllQuery = new MatchAllQuery(); ;
    
        SearchQuery searchQuery = new SearchQuery();
        searchQuery.Query = matchAllQuery;
        searchQuery.Limit = 0;
        searchQuery.GroupByList = new List<IGroupBy>
        {
            groupByField
        };
    
        SearchRequest searchRequest = new SearchRequest(TableName, IndexName, searchQuery);
    
        SearchResponse searchResponse = otsClient.Search(searchRequest);
    
        foreach (GroupByFieldResultItem item in searchResponse.GroupByResults.GetAsGroupByFieldResult("GroupBy_Field").GroupByFieldResultItems)
        {
            foreach (Row row in item.SubAggregationResults.GetAsTopRowsAggregationResult("TopRows_Agg").Rows)
            {
                Console.WriteLine(JsonConvert.SerializeObject(row));
            }
        }
    }

Aninhamento

Você pode usar o aninhamento para execute operações de subagregação em um grupo. Por exemplo, você pode execute operações de agregação aninhadas em até dois níveis.

  • GroupBy + SubGroupBy: Os itens são agrupados por província e por cidade para obter os dados de cada cidade em cada província.

  • GroupBy + SubAggregation: Os itens são agrupados por província e o valor máximo de uma métrica é calculado para obter o valor máximo de uma métrica para cada província.

Nota

Para equilibrar desempenho e complexidade, apenas um número específico de camadas de aninhamento é permitido. Para mais informações, consulte Search index limits.

/// <summary>
/// Nesting. 
/// </summary>
/// <param name="otsClient"></param>
public static void SubGroupBy(OTSClient otsClient)
{
    GroupByField groupByField = new GroupByField();
    groupByField.GroupByName = "Field_GroupBy";
    groupByField.FieldName = "pk0";
    groupByField.SubGroupBys = new List<IGroupBy>
    {
        new GroupByRange
        {
            GroupByName = "Range_GroupBy",
            FieldName = "pk1",
            Ranges = new List<Range>
            {
                new Range(double.MinValue, 5),
                new Range(5,100),
                new Range(100, double.MaxValue)
            }

        }
    };

    MatchAllQuery matchAllQuery = new MatchAllQuery();

    SearchQuery searchQuery = new SearchQuery();
    searchQuery.GroupByList = new List<IGroupBy>
    {
        groupByField
    };
    searchQuery.GetTotalCount = true;
    searchQuery.Limit = 0;
    searchQuery.Query = matchAllQuery;

    SearchRequest searchRequest = new SearchRequest(TableName, IndexName, searchQuery);

    SearchResponse searchResponse = otsClient.Search(searchRequest);

    foreach (GroupByFieldResultItem item in searchResponse.GroupByResults.GetAsGroupByFieldResult("Field_GroupBy").GroupByFieldResultItems)
    {
        Console.WriteLine(JsonConvert.SerializeObject(item.SubGroupByResults.GetAsGroupByRangeResult("Range_GroupBy")));
    }
}

Múltiplas agregações

Você pode execute várias operações de agregação.

Nota

Se você execute várias operações de agregação complexas ao mesmo tempo, o processamento pode levar muito tempo.

/// <summary>
/// Multiple aggregations. 
/// </summary>
/// <param name="otsClient"></param>
public static void MultipleAggregation(OTSClient otsClient)
{
    MaxAggregation maxAggregation = new MaxAggregation();
    maxAggregation.AggName = "Max_Agg";
    maxAggregation.FieldName = "pk1";

    MinAggregation minAggregation = new MinAggregation();
    minAggregation.AggName = "Min_Agg";
    minAggregation.FieldName = "pk1";

    SumAggregation sumAggregation = new SumAggregation();
    sumAggregation.AggName = "Sum_Agg";
    sumAggregation.FieldName = "pk1";

    SearchQuery searchQuery = new SearchQuery();
    searchQuery.Limit = 0;
    searchQuery.Query = new MatchAllQuery();
    searchQuery.AggregationList = new List<IAggregation>
    {
        maxAggregation,
        minAggregation,
        sumAggregation
    };

    SearchRequest searchRequest = new SearchRequest(TableName, IndexName, searchQuery);

    SearchResponse searchResponse = otsClient.Search(searchRequest);

    Console.WriteLine(JsonConvert.SerializeObject(searchResponse));
}