Função de agregação histogram_numeric
Aplica-se a: SQL do Databricks Databricks Runtime 10,2 e posterior
Calcula um histograma na expr
usando compartimentos numBins
.
Sintaxe
histogram_numeric ( [ALL | DISTINCT ] expr, numBins ) [ FILTER ( WHERE cond ) ]
Argumentos
expr
: uma expressão numérica,TIMESTAMP
,DATE
ouINTERVAL
que é processada pela função para gerar o histograma.numBins
: um valor literalINTEGER
que deve ser superior a 1, indicando a quantidade de compartimentos para o cálculo do histograma.cond
: uma expressãoBOOLEAN
opcional que serve para filtrar as linhas que serão agregadas.
Devoluções
O valor retornado é uma ARRAY
de STRUCTS
contendo os campos x
e y
, que representam os centros dos compartimentos do histograma. O tipo de x
é o mesmo que o da expr
, e o tipo de y
é DOUBLE
.
Aumentar o valor de numBins
deixa a aproximação do histograma mais refinada e detalhada. No entanto, isso pode gerar artefatos perto de valores atípicos.
Normalmente, de 20 a 40 compartimentos são suficientes para a maioria dos histogramas, mas conjuntos de dados assimétricos ou menores podem exigir um número maior de compartimentos. Vale ressaltar que esta função cria um histograma com larguras de compartimento não uniformes.
Ela não garante uma precisão em termos de erro quadrático médio do histograma, mas, na prática, os resultados são comparáveis aos histogramas gerados por outros softwares de computação.
Definir DISTINCT
faz com que a função seja aplicada somente a um conjunto único de valores expr
.
Exemplos
> SELECT histogram_numeric(col, 5)
FROM VALUES (0), (1), (2), (10) AS tab(col);
[{"x":0.0,"y":1.0},{"x":1.0,"y":1.0},{"x":2.0,"y":1.0},{"x":10.0,"y":1.0}]
> SELECT histogram_numeric(col, 5)
FROM VALUES (0L), (1L), (2L), (10L) AS tab(col);
[{"x":0,"y":1.0},{"x":1,"y":1.0},{"x":2,"y":1.0},{"x":10,"y":1.0}]
> SELECT histogram_numeric(col, 5)
FROM VALUES (0F), (1F), (2F), (10F) AS tab(col);
[{"x":0.0,"y":1.0},{"x":1.0,"y":1.0},{"x":2.0,"y":1.0},{"x":10.0,"y":1.0}]
> SELECT histogram_numeric(col, 5)
FROM VALUES (0D), (1D), (2D), (10D) AS tab(col);
[{"x":0.0,"y":1.0},{"x":1.0,"y":1.0},{"x":2.0,"y":1.0},{"x":10.0,"y":1.0}]
> SELECT histogram_numeric(col, 5)
FROM VALUES (INTERVAL 0 YEAR), (INTERVAL 1 YEAR), (INTERVAL 2 YEAR),
(INTERVAL 3 YEAR) AS tab(col);
[{"x":0-0,"y":1.0},{"x":1-0,"y":1.0},{"x":2-0,"y":1.0},{"x":3-0,"y":1.0}]
> SELECT histogram_numeric(col, 5)
FROM VALUES (INTERVAL 0 DAY), (INTERVAL 1 DAY), (INTERVAL 2 DAY),
(INTERVAL 3 DAY) AS tab(col);
[{"x":0 00:00:00.000000000,"y":1.0},{"x":1 00:00:00.000000000,"y":1.0},{"x":2 00:00:00.000000000,"y":1.0},{"x":3 00:00:00.000000000,"y":1.0}]
> SELECT histogram_numeric(col, 5)
FROM VALUES (TIMESTAMP '2020-01-01'), (TIMESTAMP'2020-02-01'),
(TIMESTAMP'2020-03-01'), (TIMESTAMP'2020-10-01') AS tab(col)
[{"x":2020-01-01 00:00:00,"y":1.0},{"x":2020-02-01 00:00:00,"y":1.0},{"x":2020-03-01 00:00:00,"y":1.0},{"x":2020-10-01 00:00:00,"y":1.0}]