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 RECURSIVE—0A000 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
| Form | SQLSTATE |
|---|---|
UNION / INTERSECT / EXCEPT | 0A000 |
Window functions (OVER (...)) | 0A000 |
ORDER BY ... NULLS FIRST|LAST | 0A000 |
WITH RECURSIVE | 0A000 |
| Data-modifying CTEs | 0A000 |
AngaraStat surfaces
AngaraBase предоставляет встроенные статистические представления.
sys.table_stats
| Column | Description |
|---|---|
stats_level_max | Max collection level configured |
last_committed_rowid | Last committed row ID |
last_insert_epoch | Epoch of last insert |
last_mutation_epoch | Epoch of last mutation |
sys.column_stats
| Column | Description |
|---|---|
ndv_approx | Approximate number of distinct values (HLL) |
col_min | Column minimum (typed Value) |
col_max | Column maximum (typed Value) |
null_count | Number of NULLs |
stats_epoch | Stats collection epoch |
hll_enabled | Whether HLL tracking is active |
histogram_bounds | Equi-depth histogram boundaries (Level 2) |
mcv_values | Most common values (Level 2) |
mcv_frequencies | MCV frequencies (Level 2) |
reservoir_size | Reservoir sample size (Level 2) |
reservoir_epoch | Reservoir epoch (Level 2) |
reservoir_drift_count | Drift 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 RECURSIVE | 0A000 |
| Data-modifying CTE | 0A000 |
UNION / INTERSECT / EXCEPT | 0A000 |
| Window functions | 0A000 |
ORDER BY ... NULLS FIRST|LAST | 0A000 |
ORDER BY ordinal out of range | 42P10 |
| Expression type error | 42883 |
Links
- DML operations: dml.md
- DDL (stats options): ddl.md
- SQL compatibility overview: overview.md
- Known issues: Known issues