Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Применимо к:Конечная точка аналитики SQL в Microsoft Fabric и хранилище в Microsoft Fabric
Функция APPROX_QUANTILE возвращает приблизительный непрерывный квантиль нечисловыхNULL значений. Ее можно использовать как агрегатную функцию, так и функцию окна (аналитика):
- Совокупное использование: возвращает запрошенный приблизительный квантиль для всей группы.
- Использование окна: возвращает запрошенный приблизительный квантиль для каждого раздела при сохранении выхода на уровне строки.
Соглашения о синтаксисе Transact-SQL
Syntax
Синтаксис функции агрегирования:
APPROX_QUANTILE ( numeric_literal , numeric_expression )
Синтаксис функции аналитики:
APPROX_QUANTILE ( numeric_literal , numeric_expression ) OVER ( [ <partition_by_clause> ] )
Аргументы
numeric_literal
Квантиль для оценки. Значение должно находиться в инклюзивном диапазоне от 0.0 до 1.0. Например, укажите 0.5 , чтобы оценить медиану или 0.95 оценить 95-й процентиль.
numeric_expression
Числовое выражение, приближённый квантиль которого вычисляется. Поддерживаемые точные числовые типы — int, bigint, smallint, numericsmallmoneytinyintdecimalи .money Поддерживаемые приближённые числовые типы — это float и real.
Предложение OVER
Partition_by_clause делит результирующий набор, созданный FROM предложением, на секции, и функция применяется к каждой секции.
Если не указать partition_by_clause, функция рассматривает все строки набора результатов запроса как одну порцию.
Оговорка OVER не поддерживает ORDER BY, ROWS, или RANGE для APPROX_QUANTILE.
Дополнительные сведения см. в предложении SELECT - OVER (Transact-SQL).
Типы возвращаемых данных
Возвращает float(53).
Замечания
APPROX_QUANTILE оценивает непрерывный квантиль по упорядочённым невходнымNULL значениям. Используйте QUANTILE , когда вам нужен точный результат.
Приблизительные результаты могут немного отличаться от точных QUANTILE и различаться между выполнениями из-за планов исполнения и параллельных путей слияния. Функция APPROX_QUANTILE не детерминирована. Дополнительные сведения см. в разделе детерминированные и недетерминированные функции.
NULL значения игнорируются. Если все входные значения равны NULL, или если ни одна строка не подходит, APPROX_QUANTILE возвращает NULL. Когда ANSI_WARNINGS , ONустранение NULL значений даёт стандартное агрегированное предупреждение.
APPROX_QUANTILE предназначен для снижения задержки и использования памяти по сравнению с точными QUANTILE вычислениями на больших наборах данных.
DISTINCT не поддерживается. Выражения персонажей, даты, времени и времени не поддерживаются.
Функция APPROX_QUANTILE доступна в Fabric Data Warehouse и в конечной точке аналитики SQL Fabric элементов. Эта APPROX_QUANTILE функция не поддерживается в SQL Server, База данных SQL Azure, Управляемый экземпляр SQL Azure или SQL Database in Fabric.
Сценарий использования
Используйте APPROX_QUANTILE для крупномасштабных дашбордов, исследовательского анализа и групповой отчетности, когда достаточно точной оценки. Например, оценочные суммы претензий по p90, задержка сервиса p95 или значения телеметрии p99 без затрат на точное квантильное расчёт.
Examples
A. Вычислить агрегатные приближённые квантильи
В этом примере оцениваются первый квартиль, медиана, третий квартиль и 95-й процентиль.
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. Вычислим приблизительный квантиль для каждой группы
В этом примере оценивается 90-й процентильный размер страхового случая для каждого страхового плана.
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. Возврат NULL для группы полностью NULL
Этот пример возвращается NULL , потому что все квалифицирующие значения равны 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. Вычислите приближённый квантиль с разбитым окном
В этом примере к каждой строке запроса добавляется приблизительная задержка в 95-й процентиль для каждого сервиса.
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;