Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Queries

Goal

Справочник поддерживаемых форм запросов: CTE, JOIN, агрегация, сортировка, статистические поверхности.

Non-recursive WITH (CTE)

AngaraBase поддерживает ограниченные (non-recursive) CTE как derived source в FROM:

WITH recent AS (
 SELECT id, v FROM t WHERE v > 100
)
SELECT r.id, r.v
FROM recent r
ORDER BY r.id;

Supported CTE projection forms

WITH c AS (SELECT id, v FROM t)
SELECT * FROM c WHERE id < 10;

Explicitly unsupported

  • WITH RECURSIVE0A000 feature_not_supported
  • Data-modifying CTEs (WITH ... INSERT/UPDATE/DELETE) — 0A000 feature_not_supported

JOINs

SELECT a.id, b.name
FROM orders a
INNER JOIN customers b ON a.customer_id = b.id;

SELECT a.id, b.name
FROM orders a
LEFT JOIN customers b ON a.customer_id = b.id;

Поддерживаются: INNER JOIN, LEFT JOIN.

ORDER BY

SELECT * FROM t ORDER BY v;
SELECT * FROM t ORDER BY v ASC;
SELECT * FROM t ORDER BY v DESC;

ORDER BY <expr> поддерживает ограниченные скалярные выражения, уже поддерживаемые движком.

Поддержка псевдонимов (Aliases)

ORDER BY может ссылаться на псевдонимы (алиасы), определённые в SELECT-списке с помощью ключевого слова AS. Это работает как для обычных колонок, так и для результатов агрегации:

-- Алиас для выражения
SELECT x * 2 AS doubled FROM t ORDER BY doubled;

-- Алиас для агрегации
SELECT grp, sum(amount) AS total 
FROM t 
GROUP BY grp 
ORDER BY total DESC;

Порядковые номера колонок (Ordinals)

Поддерживается сортировка по порядковому номеру колонки в SELECT-списке (1-based), согласно стандарту SQL:2011:

-- Сортировка по первой колонке (a)
SELECT a, b FROM t ORDER BY 1;

-- Сортировка по второй колонке (b) в обратном порядке
SELECT a, b FROM t ORDER BY 2 DESC;

Если указанный номер выходит за пределы количества колонок в запросе (или равен 0), возвращается ошибка 42P10 (invalid_column_reference).

NULL ordering

  • В ASC порядке NULL трактуется как наибольшее значение (выводится последним).
  • В DESC порядке NULL выводится первым.
  • Явное NULLS FIRST / NULLS LAST не поддерживается0A000.

GROUP BY / HAVING

SELECT v, COUNT(*) AS cnt
FROM t
GROUP BY v
HAVING COUNT(*) > 1;

LIMIT / OFFSET

SELECT * FROM t ORDER BY id LIMIT 10;
SELECT * FROM t ORDER BY id LIMIT 10 OFFSET 20;

Ошибки в выражениях (Expression Errors)

При использовании несовместимых типов в арифметических выражениях (например, попытка сложения строки с числом 'строка' + 1), AngaraBase возвращает ошибку 42883 (undefined_function / operator not found).

Примечание: строковые литералы, содержащие числа (например, '123'), могут автоматически приводиться к числовому типу в зависимости от контекста.

Unsupported query forms

FormSQLSTATE
UNION / INTERSECT / EXCEPT0A000
Window functions (OVER (...))0A000
ORDER BY ... NULLS FIRST|LAST0A000
WITH RECURSIVE0A000
Data-modifying CTEs0A000

AngaraStat surfaces

AngaraBase предоставляет встроенные статистические представления.

sys.table_stats

ColumnDescription
stats_level_maxMax collection level configured
last_committed_rowidLast committed row ID
last_insert_epochEpoch of last insert
last_mutation_epochEpoch of last mutation

sys.column_stats

ColumnDescription
ndv_approxApproximate number of distinct values (HLL)
col_minColumn minimum (typed Value)
col_maxColumn maximum (typed Value)
null_countNumber of NULLs
stats_epochStats collection epoch
hll_enabledWhether HLL tracking is active
histogram_boundsEqui-depth histogram boundaries (Level 2)
mcv_valuesMost common values (Level 2)
mcv_frequenciesMCV frequencies (Level 2)
reservoir_sizeReservoir sample size (Level 2)
reservoir_epochReservoir epoch (Level 2)
reservoir_drift_countDrift count since last reservoir refresh (Level 2)
SELECT * FROM sys.table_stats WHERE table_name = 'events';
SELECT * FROM sys.column_stats WHERE table_name = 'events' AND column_name = 'ts';

Expected SQLSTATE

СитуацияSQLSTATE
WITH RECURSIVE0A000
Data-modifying CTE0A000
UNION / INTERSECT / EXCEPT0A000
Window functions0A000
ORDER BY ... NULLS FIRST|LAST0A000
ORDER BY ordinal out of range42P10
Expression type error42883