APPROX_COUNT_DISTINCT (Transact-SQL)
Aplica-se a: SQL Server 2019 (15.x) Banco de Dados SQL do Azure Instância Gerenciada de SQL do Azure Azure Synapse Analytics Ponto de extremidade de análise de SQL no Microsoft Fabric Warehouse no Microsoft Fabric
Essa função retorna o número aproximado de valores não nulos exclusivos em um grupo.
Convenções de sintaxe de Transact-SQL
Sintaxe
APPROX_COUNT_DISTINCT ( expression )
Argumentos
expressão
Uma expressão de qualquer tipo, exceto image, sql_variant, ntext ou text.
Tipos de retorno
bigint
Comentários
APPROX_COUNT_DISTINCT( expression )
avalia uma expressão de cada linha em um grupo e retorna o número aproximado de valores não nulos exclusivos em um grupo. Essa função foi projetada para fornecer agregações em grandes conjuntos de dados, nos quais a capacidade de resposta é mais importante do que a precisão absoluta.
APPROX_COUNT_DISTINCT
foi projetado para uso em cenários de big data e é otimizado para as seguintes condições:
- Acesso de conjuntos de dados com milhões de linhas ou mais e
- Agregação de uma coluna ou colunas com muitos valores distintos
A implementação da função garante uma taxa de erro de até %2 em uma probabilidade de 97%.
APPROX_COUNT_DISTINCT
requer menos memória do que uma operação COUNT DISTINCT exaustiva. Dado o volume de memória menor, APPROX_COUNT_DISTINCT
apresenta menos probabilidade de despejo de memória em disco comparado com uma operação COUNT DISTINCT precisa. Saiba mais sobre o algoritmo usado para conseguir isso em HyperLogLog.
Observação
Com as cadeias de caracteres confidenciais de ordenação, APPROX_COUNT_DISTINCT usa uma correspondência binária e fornece resultados que teriam sido gerados na presença de ordenações BIN, não BIN2.
Exemplos
a. Usar APPROX_COUNT_DISTINCT
Este exemplo retorna o número aproximado de chaves de ordem diferentes da tabela ordens.
SELECT APPROX_COUNT_DISTINCT(O_OrderKey) AS Approx_Distinct_OrderKey
FROM dbo.Orders;
Veja a seguir o conjunto de resultados.
Approx_Distinct_OrderKey
------------------------
15164704
B. Usar APPROX_COUNT_DISTINCT com GROUP BY
Este exemplo retorna o número aproximado de chaves de ordem diferentes por status da ordem da tabela ordens.
SELECT O_OrderStatus, APPROX_COUNT_DISTINCT(O_OrderKey) AS Approx_Distinct_OrderKey
FROM dbo.Orders
GROUP BY O_OrderStatus
ORDER BY O_OrderStatus;
Veja a seguir o conjunto de resultados.
O_OrderStatus Approx_Distinct_OrderKey
---------------------------------------------------------------- ------------------------
F 7397838
O 7387803
P 388036