Todos os produtos
Search
Central de documentação

Tablestore:Agregação

Última atualização: Jul 03, 2026

Execute operações de agregação para obter valores mínimos, máximos, soma, média, contagem e contagem distinta de linhas. Agrupe resultados por valor de campo, intervalo, localização geográfica ou filtro e realize consultas aninhadas. Combine múltiplas operações de agregação para consultas 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 especificadas e executa a agregação conforme a solicitação. Por isso, solicitações com agregação têm processamento mais complexo do que aquelas sem essa necessidade.

Informações básicas

A tabela a seguir descreve os métodos de agregação disponíveis.

Método

Descrição

Valor mínimo

Retorna o menor valor de um campo. Funciona de maneira semelhante à função MIN do SQL.

Valor máximo

Retorna o maior valor de um campo. Equivale à função MAX do SQL.

Soma

Calcula a soma de todos os valores de um campo numérico. Comportamento similar à função SUM do SQL.

Valor médio

Obtém a média de todos os valores de um campo numérico. Corresponde à função AVG do SQL.

Contagem

Retorna o número total de valores de um campo específico ou o total de linhas em um índice de busca. Análogo à função COUNT do SQL.

Contagem distinta

Indica a quantidade de valores únicos em um campo. Similar à função COUNT(DISTINCT) do SQL.

Estatísticas de percentil

Um valor de percentil indica a posição relativa de um dado dentro de um conjunto. Por exemplo, ao coletar estatísticas sobre o tempo de resposta de cada requisição durante a operação e manutenção rotineira do sistema, analise a distribuição desses tempos usando percentis como p25, p50, p90 e p99.

TopRows

Obtém estatísticas das principais linhas ordenadas por campos específicos em cada grupo.

Agrupamento por valor de campo

Agrupa os resultados da consulta com base nos valores dos campos. Valores idênticos ficam no mesmo grupo. O sistema retorna o valor de cada grupo e a respectiva contagem.

Nota

Se um grupo tiver uma quantidade muito grande de valores, o número calculado pode divergir do valor real.

Agrupamento por intervalo

Organiza os resultados da consulta conforme faixas de valores de um campo. Valores dentro de um intervalo específico são agrupados, e o sistema retorna a contagem de itens em cada faixa.

Agrupamento por localização geográfica

Classifica os resultados da consulta segundo a distância entre locais geográficos e um ponto central. Itens cuja distância se enquadra em determinada faixa formam um grupo, e o sistema informa quantos valores existem em cada intervalo.

Agrupamento por filtro

Filtra os resultados da consulta e os agrupa para calcular quantos itens correspondem a cada condição. A ordem de retorno segue a sequência em que os filtros foram definidos.

Consulta por histograma

Divide os resultados da consulta em intervalos de dados predefinidos. Valores que caem na mesma faixa pertencem ao mesmo grupo. O sistema devolve o intervalo de valores e a contagem de cada grupo.

Aninhamento

Pré-requisitos

Valor mínimo

Retorna o menor valor de um campo. Funciona de maneira semelhante à função MIN do SQL.

  • Parâmetros

    Parâmetro

    Descrição

    name

    Nome exclusivo da operação de agregação. Use esse nome para consultar os resultados de uma agregação específica.

    field_name

    Campo usado na operação de agregação. Apenas os tipos LONG, DOUBLE e DATE são aceitos.

    missing

    Valor padrão assumido pelo campo quando ele está vazio na linha processada pela agregação.

    • Sem a definição de missing, a linha é ignorada.

    • Ao definir missing, o sistema usa esse valor como substituto para o campo da linha.

  • Exemplo

    $request = array(
        'table_name' => 'myTableName',
        'index_name' => 'myIndexName',
        'search_query' => array(
            'offset' => 0,
            'limit' => 0,
            'get_total_count' => true,
            'query' => array(
                'query_type' => QueryTypeConst::MATCH_ALL_QUERY
            ),
            'aggs' => array(
                'aggs' => array(
                    array(
                        'name' => 'agg_min',
                        'type' => AggregationTypeConst::AGG_MIN,
                        'body' => array(
                            'field_name' => 'long',
                            'missing' => 0
                        )
                    ),
                ),
            )
        ),
        'columns_to_get' => array(
            'return_type' => ColumnReturnTypeConst::RETURN_ALL_FROM_INDEX,
        ),
    );
    
    $response = $this->otsClient->search($request);
    $agg_results = $response["aggs"]["agg_results"];
    
    print json_encode($agg_results, JSON_PRETTY_PRINT);

Valor máximo

Retorna o maior valor de um campo. Equivale à função MAX do SQL.

  • Parâmetros

    Parâmetro

    Descrição

    name

    Nome exclusivo da operação de agregação. Use esse nome para consultar os resultados de uma agregação específica.

    field_name

    Campo usado na operação de agregação. Apenas os tipos LONG, DOUBLE e DATE são aceitos.

    missing

    Valor padrão assumido pelo campo quando ele está vazio na linha processada pela agregação.

    • Sem a definição de missing, a linha é ignorada.

    • Ao definir missing, o sistema usa esse valor como substituto para o campo da linha.

  • Exemplo

    $request = array(
        'table_name' => 'myTableName',
        'index_name' => 'myIndexName',
        'search_query' => array(
            'offset' => 0,
            'limit' => 0,
            'get_total_count' => true,
            'query' => array(
                'query_type' => QueryTypeConst::MATCH_ALL_QUERY
            ),
            'aggs' => array(
                'aggs' => array(
                    array(
                        'name' => 'agg_max',
                        'type' => AggregationTypeConst::AGG_MAX,
                        'body' => array(
                            'field_name' => 'long',
                            'missing' => 0
                        )
                    ),
                ),
            )
        ),
        'columns_to_get' => array(
            'return_type' => ColumnReturnTypeConst::RETURN_ALL_FROM_INDEX,
        ),
    );
    
    $response = $this->otsClient->search($request);
    $agg_results = $response["aggs"]["agg_results"];
    
    print json_encode($agg_results, JSON_PRETTY_PRINT);

Soma

Calcula a soma de todos os valores de um campo numérico. Comportamento similar à função SUM do SQL.

  • Parâmetros

    Parâmetro

    Descrição

    name

    Nome exclusivo da operação de agregação. Use esse nome para consultar os resultados de uma agregação específica.

    field_name

    Campo usado na operação de agregação. Somente os tipos LONG e DOUBLE são suportados.

    missing

    Valor padrão assumido pelo campo quando ele está vazio na linha processada pela agregação.

    • Sem a definição de missing, a linha é ignorada.

    • Ao definir missing, o sistema usa esse valor como substituto para o campo da linha.

  • Exemplo

    $request = array(
        'table_name' => 'myTableName',
        'index_name' => 'myIndexName',
        'search_query' => array(
            'offset' => 0,
            'limit' => 0,
            'get_total_count' => true,
            'query' => array(
                'query_type' => QueryTypeConst::MATCH_ALL_QUERY
            ),
            'aggs' => array(
                'aggs' => array(
                    array(
                        'name' => 'agg_sum',
                        'type' => AggregationTypeConst::AGG_SUM,
                        'body' => array(
                            'field_name' => 'long',
                            'missing' => 0
                        )
                    ),
                ),
            )
        ),
        'columns_to_get' => array(
            'return_type' => ColumnReturnTypeConst::RETURN_ALL_FROM_INDEX,
        ),
    );
    
    $response = $this->otsClient->search($request);
    $agg_results = $response["aggs"]["agg_results"];
    
    print json_encode($agg_results, JSON_PRETTY_PRINT);

Valor médio

Obtém a média de todos os valores de um campo numérico. Corresponde à função AVG do SQL.

  • Parâmetros

    Parâmetro

    Descrição

    name

    Nome exclusivo da operação de agregação. Use esse nome para consultar os resultados de uma agregação específica.

    field_name

    Campo usado na operação de agregação. Apenas os tipos LONG, DOUBLE e DATE são aceitos.

    missing

    Valor padrão assumido pelo campo quando ele está vazio na linha processada pela agregação.

    • Sem a definição de missing, a linha é ignorada.

    • Ao definir missing, o sistema usa esse valor como substituto para o campo da linha.

  • Exemplo

    $request = array(
        'table_name' => 'myTableName',
        'index_name' => 'myIndexName',
        'search_query' => array(
            'offset' => 0,
            'limit' => 0,
            'get_total_count' => true,
            'query' => array(
                'query_type' => QueryTypeConst::MATCH_ALL_QUERY
            ),
            'aggs' => array(
                'aggs' => array(
                    array(
                        'name' => 'agg_avg',
                        'type' => AggregationTypeConst::AGG_AVG,
                        'body' => array(
                            'field_name' => 'long',
                            'missing' => 0
                        )
                    ),
                ),
            )
        ),
        'columns_to_get' => array(
            'return_type' => ColumnReturnTypeConst::RETURN_ALL_FROM_INDEX,
        ),
    );
    
    $response = $this->otsClient->search($request);
    $agg_results = $response["aggs"]["agg_results"];
    
    print json_encode($agg_results, JSON_PRETTY_PRINT);

Contagem

Retorna o número total de valores de um campo específico ou o total de linhas em um índice de busca. Análogo à função COUNT do SQL.

Nota

Existem duas formas de obter o total de linhas em um índice de busca ou daquelas que satisfazem as condições da consulta:

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

  • Use o recurso de consulta para contar as linhas correspondentes. Defina setGetTotalCount como true na consulta. Para obter o total geral de linhas do índice de busca, empregue MatchAllQuery.

Para saber quantas linhas contêm determinada coluna no índice de busca, utilize o nome dessa coluna como valor da expressão de contagem. Essa abordagem é ideal para cenários com colunas esparsas.

  • Parâmetros

    Parâmetro

    Descrição

    name

    Nome exclusivo da operação de agregação. Use esse nome para consultar os resultados de uma agregação específica.

    field_name

    Campo usado na operação de agregação. Os tipos aceitos são LONG, DOUBLE, BOOLEAN, KEYWORD, GEO_POINT e DATE.

  • Exemplo

    $request = array(
        'table_name' => 'myTableName',
        'index_name' => 'myIndexName',
        'search_query' => array(
            'offset' => 0,
            'limit' => 0,
            'get_total_count' => true,
            'query' => array(
                'query_type' => QueryTypeConst::MATCH_ALL_QUERY
            ),
            'aggs' => array(
                'aggs' => array(
                    array(
                        'name' => 'agg_count',
                        'type' => AggregationTypeConst::AGG_COUNT,
                        'body' => array(
                            'field_name' => 'long',
                            'missing' => 0
                        )
                    ),
                ),
            )
        ),
        'columns_to_get' => array(
            'return_type' => ColumnReturnTypeConst::RETURN_ALL_FROM_INDEX,
        ),
    );
    
    $response = $this->otsClient->search($request);
    $agg_results = $response["aggs"]["agg_results"];
    
    print json_encode($agg_results, JSON_PRETTY_PRINT);

Contagem distinta

Indica a quantidade de valores únicos em um campo. Similar à função COUNT(DISTINCT) do SQL.

Nota

O resultado da contagem distinta é uma aproximação.

  • Quando o total de linhas antes da aplicação da contagem distinta for inferior a 10.000, o cálculo fica próximo do valor exato.

  • Se o total de linhas atingir ou ultrapassar 100 milhões, a margem de erro gira em torno de 2%.

  • Parâmetros

    Parâmetro

    Descrição

    name

    Nome exclusivo da operação de agregação. Use esse nome para consultar os resultados de uma agregação específica.

    field_name

    Campo usado na operação de agregação. Os tipos aceitos são LONG, DOUBLE, BOOLEAN, KEYWORD, GEO_POINT e DATE.

    missing

    Valor padrão assumido pelo campo quando ele está vazio na linha processada pela agregação.

    • Sem a definição de missing, a linha é ignorada.

    • Ao definir missing, o sistema usa esse valor como substituto para o campo da linha.

  • Exemplo

    $request = array(
        'table_name' => 'myTableName',
        'index_name' => 'myIndexName',
        'search_query' => array(
            'offset' => 0,
            'limit' => 0,
            'get_total_count' => true,
            'query' => array(
                'query_type' => QueryTypeConst::MATCH_ALL_QUERY
            ),
            'aggs' => array(
                'aggs' => array(
                    array(
                        'name' => 'agg_distinct_count',
                        'type' => AggregationTypeConst::AGG_DISTINCT_COUNT,
                        'body' => array(
                            'field_name' => 'boolean',
                            'missing' => false
                        )
                    ),
                ),
            )
        ),
        'columns_to_get' => array(
            'return_type' => ColumnReturnTypeConst::RETURN_ALL_FROM_INDEX,
        ),
    );
    
    $response = $this->otsClient->search($request);
    $agg_results = $response["aggs"]["agg_results"];
    
    print json_encode($agg_results, JSON_PRETTY_PRINT);

Estatísticas de percentil

Um valor de percentil indica a posição relativa de um dado dentro de um conjunto. Por exemplo, ao coletar estatísticas sobre o tempo de resposta de cada requisição durante a operação e manutenção rotineira do sistema, analise a distribuição desses tempos usando percentis como p25, p50, p90 e p99.

  • Parâmetros

    Parâmetro

    Descrição

    name

    Nome exclusivo da operação de agregação. Use esse nome para consultar os resultados de uma agregação específica.

    field_name

    Campo usado na operação de agregação. Apenas os tipos LONG, DOUBLE e DATE são aceitos.

    percentiles

    Percentis desejados, como p50, p90 e p99. É possível especificar um ou mais valores.

    missing

    Valor padrão assumido pelo campo quando ele está vazio na linha processada pela agregação.

    • Sem a definição de missing, a linha é ignorada.

    • Ao definir missing, o sistema usa esse valor como substituto para o campo da linha.

  • Exemplo

    $request = array(
        'table_name' => 'myTableName',
        'index_name' => 'myIndexName',
        'search_query' => array(
            'offset' => 0,
            'limit' => 0,
            'get_total_count' => true,
            'query' => array(
                'query_type' => QueryTypeConst::MATCH_ALL_QUERY
            ),
            'aggs' => array(
                'aggs' => array(
                    array(
                        'name' => 'agg_percentiles',
                        'type' => AggregationTypeConst::AGG_PERCENTILES,
                        'body' => array(
                            'field_name' => 'long',
                            'percentiles' => array(60, 80, 100),
                            'missing' => 0
                        )
                    ),
                ),
            )
        ),
        'columns_to_get' => array(
            'return_type' => ColumnReturnTypeConst::RETURN_ALL_FROM_INDEX,
        ),
    );
    
    $response = $this->otsClient->search($request);
    $agg_results = $response["aggs"]["agg_results"];
    
    print json_encode($agg_results, JSON_PRETTY_PRINT);

TopRows

Obtém estatísticas das principais linhas ordenadas por campos específicos em cada grupo.

Após agrupar os resultados da consulta com GroupBy, recupere as linhas de cada grupo. Esse método equivale a ANY_VALUE(field) no MySQL.

  • Parâmetros

    Parâmetro

    Descrição

    name

    Nome exclusivo da operação de agregação. Use esse nome para consultar os resultados de uma agregação específica.

    limit

    Quantidade de linhas principais a retornar por grupo.

    sort

    Regras de ordenação das linhas em cada grupo. O sistema retorna o número especificado de linhas principais seguindo esses critérios.

    columns_to_get

    Campos a serem retornados. Apenas campos presentes em índices de busca são aceitos. Campos ARRAY, DATE, GEOPOINT e NESTED não são suportados.

    Esse parâmetro tem o mesmo significado de columns_to_get na solicitação principal. Basta defini-lo na requisição.

    Nota

    Ao buscar linhas resultantes de uma agregação por grupo, se o índice de busca contiver campos Nested, Geopoint ou Array, a resposta trará apenas as informações da chave primária. Para acessar o campo desejado, consulte diretamente a tabela de dados.

  • Exemplo

    $request = array(
        'table_name' => 'myTableName',
        'index_name' => 'myIndexName',
        'search_query' => array(
            'offset' => 0,
            'limit' => 0,
            'get_total_count' => true,
            'query' => array(
                'query_type' => QueryTypeConst::MATCH_ALL_QUERY
            ),
              'aggs' => array(
            'aggs' => array(
                    array(
                        'name' => 'avg_top_rows',
                        'type' => AggregationTypeConst::AGG_TOP_ROWS,
                        'body' => array(
                            'limit' => 2,
                            'sort' => array(
                                'sorters' => array(
                                    array(
                                        'field_sort' => array(
                                            'field_name' => 'long',
                                            'order' => SortOrderConst::SORT_ORDER_DESC
                                        )
                                    )
                                )
                            )
                        )
                    ),
                ),
            )
        ),
        'columns_to_get' => array(
            'return_type' => ColumnReturnTypeConst::RETURN_ALL_FROM_INDEX,
        ),
    );
    
    $response = $this->otsClient->search($request);
    $agg_results = $response["aggs"]["agg_results"];
    
    print json_encode($agg_results, JSON_PRETTY_PRINT);

Agrupamento por valor de campo

Agrupa os resultados da consulta com base nos valores dos campos. Valores idênticos ficam no mesmo grupo. O sistema retorna o valor de cada grupo e a respectiva contagem.

Nota

Se um grupo tiver uma quantidade muito grande de valores, o número calculado pode divergir do valor real.

  • Parâmetros

    Parâmetro

    Descrição

    name

    Nome exclusivo da operação de agregação. Use esse nome para consultar os resultados de uma agregação específica.

    field_name

    Campo usado na operação de agregação. Os tipos aceitos são LONG, DOUBLE, BOOLEAN, KEYWORD e DATE.

    sort

    Critérios de ordenação dos grupos. Por padrão, a classificação ocorre em ordem decrescente pelo número de itens. Se houver várias regras, elas são aplicadas na sequência definida. Opções disponíveis:

    • Ordenar por valor em ordem alfabética.

    • Ordenar por valor em ordem alfabética inversa.

    • Ordenar por contagem de linhas em ordem crescente.

    • Ordenar por contagem de linhas em ordem decrescente.

    • Ordenar pelos valores obtidos nas subagregações em ordem crescente.

    • Ordenar pelos valores obtidos nas subagregações em ordem decrescente.

    size

    Número de grupos a retornar. Valor padrão: 10. Limite máximo: 2000. Caso existam mais de 2.000 grupos, apenas os primeiros serão devolvidos.

    sub_aggs e sub_group_bys

    Operação de subagregação executada sobre os resultados do agrupamento.

    • Cenário

      Consultar a quantidade de produtos por categoria, bem como os preços máximo e mínimo em cada uma.

    • Método

      Agrupe os resultados por categoria de produto para obter a contagem por grupo. Em seguida, execute duas subagregações para extrair os preços máximo e mínimo de cada categoria.

    • Resultado de exemplo

      • Frutas: 5. Preço máximo de USD 2. Preço mínimo de USD 0,5.

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

      • Dispositivos eletrônicos: 3. Preço máximo de USD 1.160. Preço mínimo de USD 310.

      • Outros produtos: 15. Preço máximo de USD 130. Preço mínimo de USD 11.

  • Exemplo

    $request = array(
        'table_name' => 'myTableName',
        'index_name' => 'myIndexName',
        'search_query' => array(
            'offset' => 0,
            'limit' => 0,
            'get_total_count' => true,
            'query' => array(
                'query_type' => QueryTypeConst::MATCH_ALL_QUERY
            ),
            'group_bys' => array(
                'group_bys' => array(
                    array(
                        'name' => 'group_by_GROUP_BY_FIELD',
                        'type' => GroupByTypeConst::GROUP_BY_FIELD,
                        'body' => array(
                            'field_name' => 'boolean',
                            'size' => 3,
                            'min_doc_count' => 0,
                            'sort' => array(
                                'sorters' => array(
                                    array(
                                        'group_key_sort' => array(
                                            'order' => SortOrderConst::SORT_ORDER_DESC
                                        ),
                                    ),
                                )
                            ),
                        )
                    ),
                ),
            )
        ),
        'columns_to_get' => array(
            'return_type' => ColumnReturnTypeConst::RETURN_ALL_FROM_INDEX,
        ),
    );
    
    $response = $this->otsClient->search($request);
    $group_by_results = $response["group_bys"]["group_by_results"];
    
    print json_encode($group_by_results, JSON_PRETTY_PRINT);

Agrupamento por intervalo

Organiza os resultados da consulta conforme faixas de valores de um campo. Valores dentro de um intervalo específico são agrupados, e o sistema retorna a contagem de itens em cada faixa.

  • Parâmetros

    Parâmetro

    Descrição

    name

    Nome exclusivo da operação de agregação. Use esse nome para consultar os resultados de uma agregação específica.

    field_name

    Campo usado na operação de agregação. Somente os tipos LONG e DOUBLE são suportados.

    ranges[from, to)

    Faixas de valores utilizadas no agrupamento.

    O intervalo pode variar de Double.MIN_VALUE até Double.MAX_VALUE.

    sub_aggs e sub_group_bys

    Operação de subagregação executada sobre os resultados do agrupamento.

    Por exemplo, após agrupar resultados por volume de vendas e por estado, identifique qual estado concentra a maior fatia das vendas em determinada faixa. Para isso, defina um valor para GroupByField dentro de GroupByRange.

  • Exemplo

    $request = array(
        'table_name' => 'myTableName',
        'index_name' => 'myIndexName',
        'search_query' => array(
            'offset' => 0,
            'limit' => 0,
            'get_total_count' => true,
            'query' => array(
                'query_type' => QueryTypeConst::MATCH_ALL_QUERY
            ),
            'group_bys' => array(
                'group_bys' => array(
                    array(
                        'name' => 'group_by_GROUP_BY_RANGE',
                        'type' => GroupByTypeConst::GROUP_BY_RANGE,
                        'body' => array(
                            'field_name' => 'long',
                            'ranges' => array(
                                array(
                                    'from' => 1,
                                    'to' => 3
                                ),
                                array(
                                    'from' => 3,
                                    'to' => 6
                                ),
                                array(
                                    'from' => 6,
                                    'to' => 10
                                )
                            )
                        )
                    ),
                ),
            )
        ),
        'columns_to_get' => array(
            'return_type' => ColumnReturnTypeConst::RETURN_ALL_FROM_INDEX,
        ),
    );
    
    $response = $this->otsClient->search($request);
    $group_by_results = $response["group_bys"]["group_by_results"];
    
    print json_encode($group_by_results, JSON_PRETTY_PRINT);

Agrupamento por localização geográfica

Classifica os resultados da consulta segundo a distância entre locais geográficos e um ponto central. Itens cuja distância se enquadra em determinada faixa formam um grupo, e o sistema informa quantos valores existem em cada intervalo.

  • Parâmetros

    Parâmetro

    Descrição

    name

    Nome exclusivo da operação de agregação. Use esse nome para consultar os resultados de uma agregação específica.

    field_name

    Campo utilizado na operação de agregação. Apenas o tipo GEOPOINT é aceito.

    origin(lat, lon)

    Coordenadas do ponto central.

    lat representa a latitude e lon representa a longitude desse ponto.

    ranges[from, to)

    Faixas de distância usadas no agrupamento, medidas em metros. Os valores de from e to devem ser do tipo DOUBLE.

    O intervalo pode variar de Double.MIN_VALUE até Double.MAX_VALUE.

    sub_aggs e sub_group_bys

    Operação de subagregação executada sobre os resultados do agrupamento.

  • Exemplo

    $request = array(
        'table_name' => 'myTableName',
        'index_name' => 'myIndexName',
        'search_query' => array(
            'offset' => 0,
            'limit' => 0,
            'get_total_count' => true,
            'query' => array(
                'query_type' => QueryTypeConst::MATCH_ALL_QUERY
            ),
            'group_bys' => array(
                'group_bys' => array(
                    array(
                        'name' => 'group_by_GROUP_BY_GEO_DISTANCE',
                        'type' => GroupByTypeConst::GROUP_BY_GEO_DISTANCE,
                        'body' => array(
                            'field_name' => 'geo',
                            'origin' => array(
                                'lat' => 5,
                                'lon' => 6
                            ),
                            'ranges' => array(
                                array(
                                    'from' => 0.,
                                    'to' => 1000.
                                ),
                                array(
                                    'from' => 10000.,
                                    'to' => 100000.
                                ),
                                array(
                                    'from' => 100000.,
                                ),
                            )
                        )
                    ),
                ),
            )
        ),
        'columns_to_get' => array(
            'return_type' => ColumnReturnTypeConst::RETURN_ALL_FROM_INDEX,
        ),
    );
    
    $response = $this->otsClient->search($request);
    $group_by_results = $response["group_bys"]["group_by_results"];
    
    print json_encode($group_by_results, JSON_PRETTY_PRINT);

Agrupamento por filtro

Filtra os resultados da consulta e os agrupa para calcular quantos itens correspondem a cada condição. A ordem de retorno segue a sequência em que os filtros foram definidos.

  • Parâmetros

    Parâmetro

    Descrição

    name

    Nome exclusivo da operação de agregação. Use esse nome para consultar os resultados de uma agregação específica.

    filters

    Filtros aplicados à consulta. Os resultados respeitam a ordem de definição dos filtros.

    sub_aggs e sub_group_bys

    Operação de subagregação executada sobre os resultados do agrupamento.

  • Exemplo

    $request = array(
        'table_name' => 'myTableName',
        'index_name' => 'myIndexName',
        'search_query' => array(
            'offset' => 0,
            'limit' => 0,
            'get_total_count' => true,
            'query' => array(
                'query_type' => QueryTypeConst::MATCH_ALL_QUERY
            ),
            'group_bys' => array(
                'group_bys' => array(
                    array(
                        'name' => 'group_by_GROUP_BY_FILTER',
                        'type' => GroupByTypeConst::GROUP_BY_FILTER,
                        'body' => array(
                            'filters' => array(
                                array(
                                    'query_type' => QueryTypeConst::TERM_QUERY,
                                    'query' => array(
                                        'field_name' => 'boolean',
                                        'term' => false
                                    )
                                ),
                                array(
                                    'query_type' => QueryTypeConst::TERM_QUERY,
                                    'query' => array(
                                        'field_name' => 'boolean',
                                        'term' => true
                                    )
                                )
                            )
                        )
                    ),
                ),
            )
        ),
        'columns_to_get' => array(
            'return_type' => ColumnReturnTypeConst::RETURN_ALL_FROM_INDEX,
        ),
    );
    
    $response = $this->otsClient->search($request);
    $group_by_results = $response["group_bys"]["group_by_results"];
    
    print json_encode($group_by_results, JSON_PRETTY_PRINT);

Consulta por histograma

Divide os resultados da consulta em intervalos de dados predefinidos. Valores que caem na mesma faixa pertencem ao mesmo grupo. O sistema devolve o intervalo de valores e a contagem de cada grupo.

  • Parâmetros

    Parâmetro

    Descrição

    name

    Nome exclusivo da operação de agregação. Use esse nome para consultar os resultados de uma agregação específica.

    field_name

    Campo usado na operação de agregação. Somente os tipos LONG e DOUBLE são suportados.

    interval

    Intervalo de dados utilizado para gerar os resultados da agregação.

    field_range[min,max]

    Faixa usada em conjunto com o parâmetro interval para limitar a quantidade de grupos. O resultado da fórmula não pode ultrapassar 2.000.

    min_doc_count

    Contagem mínima de linhas. Grupos com menos linhas do que esse limite não terão seus resultados de agregação retornados.

    missing

    Valor padrão assumido pelo campo quando ele está vazio na linha processada pela agregação.

    • Sem a definição de missing, a linha é ignorada.

    • Ao definir missing, o sistema usa esse valor como substituto para o campo da linha.

  • Exemplo

    $request = array(
        'table_name' => 'myTableName',
        'index_name' => 'myIndexName',
        'search_query' => array(
            'offset' => 0,
            'limit' => 0,
            'get_total_count' => true,
            'query' => array(
                'query_type' => QueryTypeConst::MATCH_ALL_QUERY
            ),
            'group_bys' => array(
                'group_bys' => array(
                    array(
                        'name' => 'group_by_GROUP_BY_HISTOGRAM',
                        'type' => GroupByTypeConst::GROUP_BY_HISTOGRAM,
                        'body' => array(
                            'field_name' => 'long',
                            'interval' => 3,
                            'missing' => 0,
                            'min_doc_count' => 0,
                            'field_range' => array(
                                'min' => 2,
                                'max' => 10,
                            ),
                            'sort' => array(
                                'sorters' => array(
                                    array(
                                        'row_count_sort' => array(
                                            'order' => SortOrderConst::SORT_ORDER_ASC
                                        )
                                    )
                                )
                            )
                        )
                    ),
                ),
            )
        ),
        'columns_to_get' => array(
            'return_type' => ColumnReturnTypeConst::RETURN_ALL_FROM_INDEX,
        ),
    );
    
    $response = $this->otsClient->search($request);
    $group_by_results = $response["group_bys"]["group_by_results"];
    
    print json_encode($group_by_results, JSON_PRETTY_PRINT);

Aninhamento

O aninhamento permite executar subagregações dentro de um grupo. É possível criar estruturas de agregação aninhada com até dois níveis.

  • GroupBy + SubGroupBy: Agrupamento por estado e depois por cidade, obtendo dados detalhados de cada município dentro de seu respectivo estado.

  • GroupBy + SubAggregation: Agrupamento por estado combinado com o cálculo do valor máximo de uma métrica, revelando o pico dessa métrica em cada estado.

Nota

Para equilibrar desempenho e complexidade, o sistema limita o número de camadas de aninhamento. Consulte Limites do índice de busca para mais detalhes.

$request = array(
    'table_name' => 'myTableName',
    'index_name' => 'myIndexName',
    'search_query' => array(
        'offset' => 0,
        'limit' => 0,
        'get_total_count' => true,
        'query' => array(
            'query_type' => QueryTypeConst::MATCH_ALL_QUERY
        ),
        'group_bys' => array(
            'group_bys' => array(
                array(
                    'name' => 'group_by_GROUP_BY_FIELD',
                    'type' => GroupByTypeConst::GROUP_BY_FIELD,
                    'body' => array(
                        'field_name' => 'boolean',
                        'size' => 3,
                        'min_doc_count' => 0,
                        'sort' => array(
                            'sorters' => array(
                                array(
                                    'group_key_sort' => array(
                                        'order' => SortOrderConst::SORT_ORDER_DESC
                                    ),
                                ),
                            )
                        ),
                        'sub_aggs' => array(
                            'aggs' => array(
                                array(
                                    'name' => 'groupSum',
                                    'type' => AggregationTypeConst::AGG_SUM,
                                    'body' => array(
                                        'field_name' => 'long',
                                        'missing' => 0
                                    )
                                ),
                            ),
                        ),
                    )
                ),
            ),
        )
    ),
    'columns_to_get' => array(
        'return_type' => ColumnReturnTypeConst::RETURN_ALL_FROM_INDEX,
    ),
);

$response = $this->otsClient->search($request);
$group_by_results = $response["group_bys"]["group_by_results"];

print json_encode($group_by_results, JSON_PRETTY_PRINT);