Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Si applica a:Endpoint di analisi SQL in Microsoft Fabric e Warehouse in Microsoft Fabric
La APPROX_QUANTILE funzione restituisce un quantile continuo approssimato di valori nonNULL numerici. È possibile usarlo sia come funzione di aggregazione che come funzione finestra (analitica):
- Utilizzo aggregato: restituisce il quantile approssimativo richiesto per un intero gruppo.
- Utilizzo delle finestre: restituisce il quantile approssimativo richiesto per ogni partizione preservando l'output a livello di riga.
Convenzioni relative alla sintassi Transact-SQL
Syntax
Sintassi della funzione di aggregazione:
APPROX_QUANTILE ( numeric_literal , numeric_expression )
Sintassi della funzione analitica:
APPROX_QUANTILE ( numeric_literal , numeric_expression ) OVER ( [ <partition_by_clause> ] )
Arguments
numeric_literal
Il quantile da stimare. Il valore deve appartenere all'intervallo inclusivo da 0.0 fino a 1.0. Ad esempio, specificare 0.5 di stimare la mediana o 0.95 stimare il 95° percentile.
numeric_expression
L'espressione numerica il cui quantile approssimativo viene calcolato. I tipi numerici esatti supportati sono int, bigint, smallint, tinyint, decimalnumeric, , smallmoney, e money. I tipi numerici approssimati supportati sono float e real.
Clausola OVER
Il partition_by_clause divide il set di risultati prodotto dalla FROM clausola in partizioni e la funzione viene applicata a ogni partizione.
Se non specifichi partition_by_clause, la funzione tratta tutte le righe dell'insieme di risultati della query come una singola partizione.
La OVER clausola non supporta ORDER BY, ROWS, o RANGE per APPROX_QUANTILE.
Per altre informazioni, vedere clausola SELECT - OVER (Transact-SQL).
Tipi restituiti
Restituisce float(53).
Osservazioni:
APPROX_QUANTILE stima un quantile continuo sui valori ordinati non inNULL input. Usa QUANTILE quando hai bisogno di un risultato esatto.
I risultati approssimati possono differire leggermente da quelli esatti QUANTILE e possono variare tra le esecuzioni a causa dei piani di esecuzione e dei percorsi di fusione paralleli.
APPROX_QUANTILE è non deterministico. Per altre informazioni, vedere Funzioni deterministiche e non deterministiche.
NULL i valori vengono ignorati. Se tutti i valori di input sono NULL, o se nessuna riga è qualificata, APPROX_QUANTILE restituisce NULL. Quando ANSI_WARNINGS è ON, eliminare NULL i valori produce l'avvertimento aggregato standard.
APPROX_QUANTILE è pensato per ridurre la latenza e l'uso di memoria rispetto ai calcoli esatti QUANTILE su grandi dataset.
DISTINCT non è supportata. Le espressioni di personaggi, data, ora e data-time non sono supportate.
La APPROX_QUANTILE funzione è disponibile in Fabric Data Warehouse e nell'endpoint di analisi SQL di Fabric elementi. La APPROX_QUANTILE funzione non è supportata in SQL Server, database SQL di Azure, Istanza gestita di SQL di Azure o database SQL in Fabric.
Caso di utilizzo
Utilizzare APPROX_QUANTILE per dashboard su larga scala, analisi esplorative e report raggruppati dove una stima ravvicinata è sufficiente. Ad esempio, stima importi p90 delle richieste, p95 latenza del servizio o p99 valori di telemetria senza il costo di un calcolo esatto del quantile.
Examples
A. Calcolare i quantili approssimati aggregati
Questo esempio stima il primo quartile, la mediana, il terzo quartile e il 95° percentile.
WITH Samples AS (
SELECT *
FROM (VALUES
(1), (NULL), (2), (3), (4), (5), (6), (7), (8), (13)
) AS v(value)
)
SELECT
APPROX_QUANTILE(0.25, value) AS ApproxQ1,
APPROX_QUANTILE(0.50, value) AS ApproxMedian,
APPROX_QUANTILE(0.75, value) AS ApproxQ3,
APPROX_QUANTILE(0.95, value) AS ApproxP95
FROM Samples;
B. Calcola un quantile approssimativo per ciascun gruppo
Questo esempio stima l'importo del 90° percentile delle richieste per ciascun piano assicurativo.
WITH Claims AS (
SELECT *
FROM (VALUES
('Plan-A', 420.00),
('Plan-A', 500.00),
('Plan-A', 610.00),
('Plan-B', 250.00),
('Plan-B', 275.00),
('Plan-B', 310.00)
) AS v(plan_name, claim_amount)
)
SELECT
plan_name,
APPROX_QUANTILE(0.90, claim_amount) AS ApproxP90ClaimAmount
FROM Claims
GROUP BY plan_name;
C. Restituisci NULL per un gruppo all-NULL
Questo esempio restituisce NULL perché tutti i valori qualificanti sono NULL.
WITH CampaignDiscounts AS (
SELECT *
FROM (VALUES
(9001, NULL),
(9001, NULL),
(9001, NULL),
(9002, 10.00)
) AS v(campaign_id, discount_percent)
)
SELECT APPROX_QUANTILE(0.90, discount_percent) AS ApproxP90DiscountPercent
FROM CampaignDiscounts
WHERE campaign_id = 9001;
D. Calcola un quantile approssimativo di finestra partizionata
Questo esempio aggiunge la latenza approssimativa del 95° percentile per ogni servizio a ogni riga di richieste.
WITH ServiceLatency AS (
SELECT *
FROM (VALUES
('Checkout', 'req-001', 180),
('Checkout', 'req-002', 220),
('Checkout', 'req-003', 260),
('Search', 'req-010', 90),
('Search', 'req-011', 110),
('Search', 'req-012', 130)
) AS v(service, request_id, latency_ms)
)
SELECT
service,
request_id,
latency_ms,
APPROX_QUANTILE(0.95, latency_ms) OVER (PARTITION BY service) AS ServiceApproxP95Latency
FROM ServiceLatency;