Справочник по SQL¶
Содержание
Инструкция SELECT¶
Инструкция SELECT сканирует данные из таблиц и возвращают 0 или более строк.
Имена столбцов в запросах следует писать только строчными буквами.
Синтаксис:
[WITH with_query [, …] ]
SELECT [ ALL | DISTINCT ] expression [, …]
[FROM from_item [, …] ]
[JOIN join_item [, …] ]
[WHERE condition ]
[GROUP BY grouping_element [, …] ]
[HAVING condition]
[FILTER (WHERE condition) ]
[UNION [ ALL | select ]
[ORDER BY expression [ ASC | DESC ][, …] ]
[LIMIT count ]
[CASE [expression] WHEN conditions [ELSE expression] END]
Оператор WITH¶
Оператор WITH позволяет именовать запросы и в дальнейшем ссылаться на них по имени.
WITH x AS (SELECT a, MAX(b) AS b FROM t GROUP BY a)
SELECT a, b FROM x;
Оператор SELECT¶
Пример:
SELECT a, b, a + b FROM table
В запрос можно добавлять квантификатор DISTINCT, чтобы возвращались только не совпадающие строки.
По умолчанию используется квантификатор ALL, который возвращает все строки.
SELECT DISTINCT person, age FROM employees
Оператор JOIN¶
Поддерживаются INNER JOIN, LEFT OUTER JOIN, RIGHT OUTER JOIN,
FULL OUTER JOIN, NATURAL JOIN, CROSS JOIN.
Дальнейшие примеры основаны на этой таблице:
select * from x;
+----------+----------+
| column_1 | column_2 |
+----------+----------+
| 1 | 2 |
+----------+----------+
INNER JOIN (простое соединение)¶
С помощью ключевых слов JOIN или INNER JOIN задается соединение, в которое входят только те строки, которые присутствуют в обеих таблицах.
select * from x inner join y ON x.column_1 = y.column_1;
+----------+----------+----------+----------+
| column_1 | column_2 | column_1 | column_2 |
+----------+----------+----------+----------+
| 1 | 2 | 1 | 2 |
+----------+----------+----------+----------+
LEFT OUTER JOIN¶
С помощью ключевых слов LEFT JOIN или LEFT OUTER JOIN задается соединение, в которое входят все строки из левой таблицы, даже если для них нет таких же строк в правой таблице.
Для строк, у которых нет совпадений в правой таблице, проставляются значения null в правой части итоговой таблицы.
select * from x left join y ON x.column_1 = y.column_2;
+----------+----------+----------+----------+
| column_1 | column_2 | column_1 | column_2 |
+----------+----------+----------+----------+
| 1 | 2 | | |
+----------+----------+----------+----------+
RIGHT OUTER JOIN¶
С помощью ключевых слов RIGHT JOIN или RIGHT OUTER JOIN задается соединение, в которое входят все строки из правой таблицы, даже если для них нет таких же строк в левой таблице.
Для строк, у которых нет совпадений в левой таблице, проставляются значения null в левой части итоговой таблицы.
select * from x right join y ON x.column_1 = y.column_2;
+----------+----------+----------+----------+
| column_1 | column_2 | column_1 | column_2 |
+----------+----------+----------+----------+
| | | 1 | 2 |
+----------+----------+----------+----------+
FULL OUTER JOIN¶
С помощью ключевых слов FULL JOIN или FULL OUTER JOIN задается соединение, в которое входят сразу все результаты LEFT OUTER JOIN и RIGHT OUTER JOIN.
В него попадают все строки из этих двух соединений, а для строк, у которых нет нет совпадений в другой таблице, проставляются значения null в соответствующей части итоговой таблицы.
select * from x full outer join y ON x.column_1 = y.column_2;
+----------+----------+----------+----------+
| column_1 | column_2 | column_1 | column_2 |
+----------+----------+----------+----------+
| 1 | 2 | | |
| | | 1 | 2 |
+----------+----------+----------+----------+
NATURAL JOIN (неявное соединение)¶
Оператор NATURAL JOIN позволяет объединить таблицы по принципу INNER JOIN, но здесь объединение выполняется на основании общего столбца (или столбцов) этих таблиц.
Если у таблиц нет общего столбца (с одинаковым именем), то результат получается аналогичен CROSS JOIN.
select * from x natural join y;
+----------+----------+
| column_1 | column_2 |
+----------+----------+
| 1 | 2 |
+----------+----------+
CROSS JOIN¶
Оператор CROSS JOIN позволяет получить декартово произведение нескольких таблиц. В результате создается набор, включающий все возможные комбинации строк в таблицах.
Декартово произведение в данном случае – это результат соединения строки из первой таблицы с каждой строкой из второй таблицы.
select * from x cross join y;
+----------+----------+----------+----------+
| column_1 | column_2 | column_1 | column_2 |
+----------+----------+----------+----------+
| 1 | 2 | 1 | 2 |
+----------+----------+----------+----------+
CROSS JOIN особенно полезен, когда между таблицами нет определенной связи, и вам нужно создать полную комбинацию записей из каждой таблицы.
Оператор GROUP BY¶
Оператор GROUP BY используется в SELECT-запросах для сбора данных по нескольким записям и группировки результатов по одному или нескольким столбцам.
Пример:
SELECT a, b, MAX(c) FROM table GROUP BY a, b
Некоторые агрегатные функции могут принимать на вход необязательные условия упорядочения, например ARRAY_AGG. Если такое условие задано, то результат агрегации рассчитывается в порядке, заданном этим условием.
Пример:
SELECT a, b, ARRAY_AGG(c ORDER BY d) FROM table GROUP BY a, b
Оператор HAVING¶
Оператор HAVING используется в сочетании с оператором GROUP BY, чтобы в результат попали только те строки, для которых выполняется некое условие.
Пример:
SELECT a, b, MAX(c) FROM table GROUP BY a, b HAVING MAX(c) > 10
Модификатор FILTER¶
Модификатор FILTER используется после агрегатной функции, например SUM, AVG, COUNT, ARRAY_AGG, LIST_AGG и т.д. В результат агрегации попадают только те строки, которые удовлетворяют условию WHERE.
Для колонок, не участвующих в агрегации, используется оператор GROUP BY.
Пример:
SELECT a, b, COUNT(c) FILTER(WHERE c > 10) AS `over 10` FROM table GROUP BY a, b
Примечание
В текущей версии TCS модификатор FILTER не позволяет использовать параметризацию.
Оператор UNION¶
Оператор UNION используется для объединения результирующих наборов из 2 или более операторов SELECT. Он удаляет повторяющиеся строки между различными операторами SELECT.
Каждый оператор SELECT в операторе UNION должен иметь одинаковое количество полей в наборах результатов с одинаковыми типами данных.
Пример:
SELECT
a,
b,
c
FROM table1
UNION ALL
SELECT
a,
b,
c
FROM table2
Оператор ORDER BY¶
Оператор ORDER BY позволяет упорядочить результат в соответствии с заданным условием.
По умолчанию упорядочивание осуществляется в порядке убывания (ASC). Также можно задать упорядочивание в порядке возрастания, указав DESC в конце запроса с ORDER BY.
Примеры:
SELECT age, person FROM table ORDER BY age;
SELECT age, person FROM table ORDER BY age DESC;
SELECT age, person FROM table ORDER BY age, person DESC;
Оператор LIMIT¶
Оператор LIMIT используется для ограничения количества возвращаемых записей на основе предельного значения.
Ограничение задается неотрицательным целым числом.
Пример:
SELECT age, person FROM table LIMIT 10
Оператор CASE¶
Оператор CASE используется для проверки ряда условий. Он работает аналогично выражению if-then-else:
как только одно из условий оказывается выполнено, дальнейшее чтение данных и проверки прекращаются и возвращается результат, указанный для этого условия;
если ни одно из условий не выполнено, то возвращается значение предложения ELSE;
если не выполнено ни одно условие и в запросе не предусмотрено предложение ELSE, то возвращается NULL.
Синтаксис:
CASE [ expression ]
WHEN condition_1 THEN result_1
WHEN condition_2 THEN result_2
...
WHEN condition_n THEN result_n
ELSE result
END
где:
expression(необязательно) - значение, которое сравнивается с условиями.condition_1 .. condition_n- проверяемые условия. Все условия должны быть одного типа данных. Условия проверяются по порядку, одно за другим.result_1 .. result_n- результаты, один из которых возвращаются, если соответствующее условие оказывается выполнено. Все результаты должны быть одного типа данных.
Пример:
SELECT person, city, country
FROM table
ORDER BY
(CASE
WHEN city IS NULL THEN country
ELSE city
END);
В этом запросе мы упорядочиваем список людей по названию города. Если же город для какого-то человека не указан, то упорядочивание ведется по названию страны.
Примечание
В текущей версии TCS оператор CASE не позволяет использовать параметризацию.
Например, такое выражение сейчас не поддерживается:
PREPARE PREP1(STRING) AS
SELECT person, city, country
FROM table
ORDER BY
(CASE
WHEN city IS NULL THEN $1
ELSE city
END);
Подзапросы¶
Поддерживаются подзапросы с предикатами EXISTS, NOT EXISTS, IN, NOT IN,
а также скалярные подзапросы.
Дальнейшие примеры основаны на этой таблице:
select * from x;
+----------+----------+
| column_1 | column_2 |
+----------+----------+
| 1 | 2 |
+----------+----------+
Предикат EXISTS¶
EXISTS используется для того, чтобы вернуть все строки, для которых коррелированный подзапрос находит одно и более совпадений.
Поддерживаются только коррелированные подзапросы.
select * from y where exists (select * from x where x.column_1 = y.column_1);
+----------+----------+
| column_1 | column_2 |
+----------+----------+
| 1 | 2 |
+----------+----------+
1 row in set.
Предикат NOT EXISTS¶
NOT EXISTS используется для того, чтобы вернуть все строки, для которых коррелированный подзапрос не находит ни одного совпадения.
Поддерживаются только коррелированные подзапросы.
select * from y where not exists (select * from x where x.column_1 = y.column_1);
0 rows in set.
Предикат IN¶
IN используется для того, чтобы вернуть все строки, для которых в результатах коррелированного подзапроса нашлось значение некоторого выражения.
select * from x where column_1 in (select column_1 from y);
+----------+----------+
| column_1 | column_2 |
+----------+----------+
| 1 | 2 |
+----------+----------+
1 row in set.
Предикат NOT IN¶
NOT IN используется для того, чтобы вернуть все строки, для которых в результатах коррелированного подзапроса не нашлось значение некоторого выражения.
select * from x where column_1 not in (select column_1 from y);
0 rows in set.
Скалярные подзапросы¶
С помощью скалярного подзапроса можно получить некое значение, которое можно далее использовать в запросе много раз в разных контекстах.
Поддерживаются только коррелированные подзапросы.
Далее приводится пример с фильтром, в котором используется скалярный подзапрос.
select * from x y where column_1 < (select sum(column_2) from x where x.column_1 = y.column_1);
+----------+----------+
| column_1 | column_2 |
+----------+----------+
| 1 | 2 |
+----------+----------+
1 row in set.
Команды DDL¶
Примечание
DDL-команды CREATE TABLE и DROP TABLE срабатывают только при отправке запроса на экземпляр Scheduler по HTTP-адресу {{scheduler-uri}}/ddl.
CREATE TABLE¶
Команда CREATE TABLE создает таблицу с указанным именем на основе заданного списка полей (column_def).
Имена столбцов следует задавать только строчными буквами.
В теле запроса можно указать параметр ENGINE, его значение определит целевой буфер записи данных:
memcs- колоночный буфер записи;memtx- строчный буфер записи.
Синтаксис:
CREATE TABLE [IF NOT EXISTS] table_name ([
{ column_def },
[, ...]
])
ENGINE=memcs;
где:
column_def = column_name data_type [CAPACITY x]
CAPACITY выставляет для колонки значение атрибута column_values_limit.
Если таблица существует и указан флаг IF NOT EXISTS, но при этом column_def отличается
от существующего, то существующая таблица не меняется и возвращается HTTP-ответ 200 OK
с текстом EXIST.
CREATE TABLE t(a i32, b utf8)
CREATE TABLE IF NOT EXISTS t(
a i32 CAPACITY 10000,
b utf8,
c u64,
d bool
)
В данном примере сначала создается таблица t с полями a i32, b utf8.
Затем, после запроса с IF EXISTS, возвращается HTTP-ответ 200 OK с текстом EXIST,
а таблица t не меняется.
Если для таблицы в качестве типа данных необходимо указать десятичное число с фиксированной точкой, то этот тип можно указать как с использованием псевдонима, так и с явным указанием точности:
decimal128(scale)эквивалентноdecimal(38, scale).decimal256(scale)эквивалентноdecimal(76, scale).
Например, инструкция:
CREATE TABLE table1 (
a decimal128(2),
b decimal256(38)
);
Приведет к созданию такой же таблицы, как и:
CREATE TABLE table1 (
a decimal(3, 2),
b decimal(39, 38)
);
DROP TABLE¶
Команда DROP TABLE удаляет таблицу с указанным именем.
Синтаксис:
DROP TABLE [IF EXISTS] table_name
Команды DML¶
COPY¶
Копирует содержимое таблицы или запроса в файл(ы).
Синтаксис:
COPY { 'table_name' | (query) }
TO 'file_name'
[ STORED AS format ]
[ PARTITIONED BY (column_name [, ...]) ]
[ OPTIONS( option [, ... ] ) ]
STORED AS задает формат файла, который будет записан командой COPY.
Поддерживаемые форматы файлов: parquet, csv, json и arrow.
Если это условие не задано, то формат выводится по возможности из расширения файла
(например, res.parquet подразумевает формат parquet).
PARTITIONED BY задает столбцы, которые будут использоваться для разбиения
выходных файлов на отдельные каталоги. По умолчанию столбцы,
используемые в PARTITIONED BY, будут удалены из выходного формата.
Если нужно сохранить столбцы, то следует указать параметр записи
execution.keep_partition_by_columns = true.
OPTIONS задает параметры записи.
Примеры:
копирование из таблицы:
COPY 'attributes' TO 'res' STORED AS json PARTITIONED BY (x);
копирование из запроса:
COPY (SELECT x FROM attributes) TO 'res' STORED AS json;
TRUNCATE TABLE¶
Примечание
DDL-команда TRUNCATE TABLE в рамках TCS отнесена к DML-командам.
Команда TRUNCATE TABLE удаляет все данные из указанной таблицы, но оставляет саму структуру таблицы (ее индексы, столбцы и схемы) нетронутой.
Cинтаксис:
TRUNCATE TABLE table_name
Важно принимать во внимание следующие особенности выполнения команды TRUNCATE TABLE:
На мастер-экземпляре Storage команда удалит данные указанной таблицы только в рамках текущего набора реплик;
На экземпляре Scheduler c поддержкой шардинга команда приведет к исполнению команды TRUNCATE на всех мастер-экземплярах Storage в кластере;
На экземпляре Scheduler без поддержки шардинга команда может выполняться только на экземплярах, настроенных на чтение-запись. Для обеспечения этого условия необходимо добавить параметр
x-tcs-route: rwв заголовок запроса. Без этого параметра запрос может быть отправлен на экземпляр, настроенный только на чтение. При попытке выполнения команды TRUNCATE на экземпляре, настроенном только на чтение, система вернет ошибку.
Инструкция EXPLAIN¶
Команда EXPLAIN показывает логический и физический план выполнения указанного
оператора SQL.
Поддерживается следующий синтаксис запросов:
EXPLAIN [ANALYZE] [VERBOSE] statement
Пример:
EXPLAIN SELECT SUM(x) FROM table GROUP BY b;
EXPLAIN¶
Отображает план выполнения указанного SQL-выражения.
Если нужно получить больше подробностей, используйте EXPLAIN VERBOSE.
EXPLAIN SELECT SUM(x) FROM table GROUP BY b;
+---------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------+
| plan_type | plan |
+---------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------+
| logical_plan | Projection: #SUM(table.x) |
| | Aggregate: groupBy=[[#table.b]], aggr=[[SUM(#table.x)]] |
| | TableScan: table projection=[x, b] |
| physical_plan | ProjectionExec: expr=[SUM(table.x)@1 as SUM(table.x)] |
| | AggregateExec: mode=FinalPartitioned, gby=[b@0 as b], aggr=[SUM(table.x)] |
| | CoalesceBatchesExec: target_batch_size=4096 |
| | RepartitionExec: partitioning=Hash([Column { name: "b", index: 0 }], 16) |
| | AggregateExec: mode=Partial, gby=[b@1 as b], aggr=[SUM(table.x)] |
| | RepartitionExec: partitioning=RoundRobinBatch(16) |
| | CsvExec: file_groups={1 group: [[/tmp/table.csv]]}, projection=[x, b], has_header=false |
| | |
+---------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------+
EXPLAIN ANALYZE¶
Отображает план выполнения указанного SQL-выражения, а также метрики.
Если нужно получить больше подробностей, используйте EXPLAIN ANALYZE VERBOSE.
EXPLAIN ANALYZE SELECT SUM(x) FROM table GROUP BY b;
+-------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| plan_type | plan |
+-------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Plan with Metrics | GlobalLimitExec: skip=0, fetch=5000, metrics=[output_rows=1, elapsed_compute=28ns] |
| | LocalLimitExec: fetch=5000, metrics=[output_rows=1, elapsed_compute=156ns] |
| | AggregateExec: mode=Final, gby=[], aggr=[MAX(attributes.Attribute1), MAX(attributes.Attribute2)], metrics=[output_rows=1, elapsed_compute=385.384µs] |
| | CoalescePartitionsExec, metrics=[output_rows=2, elapsed_compute=2.757µs] |
| | AggregateExec: mode=Partial, gby=[], aggr=[MAX(attributes.Attribute1), MAX(attributes.Attribute2)], metrics=[output_rows=2, elapsed_compute=915.989µs] |
| | ProjectionExec: expr=[Attribute1@1 as Attribute1, Attribute2@2 as Attribute2], metrics=[output_rows=1199, elapsed_compute=58.884µs] |
| | CoalesceBatchesExec: target_batch_size=8192, metrics=[output_rows=1199, elapsed_compute=7.723086ms] |
| | FilterExec: IndexAttributeInt0@0 = 55, metrics=[output_rows=1199, elapsed_compute=2.430824ms] |
| | UnionExec, metrics=[output_rows=1199, elapsed_compute=5.251683ms] |
| | TarantoolExec: fields=[IndexAttributeInt0, Attribute1, Attribute2], fields_count=2, arrow_select=true, |
| | index_seek=[column=tcs.public.attributes.IndexAttributeInt0, value=55] inexact_filters=IndexAttributeInt0 = Int32(55), |
| | metrics=[output_rows=0, elapsed_compute=287ns, input_batches=0, record_batch_counter=0, errors=0, max_index_size=0, max_empty_chunks=0] |
| | BufExec: fields=[IndexAttributeInt0, Attribute1, Attribute2], fields_count=2 |
| | index_seek=[column=tcs.public.attributes.IndexAttributeInt0, value=55], |
| | metrics=[output_rows=1199, elapsed_compute=46.022µs, input_batches=0, record_batch_counter=15, errors=0, max_index_size=0, max_empty_chunks=0] |
+-------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
Последовательности¶
Оператор CREATE SEQUENCE¶
Оператор для создания генератора последовательностей.
Поддерживаются только последовательности целочисленных значений i64.
Синтаксис:
CREATE SEQUENCE [ IF NOT EXISTS ] имя
[ INCREMENT [ BY ] шаг ]
[ MINVALUE мин_значение | NO MINVALUE ]
[ MAXVALUE макс_значение | NO MAXVALUE ]
[ START [ WITH ] начало ]
[ CACHE кеш ]
[ [ NO ] CYCLE ]
Параметры:
IF NOT EXISTS – не считать ошибкой, если последовательность с таким именем уже существует.
имя (обязательный) – имя создаваемой последовательности.
шаг – шаг последовательности. Это число, которое будет добавляться к текущему значению последовательности для получения нового значения. С положительным шагом последовательность будет возрастающей, а с отрицательным — убывающей. Значение по умолчанию: 1.
мин_значение – наименьшее число, которое будет генерировать последовательность. Если параметр не указан, либо указано NO MINVALUE, то используется значение по умолчанию: 1 для возрастающей последовательности, либо минимальное значение типа данных – для убывающей.
макс_значение – наибольшее число, которое будет генерировать последовательность. Если параметр не указан, либо указано NO MAXVALUE, то используется значение по умолчанию: максимальное значение типа данных для возрастающей последовательности, либо -1 – для убывающей.
начало – начальное значение последовательности. Позволяет запустить последовательность с любого значения. По умолчанию началом считается мин_значение для возрастающих последовательностей и макс_значение для убывающих.
кеш – определяет, сколько чисел последовательности будет выделяться и сохраняться в памяти для ускорения доступа к ним.
Примечание
Параметр
cacheможно задавать, но в текущей версии TCS он ни на что не влияет.CYCLE – позволяет зациклить последовательность при достижении макс_значение или мин_значение для возрастающей или убывающей последовательности, соответственно. Когда этот предел достигается, следующим числом этих последовательностей будет соответственно мин_значение или макс_значение.
Если указывается NO CYCLE, то при каждом вызове
nextval()после достижения предельного значения будет возникать ошибка. Если CYCLE или NO CYCLE не указаны, то по умолчанию предполагается NO CYCLE.
Важно
Все параметры оператора CREATE SEQUENCE необходимо указывать в описанном выше порядке.
Обращаться к созданной последовательности можно из запросов на чтение, вставку и обновление данных.
Пример:
CREATE SEQUENCE IF NOT EXISTS my_seq INCREMENT BY 5 MINVALUE 15 MAXVALUE 2000 START WITH 20 CACHE 5 CYCLE
Оператор DROP SEQUENCE¶
Оператор для удаления генератора последовательностей.
Синтаксис:
DROP SEQUENCE [IF EXISTS] name
Параметры:
IF EXISTS – не считать ошибкой, если последовательность не существует.
name (обязательный) - имя удаляемой последовательности.
Функция nextval()¶
Продвигает последовательность к следующему значению и возвращает его.
nextval('name')
Аргументы:
name(обязательный) – имя последовательности.
Операторы¶
Числовые операторы¶
+(plus)-(minus)*(multiply)/(divide)%(modulo)
Оператор +¶
Сложение:
> SELECT 1 + 2;
+---------------------+
| Int64(1) + Int64(2) |
+---------------------+
| 3 |
+---------------------+
Оператор -¶
Вычитание:
> SELECT 4 - 3;
+---------------------+
| Int64(4) - Int64(3) |
+---------------------+
| 1 |
+---------------------+
Оператор *¶
Умножение:
> SELECT 2 * 3;
+---------------------+
| Int64(2) * Int64(3) |
+---------------------+
| 6 |
+---------------------+
Оператор /¶
Деление (результат деления целых чисел округляется в сторону нуля):
> SELECT 8 / 4;
+---------------------+
| Int64(8) / Int64(4) |
+---------------------+
| 2 |
+---------------------+
Оператор %¶
Значение по модулю (остаток):
> SELECT 7 % 3;
+---------------------+
| Int64(7) % Int64(3) |
+---------------------+
| 1 |
+---------------------+
Операторы сравнения¶
=(равно)!=(не равно)<(меньше чем)<=(меньше или равно)>(больше чем)>=(больше или равно)IS DISTINCT FROM(отличается от)IS NOT DISTINCT FROM(не отличается от)~(удовлетворяет условиям регулярного выражения, с учетом регистра)~*(удовлетворяет условиям регулярного выражения, без учета регистра)!~(не удовлетворяет условиям регулярного выражения, с учетом регистра)!~*(не удовлетворяет условиям регулярного выражения, без учета регистра)
Оператор =¶
Равно:
> SELECT 1 = 1;
+---------------------+
| Int64(1) = Int64(1) |
+---------------------+
| true |
+---------------------+
Оператор !=¶
Не равно:
> SELECT 1 != 2;
+----------------------+
| Int64(1) != Int64(2) |
+----------------------+
| true |
+----------------------+
Оператор <¶
Меньше чем:
> SELECT 3 < 4;
+---------------------+
| Int64(3) < Int64(4) |
+---------------------+
| true |
+---------------------+
Оператор <=¶
Меньше или равно:
> SELECT 3 <= 3;
+----------------------+
| Int64(3) <= Int64(3) |
+----------------------+
| true |
+----------------------+
Оператор >¶
Больше чем:
> SELECT 6 > 5;
+---------------------+
| Int64(6) > Int64(5) |
+---------------------+
| true |
+---------------------+
Оператор >=¶
Больше или равно:
> SELECT 5 >= 5;
+----------------------+
| Int64(5) >= Int64(5) |
+----------------------+
| true |
+----------------------+
Оператор IS DISTINCT FROM¶
Отличается от:
> SELECT 0 IS DISTINCT FROM NULL;
+--------------------------------+
| Int64(0) IS DISTINCT FROM NULL |
+--------------------------------+
| true |
+--------------------------------+
Гарантирует, что результатом сравнения является истина или ложь, а не пустое множество.
Оператор IS NOT DISTINCT FROM¶
Этот оператор является отрицанием оператора IS DISTINCT FROM
Не отличается от:
> SELECT NULL IS NOT DISTINCT FROM NULL;
+--------------------------------+
| NULL IS NOT DISTINCT FROM NULL |
+--------------------------------+
| true |
+--------------------------------+
Оператор ~¶
Удовлетворяет условиям регулярного выражения (с учетом регистра):
> SELECT 'tarantool' ~ '^tarantool(-cli)*';
+-------------------------------------------------+
| Utf8("tarantool") ~ Utf8("^tarantool(-cli)*") |
+-------------------------------------------------+
| true |
+-------------------------------------------------+
Оператор ~*¶
Удовлетворяет условиям регулярного выражения (без учета регистра):
> SELECT 'tarantool' ~* '^TARANTOOL(-cli)*';
+--------------------------------------------------+
| Utf8("tarantool") ~* Utf8("^TARANTOOL(-cli)*") |
+--------------------------------------------------+
| true |
+--------------------------------------------------+
Оператор !~¶
Не удовлетворяет условиям регулярного выражения (с учетом регистра):
> SELECT 'tarantool' !~ '^TARANTOOL(-cli)*';
+--------------------------------------------------+
| Utf8("tarantool") !~ Utf8("^TARANTOOL(-cli)*") |
+--------------------------------------------------+
| true |
+--------------------------------------------------+
Оператор !~*¶
Не удовлетворяет условиям регулярного выражения (без учета регистра):
> SELECT 'tarantool' !~* '^TARANTOOL(-cli)+';
+---------------------------------------------------+
| Utf8("tarantool") !~* Utf8("^TARANTOOL(-cli)+") |
+---------------------------------------------------+
| true |
+---------------------------------------------------+
Логические операторы¶
AND (логическое И)
OR (логическое ИЛИ)
Оператор AND¶
Логическое И:
> SELECT true AND true;
+---------------------------------+
| Boolean(true) AND Boolean(true) |
+---------------------------------+
| true |
+---------------------------------+
Оператор OR¶
Логическое ИЛИ:
> SELECT false OR true;
+---------------------------------+
| Boolean(false) OR Boolean(true) |
+---------------------------------+
| true |
+---------------------------------+
Побитовые операторы¶
&(побитовое И)|(побитовое ИЛИ)#(побитовое исключающее ИЛИ)>>(побитовый сдвиг вправо)<<(побитовый сдвиг влево)
Оператор &¶
Побитовое И:
> SELECT 5 & 3;
+---------------------+
| Int64(5) & Int64(3) |
+---------------------+
| 1 |
+---------------------+
Оператор |¶
Побитовое ИЛИ:
> SELECT 5 | 3;
+---------------------+
| Int64(5) | Int64(3) |
+---------------------+
| 7 |
+---------------------+
Оператор #¶
Побитовое исключающее ИЛИ:
> SELECT 5 # 3;
+---------------------+
| Int64(5) # Int64(3) |
+---------------------+
| 6 |
+---------------------+
Оператор >>¶
Побитовый сдвиг вправо:
> SELECT 5 >> 3;
+----------------------+
| Int64(5) >> Int64(3) |
+----------------------+
| 0 |
+----------------------+
Оператор <<¶
Побитовый сдвиг влево:
> SELECT 5 << 3;
+----------------------+
| Int64(5) << Int64(3) |
+----------------------+
| 40 |
+----------------------+
Прочие операторы¶
||(объединение строк)@>(массив содержит)<@(массив содержится в)
Оператор ||¶
Объединение строк:
> SELECT 'Hello, ' || 'Tarantool Column Store!';
+----------------------------------------------------+
| Utf8("Hello, ") || Utf8("Tarantool Column Store!") |
+----------------------------------------------------+
| Hello, Tarantool Column Store! |
+----------------------------------------------------+
Оператор @>¶
Массив содержит:
> SELECT make_array(1,2,3) @> make_array(1,3);
+-------------------------------------------------------------------------+
| make_array(Int64(1),Int64(2),Int64(3)) @> make_array(Int64(1),Int64(3)) |
+-------------------------------------------------------------------------+
| true |
+-------------------------------------------------------------------------+
Оператор <@¶
Массив содержится в:
> SELECT make_array(1,3) <@ make_array(1,2,3);
+-------------------------------------------------------------------------+
| make_array(Int64(1),Int64(3)) <@ make_array(Int64(1),Int64(2),Int64(3)) |
+-------------------------------------------------------------------------+
| true |
+-------------------------------------------------------------------------+
Агрегатные функции¶
Общие функции¶
array_agg
avg
bit_and
bit_or
bit_xor
bool_and
bool_or
count
first_value
grouping
last_value
max
mean
median
min
string add
sum
var
var_pop
var_population
var_samp
var_sample
Статистические функции¶
corr
covar
covar_pop
covar_samp
nth_value
regr_avgx
regr_avgy
regr_count
regr_intercept
regr_r2
regr_slope
regr_sxx
regr_syy
regr_sxy
stddev
stddev_pop
stddev_samp
Функции апроксимации¶
approx_distinct
approx_median
approx_percentile_cont
approx_percentile_cont_with_weight
Функция approx_distinct()¶
Возвращает приблизительное количество различных входных значений, рассчитанное с использованием алгоритма HyperLogLog.
approx_distinct(expression)
Аргументы:
expression: выражение для выполнения операции. Может быть константой, столбцом или функцией, а также любой комбинацией арифметических операторов.
approx_median()¶
Возвращает приблизительную медиану (50-й процентиль) входных значений.
approx_median(expression)
Аргументы:
expression: выражение для выполнения операции. Может быть константой, столбцом или функцией, а также любой комбинацией арифметических операторов.
approx_percentile_cont()¶
Возвращает приблизительный процентиль входных значений с использованием алгоритма t-digest.
approx_percentile_cont(expression, percentile, centroids)
Аргументы:
expression: выражение для работы. Может быть константой, столбцом или функцией, а также любой комбинацией арифметических операторов.percentile: процентиль для выполнения операции. Должно быть значение с плавающей запятой от 0 до 1 (включительно).centroids: количество центроидов, которые будут использоваться в алгоритме t-digest. По умолчанию — 100.
Если существует такое количество или меньше уникальных значений, вы можете ожидать точного результата. Большее количество центроидов приводит к более точному приближению, но требует больше памяти для вычислений.
SELECT
items, approx_percentile_cont( price, 0.99 ) AS "99th_percentile"
FROM products
GROUP BY item;
approx_percentile_cont_with_weight()¶
Возвращает взвешенный приблизительный процентиль входных значений с использованием алгоритма t-digest.
approx_percentile_cont_with_weight(expression, weight, percentile)
Аргументы:
expression: выражение для работы. Может быть константой, столбцом или функцией, а также любой комбинацией арифметических операторов.weight: выражение для использования в качестве веса. Может быть константой, столбцом или функцией, а также любой комбинацией арифметических операторов.percentile: процентиль для вычисления. Должно быть значение с плавающей запятой от 0 до 1 (включительно).
SELECT
item, approx_percentile_cont_with_weight( price, 0.99 ) AS "co_weighted_99th_percentile"
FROM products
GROUP BY item;
Функции проверки вхождения ip-адреса в подсеть¶
is_in_net()¶
Проверка на принадлежность ip-адресов к сети net.
is_in_net(net: string, column: uint32) → bool
Аргументы:
netзадается в виде ip-адреса с маскойa.b.c.d/y
Возвращаемое значение:
true/false в зависимости от принадлежности
Пример:
select * from attributes where is_in_net(’192.162.5.0/24’, “AttributeX”) = true;
Скалярные функции¶
Математические функции¶
abs
acos
acosh
asin
asinh
atan
atanh
atan2
cbrt
ceil
cos
cosh
degrees
exp
factorial
floor
gcd
isnan
iszero
lcm
ln
log
log10
log2
nanvl
pi
power
pow
radians
random
round
signum
sin
sinh
sqrt
tan
tanh
trunc
abs¶
Возвращает абсолютное значение (модуль) целого числа.
abs(numeric_expression)
Аргументы:
numeric_expression- числовое выражение. Можно задать константу, столбец, функцию, а также любую комбинацию арифметических операторов.
acos¶
Возвращает арккосинус или обратный косинус числа.
acos(numeric_expression)
Аргументы:
numeric_expression- числовое выражение. Можно задать константу, столбец, функцию, а также любую комбинацию арифметических операторов.
acosh¶
Возвращает гиперболический косинус площади или обратный гиперболический косинус числа.
acosh(numeric_expression)
Аргументы:
numeric_expression- числовое выражение. Можно задать константу, столбец, функцию, а также любую комбинацию арифметических операторов.
asin¶
Возвращает арксинус или обратный синус числа.
asin(numeric_expression)
Аргументы:
numeric_expression- числовое выражение. Можно задать константу, столбец, функцию, а также любую комбинацию арифметических операторов.
asinh¶
Возвращает гиперболический синус площади или обратный гиперболический синус числа.
asinh(numeric_expression)
Аргументы:
numeric_expression- числовое выражение. Можно задать константу, столбец, функцию, а также любую комбинацию арифметических операторов.
atan¶
Возвращает арктангенс или обратный тангенс числа.
atan(numeric_expression)
Аргументы:
numeric_expression- числовое выражение. Можно задать константу, столбец, функцию, а также любую комбинацию арифметических операторов.
atanh¶
Возвращает гиперболический тангенс площади или обратный гиперболический тангенс числа.
atanh(numeric_expression)
Аргументы:
numeric_expression- числовое выражение. Можно задать константу, столбец, функцию, а также любую комбинацию арифметических операторов.
atan2¶
Возвращает арктангенс или обратный тангенс частного expression_y / expression_x.
atan2(expression_y, expression_x)
Аргументы:
expression_x- первое числовое выражение (числитель дроби). Можно задать константу, столбец, функцию, а также любую комбинацию арифметических операторов.expression_y- второе числовое выражение (знаменатель дроби). Можно задать константу, столбец, функцию, а также любую комбинацию арифметических операторов.
cbrt¶
Возвращает кубический корень числа.
cbrt(numeric_expression)
Аргументы:
numeric_expression- числовое выражение. Можно задать константу, столбец, функцию, а также любую комбинацию арифметических операторов.
ceil¶
Возвращает ближайшее целое число, большее чем или равное заданному числу.
ceil(numeric_expression)
Аргументы:
numeric_expression- числовое выражение. Можно задать константу, столбец, функцию, а также любую комбинацию арифметических операторов.
cos¶
Возвращает косинус числа.
cos(numeric_expression)
Аргументы:
numeric_expression- числовое выражение. Можно задать константу, столбец, функцию, а также любую комбинацию арифметических операторов.
cosh¶
Возвращает гиперболический косинус числа.
cosh(numeric_expression)
Аргументы:
numeric_expression- числовое выражение. Можно задать константу, столбец, функцию, а также любую комбинацию арифметических операторов.
degrees¶
Переводит меру числа из радиан в градусы.
degrees(numeric_expression)
Аргументы:
numeric_expression- числовое выражение. Можно задать константу, столбец, функцию, а также любую комбинацию арифметических операторов.
exp¶
Возвращает экспоненту числа по основанию e.
exp(numeric_expression)
Аргументы:
numeric_expression- числовое выражение. Можно задать константу, столбец, функцию, а также любую комбинацию арифметических операторов.
factorial¶
Факториал. Возвращает 1, если значение меньше 2.
factorial(numeric_expression)
Аргументы:
numeric_expression- числовое выражение. Можно задать константу, столбец, функцию, а также любую комбинацию арифметических операторов.
floor¶
Возвращает ближайшее целое число, меньшее чем или равное заданному числу.
floor(numeric_expression)
Аргументы:
numeric_expression- числовое выражение. Можно задать константу, столбец, функцию, а также любую комбинацию арифметических операторов.
gcd¶
Возвращает наибольший больший делитель частного expression_x / expression_y.
Возвращает 0, если оба введенных аргумента равны NULL.
gcd(expression_x, expression_y)
Аргументы:
expression_x- первое числовое выражение (числитель дроби). Можно задать константу, столбец, функцию, а также любую комбинацию арифметических операторов.expression_y- второе числовое выражение (знаменатель дроби). Можно задать константу, столбец, функцию, а также любую комбинацию арифметических операторов.
isnan¶
Возвращает true (правда), если введенное число является +NaN или -NaN, иначе возвращает ложь (false).
isnan(numeric_expression)
Аргументы:
numeric_expression- числовое выражение. Можно задать константу, столбец, функцию, а также любую комбинацию арифметических операторов.
iszero¶
Возвращает true (правда), если введенное число равно +0.0 или -0.0, иначе возвращает ложь (false).
iszero(numeric_expression)
Аргументы:
numeric_expression- числовое выражение. Можно задать константу, столбец, функцию, а также любую комбинацию арифметических операторов.
lcm¶
Возвращает наименьший общий множитель частного expression_x / expression_y.
Возвращает 0, если какой-либо из введенных аргументов равен NULL.
lcm(expression_x, expression_y)
Аргументы:
expression_x- первое числовое выражение (числитель дроби). Можно задать константу, столбец, функцию, а также любую комбинацию арифметических операторов.expression_y- второе числовое выражение (знаменатель дроби). Можно задать константу, столбец, функцию, а также любую комбинацию арифметических операторов.
ln¶
Возвращает натуральный логарифм числа.
ln(numeric_expression)
Аргументы:
numeric_expression- числовое выражение. Можно задать константу, столбец, функцию, а также любую комбинацию арифметических операторов.
log¶
Возвращает логарифм числа по заданному основанию. В качестве основания берется либо явно заданное число, либо 10 в том случае, когда основание не задано.
log(base, numeric_expression)
log(numeric_expression)
Аргументы:
base- основание логарифма. Можно задать константу, столбец, функцию, а также любую комбинацию арифметических операторов.numeric_expression- числовое выражение. Можно задать константу, столбец, функцию, а также любую комбинацию арифметических операторов.
log10¶
Возвращает десятичный логарифм числа.
log10(numeric_expression)
Аргументы:
numeric_expression- числовое выражение. Можно задать константу, столбец, функцию, а также любую комбинацию арифметических операторов.
log2¶
Возвращает двоичный логарифм числа.
log2(numeric_expression)
Аргументы:
numeric_expression- числовое выражение. Можно задать константу, столбец, функцию, а также любую комбинацию арифметических операторов.
nanvl¶
Возвращает первый аргумент, если он не является NaN. В противном случае возвращает второй аргумент.
nanvl(expression_x, expression_y)
Аргументы:
expression_x- первое числовое выражение (числитель дроби). Можно задать константу, столбец, функцию, а также любую комбинацию арифметических операторов.expression_y- второе числовое выражение (знаменатель дроби). Можно задать константу, столбец, функцию, а также любую комбинацию арифметических операторов.
power¶
Возвращает число, возведенное в заданную степень.
power(base, exponent)
Аргументы:
base- основание для возведения в степень. Можно задать константу, столбец, функцию, а также любую комбинацию арифметических операторов.exponent- показатель степени. Можно задать константу, столбец, функцию, а также любую комбинацию арифметических операторов.
Алиасы: pow
pow¶
Алиас функции power.
radians¶
Переводит меру числа из градусов в радианы.
radians(numeric_expression)
Аргументы:
numeric_expression- числовое выражение. Можно задать константу, столбец, функцию, а также любую комбинацию арифметических операторов.
random¶
Возвращает случайное значение с плавающей точкой в диапазоне [0, 1). Случайное начальное значение (seed) уникально для каждой строки.
random()
round¶
Округляет число к ближайшему целому числу.
round(numeric_expression[, decimal_places])
Аргументы:
numeric_expression- числовое выражение. Можно задать константу, столбец, функцию, а также любую комбинацию арифметических операторов.decimal_places- необязательный аргумент. Означает количество десятичных разрядов в целевом числе, к которому производится округление. По умолчанию берется равным 0.
signum¶
Возвращает знак числа. Для отрицательных чисел возвращает -1. Для нуля и положительных чисел возвращает 1.
signum(numeric_expression)
Аргументы:
numeric_expression- числовое выражение. Можно задать константу, столбец, функцию, а также любую комбинацию арифметических операторов.
sin¶
Возвращает синус числа.
sin(numeric_expression)
Аргументы:
numeric_expression- числовое выражение. Можно задать константу, столбец, функцию, а также любую комбинацию арифметических операторов.
sinh¶
Возвращает гиперболический синус числа.
sinh(numeric_expression)
Аргументы:
numeric_expression- числовое выражение. Можно задать константу, столбец, функцию, а также любую комбинацию арифметических операторов.
sqrt¶
Возвращает квадратный корень числа.
sqrt(numeric_expression)
Аргументы:
numeric_expression- числовое выражение. Можно задать константу, столбец, функцию, а также любую комбинацию арифметических операторов.
tan¶
Возвращает тангенс числа.
tan(numeric_expression)
Аргументы:
numeric_expression- числовое выражение. Можно задать константу, столбец, функцию, а также любую комбинацию арифметических операторов.
tanh¶
Возвращает гиперболический тангенс числа.
tanh(numeric_expression)
Аргументы:
numeric_expression- числовое выражение. Можно задать константу, столбец, функцию, а также любую комбинацию арифметических операторов.
trunc¶
Усекает число до целого числа или до указанных десятичных разрядов.
trunc(numeric_expression[, decimal_places])
Аргументы:
numeric_expression- числовое выражение. Можно задать константу, столбец, функцию, а также любую комбинацию арифметических операторов.decimal_places- необязательный аргумент. Количество десятичных разрядов для усечения. По умолчанию берется 0 (усечение до целого числа). Если указано положительное целое число, усекает цифры справа от десятичной точки. Если указано отрицательное число, то заменяет цифры слева от десятичной точки на 0.
Условные функции¶
coalesce
nullif
nvl
nvl2
ifnull
coalesce¶
Возвращает первый из аргументов, который не равен NULL.
Возвращает NULL, если все аргументы равны NULL.
Эту функцию часто используют вместо значения по умолчанию для нулевых значений.
coalesce(expression1[, ..., expression_n])
Аргументы:
expression_1,expression_n- выражение, которое используется, если предыдущие выражения равны NULL. Можно задать константу, столбец, функцию, а также любую комбинацию арифметических операторов. Можно передавать столько аргументов, сколько требуется.
nullif¶
Возвращает NULL, если expression1 равен expression2. В противном случае
возвращает expression1. Может использоваться для выполнения задачи, обратной
coalesce.
nullif(expression1, expression2)
Аргументы:
expression1- числовое выражение, которое нужно сравнить сexpression2и вернуть, если они равны. Можно задать константу, столбец, функцию, а также любую комбинацию арифметических операторов.expression2- числовое выражение, которое нужно сравнить сexpression1. Можно задать константу, столбец, функцию, а также любую комбинацию арифметических операторов.
nvl¶
Возвращает expression2, если expression1 равно NULL. В противном случае
возвращает expression1.
nvl(expression1, expression2)
Аргументы:
expression1- числовое выражение, которое нужно вернуть, если оно не равно NULL. Можно задать константу, столбец, функцию, а также любую комбинацию арифметических операторов.expression2- числовое выражение, которое нужно вернуть, еслиexpression1равно NULL. Можно задать константу, столбец, функцию, а также любую комбинацию арифметических операторов.
nvl2¶
Возвращает expression2, если expression1 не равно NULL. В противном случае
возвращает expression3.
nvl2(expression1, expression2, expression3)
Аргументы:
expression1- условное выражение. Можно задать константу, столбец, функцию, а также любую комбинацию арифметических операторов.expression2- числовое выражение, которое нужно вернуть, еслиexpression1не равно NULL. Можно задать константу, столбец, функцию, а также любую комбинацию арифметических операторов.expression3- числовое выражение, которое нужно вернуть, еслиexpression1равно NULL. Можно задать константу, столбец, функцию, а также любую комбинацию арифметических операторов.
ifnull¶
Алиас для функции nvl.
Строковые функции¶
ascii
bit_length
btrim
char_length
character_length
concat
concat_ws
chr
ends_with
initcap
left
length
lower
lpad
ltrim
octet_length
repeat
replace
reverse
right
rpad
rtrim
split_part
starts_with
strpos
substr
to_hex
translate
trim
upper
uuid
overlay
levenshtein
substr_index
find_in_set
position
ascii()¶
Возвращает ASCII-код первого символа в строке.
ascii(str)
Аргументы:
str- строковое выражение. Можно задать константу, столбец, функцию, а также любую комбинацию строковых операторов.
Обратная функция: chr
SELECT ascii('Привет, Тарантул')
>> 1055
bit_length()¶
Возвращает длину строки в битах.
bit_length(str)
Аргументы:
str- строковое выражение. Можно задать константу, столбец, функцию, а также любую комбинацию строковых операторов.
Похожие функции: length, octet_length
SELECT bit_length('four')
>> 32
btrim()¶
Отсекает указанную подстроку в начале и в конце обрабатываемой строки. Если подстрока не указана, то убирает все пробелы в начале и в конце обрабатываемой строки.
btrim(str[, trim_str])
Аргументы:
str- обрабатываемое строковое выражение. Можно задать константу, столбец, функцию, а также любую комбинацию строковых операторов.trim_str- строковое выражение, которое следует отсечь в начале и в конце обрабатываемой строки. Можно задать константу, столбец, функцию, а также любую комбинацию арифметических операторов. По умолчанию – пробелы.
Похожие функции: ltrim, rtrim
Алиасы: trim
SELECT btrim('to trim to trim Hello, Tarantool Column Store!to trim ', 'to trim ')
>> 'Hello, Tarantool Column Store!'
chr()¶
Возвращает символ, которому соответствует указанный ASCII- или Unicode-код.
chr(expression)
Аргументы:
expression- выражение, содержащее ASCII- или Unicode-код. Можно задать константу, столбец, функцию, а также любую комбинацию арифметических или строковых операторов.
Обратная функция: ascii
SELECT chr (1055)
>> 'П'
concat()¶
Объединяет множество строк в одну.
concat(str[, ..., str_n])
Аргументы:
str- первое строковое выражение. Можно задать константу, столбец, функцию, а также любую комбинацию строковых операторов.str_n- последующее строковое выражение или строковый столбец.
Похожие функции: concat_ws
SELECT concat('Hello,','Tarantool Column','Store!')
>> 'Hello,Tarantool ColumnStore!'
concat_ws()¶
Объединяет множество строк в одну, вставляя между ними указанный разделитель.
concat(separator, str[, ..., str_n])
Аргументы:
separator- разделитель для вставки между строк.str- первое строковое выражение. Можно задать константу, столбец, функцию, а также любую комбинацию строковых операторов.str_n- последующее строковое выражение или строковый столбец.
Похожие функции: concat
SELECT concat_ws(' ','Hello,','Tarantool Column','Store!')
>> 'Hello, Tarantool Column Store!'
initcap()¶
Делает заглавной первую букву в каждом слове обрабатываемой строки. Разделителями между словами считаются все не буквенно-цифровые символы.
initcap(str)
Аргументы:
str- строковое выражение. Можно задать константу, столбец, функцию, а также любую комбинацию строковых операторов.
Похожие функции: lower, upper
SELECT initcap('hello, tarantool column store!')
>> 'Hello, Tarantool Column Store!'
left()¶
Возвращает указанное количество символов от левого края строки.
left(str, n)
Аргументы:
str- строковое выражение. Можно задать константу, столбец, функцию, а также любую комбинацию строковых операторов.n- количество символов, которое надо вернуть.
Похожие функции: right
SELECT left('Hello, Tarantool Column Store!', 5)
>> 'Hello'
length()¶
Возвращает количество символов в строке.
length(str)
Аргументы:
str- строковое выражение. Можно задать константу, столбец, функцию, а также любую комбинацию строковых операторов.
Похожие функции: bit_length, octet_length
Алиасы: char_length, character_length
SELECT length('four')
>> 4
lower()¶
Превращает все буквы обрабатываемой строки в строчные.
lower(str)
Аргументы:
str- строковое выражение. Можно задать константу, столбец, функцию, а также любую комбинацию строковых операторов.
Похожие функции: initcap, upper
SELECT lower('Hello, Tarantool Column Store!')
>> 'hello, tarantool column store!'
ltrim()¶
Отсекает указанную подстроку в начале обрабатываемой строки. Если подстрока не указана, то убирает все пробелы в начале обрабатываемой строки.
ltrim(str[, trim_str])
Аргументы:
str- обрабатываемое строковое выражение. Можно задать константу, столбец, функцию, а также любую комбинацию строковых операторов.trim_str- строковое выражение, которое следует отсечь в начале обрабатываемой строки. Можно задать константу, столбец, функцию, а также любую комбинацию арифметических операторов. По умолчанию – пробелы.
Похожие функции: btrim, rtrim
SELECT ltrim('to trim to trim Hello, Tarantool Column Store!to trim ', 'to trim ')
>> 'Hello, Tarantool Column Store!to trim '
octet_length()¶
Возвращает длину строки в байтах.
octet_length(str)
Аргументы:
str- строковое выражение. Можно задать константу, столбец, функцию, а также любую комбинацию строковых операторов.
Похожие функции: bit_length, length
SELECT octet_length('four')
>> 4
repeat()¶
Возвращает строку, состоящую из указанного количества повторов заданной строки.
repeat(str, n)
Аргументы:
str- строковое выражение, которое следует повторить. Можно задать константу, столбец, функцию, а также любую комбинацию строковых операторов.n- количество повторов.
SELECT repeat('Hello, Tarantool Column Store! ', 3)
>> 'Hello, Tarantool Column Store! Hello, Tarantool Column Store! Hello, Tarantool Column Store! '
replace()¶
Заменяет все вхождения указанной подстроки в строке на новую подстроку.
replace(str, substr, replacement)
Аргументы:
str- обрабатываемое строковое выражение. Можно задать константу, столбец, функцию, а также любую комбинацию строковых операторов.substr- подстрока, которую следует найти и заменить в строкеstr. Можно задать константу, столбец, функцию, а также любую комбинацию строковых операторов.replacement- подстрока, на которую следует заменить найденные вхожденияsubstrв строкеstr. Можно задать константу, столбец, функцию, а также любую комбинацию строковых операторов.
SELECT replace('Hello, Tarantool Column Store!', ' ', ' Super-')
>> 'Hello, Super-Tarantool Super-Column Super-Store!'
reverse()¶
Переставляет символы в строке в противоположном порядке (зеркальное отображение).
reverse(str)
Аргументы:
str- строковое выражение, окторое нужно отобразить зеркально. Можно задать константу, столбец, функцию, а также любую комбинацию строковых операторов.
SELECT reverse('Hello, Tarantool Column Store!')
>> '!erotS nmuloC lootnaraT ,olleH'
right()¶
Возвращает указанное количество символов от правого края строки.
right(str, n)
Аргументы:
str- строковое выражение. Можно задать константу, столбец, функцию, а также любую комбинацию строковых операторов.n- количество символов, которое надо вернуть.
Похожие функции: left
SELECT right('Hello, Tarantool Column Store!', 6)
>> 'Store!'
rtrim()¶
Отсекает указанную подстроку в конце обрабатываемой строки. Если подстрока не указана, то убирает все пробелы в конце обрабатываемой строки.
rtrim(str[, trim_str])
Аргументы:
str- обрабатываемое строковое выражение. Можно задать константу, столбец, функцию, а также любую комбинацию строковых операторов.trim_str- строковое выражение, которое следует отсечь в конце обрабатываемой строки. Можно задать константу, столбец, функцию, а также любую комбинацию арифметических операторов. По умолчанию – пробелы.
Похожие функции: btrim, ltrim
SELECT rtrim('to trim to trim Hello, Tarantool Column Store!to trim ', 'to trim ')
>> 'to trim to trim Hello, Tarantool Column Store!'
split_part()¶
Разбивает строку на подстроки по указанному разделителю и возвращает подстроку с указанным номером.
split_part(str, delimiter, pos)
Аргументы:
str- обрабатываемое строковое выражение. Можно задать константу, столбец, функцию, а также любую комбинацию строковых операторов.delimiter- строка или символ разделителя.pos- номер возвращаемой подстроки.
SELECT split_part('Hello, Tarantool Column Store!', ' ', 3)
>> 'Column'
starts_with()¶
Проверяет, начинается ли строка с указанной подстроки.
starts_with(str, substr)
Аргументы:
str- проверяемое строковое выражение. Можно задать константу, столбец, функцию, а также любую комбинацию строковых операторов.substr- подстрока, вхождение которой нужно проверить.
SELECT starts_with('Hello, Tarantool Column Store!', 'Hello')
>> true
strpos()¶
Возвращает начальную позицию указанной подстроки в строке. Отсчет позиции начинается с 1. Если строка не содержит указанную подстроку, то функция возвращает 0.
strpos(str, substr)
Аргументы:
str- обрабатываемое строковое выражение. Можно задать константу, столбец, функцию, а также любую комбинацию строковых операторов.substr- подстрока, которую следует найти в строкеstr. Можно задать константу, столбец, функцию, а также любую комбинацию строковых операторов.
Алиасы: instr
SELECT strpos('Hello, Tarantool Column Store!', 'tool')
>> 13
substr()¶
Вырезает подстроку указанной длины (в символах), начиная с указанной позиции в строке.
substr(str, start_pos[, length])
Аргументы:
str- обрабатываемое строковое выражение. Можно задать константу, столбец, функцию, а также любую комбинацию строковых операторов.start_pos- позиция (в символах от начала строки), начиная с которой нужно вырезать подстроку. Нумерация символов начинается с 1.length- количество символов в вырезаемой подстроке. Если не указано, то функция вернет всю строку, начиная с указанной стартовой позиции.
SELECT substr('Hello, Tarantool Column Store!', 8, 9)
>> 'Tarantool'
translate()¶
Меняет символы в строке на указанные символы.
translate(str, chars, translation)
Аргументы:
str- обрабатываемое строковое выражение. Можно задать константу, столбец, функцию, а также любую комбинацию строковых операторов.chars- символы, которые нужно заменить символамиtranslation.translation- символы, на которые нужно заменить символыchars. Замена производится в том порядке, в котором идут символы в двух последних аргументах.
SELECT translate('Hello, Tarantool Column Store!', 'tol', '+0|')
>> 'He||0, Taran+00| C0|umn S+0re!'
upper()¶
Превращает все буквы обрабатываемой строки в заглавные.
upper(str)
Аргументы:
str- строковое выражение. Можно задать константу, столбец, функцию, а также любую комбинацию строковых операторов.
Похожие функции: initcap, lower
SELECT upper('Hello, Tarantool Column Store!')
>> 'HELLO, TARANTOOL COLUMN STORE!'
Двоичные строковые функции¶
decode
encode
Функции для работы с регулярными выражениями¶
TCS поддерживает синтаксис регулярных выражений в стиле PCRE за исключением некоторых возможностей (например, нет поддержки просмотра (look-around) и обратных ссылок).
regexp_match
regexp_replace
regexp_match()¶
Возвращает список вхождений в указанную строку, которые удовлетворяют заданному регулярному выражению.
regexp_match(str, regexp[, flags])
Аргументы:
str- строковое выражение. Можно задать константу, столбец, функцию, а также любую комбинацию строковых операторов.regexp- регулярное выражение, для которого следует найти соответствия в указанной строке. Можно задать константу, колонку или функцию.flags- необязательный аргумент. Флаги, которые влияют на логику регулярного выражения. Можно указать следующие флаги:i- искать без учета регистраm- многострочный режим (^и$соответствуют началу и концу строки)s- символ.может соответствовать символу\nR- режим CRLF (когда включен многострочный режим, используется \r\n)U- поменять местами значенияx*иx*?
SELECT regexp_match('aBc', '(b|d)', 'i')
>> 'B'
SELECT regexp_match('I have been in Köln in 2018', '[a-zA-Z]ö[a-zA-Z]{2}')
>> 'Köln'
regexp_replace()¶
Заменяет вхождения указанной подстроки, которые удовлетворяют заданному регулярному выражению.
regexp_replace(str, regexp, replacement[, flags])
Аргументы:
str- строковое выражение. Можно задать константу, столбец, функцию, а также любую комбинацию строковых операторов.regexp- регулярное выражение, для которого следует найти соответствия в указанной строке. Можно задать константу, колонку или функцию.replacement- подстрока, на которую следует заменить найденные вхождения в строкеstr. Можно задать константу, столбец, функцию, а также любую комбинацию строковых операторов.flags- необязательный аргумент. Флаги, которые влияют на логику регулярного выражения. Можно указать следующие флаги:g- глобальный поиск (не прекращать поиск после первого найденного вхождения)i- искать без учета регистраm- многострочный режим (^и$соответствуют началу и концу строки)s- символ.может соответствовать символу\nR- режим CRLF (когда включен многострочный режим, используется \r\n)U- поменять местами значенияx*иx*?
SELECT regexp_replace('aBc', '(b|d)', 'Ab\\1a', 'i')
>> 'aAbBac'
SELECT regexp_replace('foobarbaz', 'b(..)', 'X\\1Y', 'g')
>> 'fooXarYXazY',
Функции для работы со временем и датами¶
now
current_date
current_time
date_bin
date_trunc
datetrunc
date_part
datepart
extract
today
make_date
to_char
to_timestamp
to_timestamp_millis
to_timestamp_micros
to_timestamp_seconds
to_timestamp_nanos
from_unixtime
Функции для работы с массивами¶
array_concat
array_concat¶
Объединяет указанные массивы в один.
array_concat(array[, ..., array_n])
Аргументы:
array- первый массив для объединения. Можно задать константу, столбец, функцию, а также любую комбинацию операторов для работы с массивами.array_n- последующая колонка или литерал типа массив для объединения.
Пример:
❯ select array_concat([1, 2], [3, 4], [5, 6]);
+---------------------------------------------------+
| array_concat(List([1,2]),List([3,4]),List([5,6])) |
+---------------------------------------------------+
| [1, 2, 3, 4, 5, 6] |
+---------------------------------------------------+
Функции для работы с хешированием¶
digest
md5
sha224
sha256
sha384
sha512
Прочие скалярные функции¶
arrow_cast
arrow_typeof
Встроенные функции TCS¶
Функции наибольшей встречаемости (most occurent)¶
most_occurent_frequency()– количество вхождений наиболее часто встречающегося значения.most_occurent_value()– общее количество записей, удовлетворяющих условиям счетчика.most_occurent_ratio()– отношение значенияmost_occurent_frequency()к значениюmost_occurent_value().Если ни одна транзакция не удовлетворяет условиям счетчика, значение
most_occurent_ratio()равно нулю.Если значение встречается не более одного раза, это значение также равно нулю.
Значение
most_occurent_ratio()всегда находится в интервале[0; 1], поэтому выходной атрибут счетчика должен иметь тип данныхdecimal.
Пример:
При таких вводных данных:
POST http://127.0.0.1:7777/sql -d 'select attr0 as ratio from attributes'
[
{
"ratio": 2
},
{
"ratio": 2
},
{
"ratio": 2
},
{
"ratio": 3
},
{
"ratio": 2
},
{
"ratio": 1
}
]
функции возвращают следующие результаты:
POST http://127.0.0.1:7777/sql -d 'select most_occurent_value(attr0) as res from attributes'
[
{
"res": 2
}
]
POST http://127.0.0.1:7777/sql -d 'select most_occurent_frequency(attr0) as res from attributes'
[
{
"res": 4
}
]
POST http://127.0.0.1:7777/sql -d 'select most_occurent_ratio(attr0) as res from attributes'
[
{
"res": 0.6666666666666666
}
]
Функция not_indexed()¶
Позволяет сделать SELECT-запрос с использованием индекса и получить даже те данные, которые вышли за глубину индексации.
not_indexed(table)
Аргументы:
table- название таблицы.
Пример:
В таблице table по колонке a построен индекс c глубиной индексации 100.
Запрос
select a from tableвернет все записи в таблице.Запрос
select a from table where a = 1вернет до 100 записей, в которыха = 1, т.к. поиск идет по индексу с глубиной 100.Запрос
select a from not_indexed("table") where a = 1вернет все записи, в которыха = 1, независимо от глубины индексации.
Функция distinct_values_ratio()¶
Подсчитывает соотношение уникальных значений во множестве к их общему количеству. Используется, например, для определения различных паттернов фрода.
distinct_values_ratio(array)
Аргументы:
array- множество значений.
Результат:
десятичное число в диапазоне от 0 до 1: чем ближе значение к единице, тем больше уникальных элементов во множестве;
для массива из полностью одинаковых элементов результат равен 0;
для пустого массива, как и для массива из уникальных значений, результат равен 1.
Параметры записи¶
Для команды COPY в TCS можно явным образом задавать параметры записи данных на диск.
Например:
COPY 'attributes'
TO 'res/table_with_attrs'
PARTITIONED BY (col3, col4)
OPTIONS (
format parquet,
compression snappy,
'compression::col1' 'zstd(5)',
)
В этом примере мы записываем все данные из таблицы attributes в директорию
с parquet-файлами. При этом:
Для каждой партиции в запросе в директорию
res/table_with_attrsпараллельно записывается отдельный parquet-файл.Параметр
compression, для которого задано значениеsnappy, указывает, что для всех столбцов нужно использовать кодировщик сжатия форматаsnappy.Параметр
compression::col1переопределяет формат кодировщика для столбцаcol1: для данных из этого столбца в parquet-файле будет использован кодировщик сжатия формата ZSTD с уровнем сжатия 5.
Далее приводится описание всех поддерживаемых параметров записи.
Параметры выполнения запроса¶
Для запросов с командой COPY доступны следующие параметры выполнении запроса:
execution.keep_partition_by_columns¶
Указывает, нужно ли сохранять столбцы в выходных данных при использовании запросов с PARTITIONED BY.
Тип: boolean
Значение по умолчанию: false
Параметры для формата JSON¶
При записи JSON-файлов доступны следующие параметры:
Примечание
Если указан неподдерживаемый параметр, то запрос завершится ошибкой.
СOMPRESSION¶
Формат сжатия для всего JSON-файла.
Поддерживаемые значения: GZIP, BZIP2, XZ, ZSTD и UNCOMPRESSED.
Тип: string
Значение по умолчанию: UNCOMPRESSED
Параметры для формата CSV¶
При записи CSV-файлов доступны следующие параметры:
Примечание
Если указан неподдерживаемый параметр, то запрос завершится ошибкой.
СOMPRESSION¶
Формат сжатия для всего CSV-файла.
Поддерживаемые значения: GZIP, BZIP2, XZ, ZSTD и UNCOMPRESSED.
Тип: string
Значение по умолчанию: UNCOMPRESSED
HEADER¶
Указывает, должен ли CSV-файл содержать заголовки столбцов.
Тип: boolean
Значение по умолчанию: false
DATE_FORMAT¶
Формат, в котором следует кодировать даты в CSV-файле.
По умолчанию для кодирования даты и времени используется формат ISO 8601:
YYYY-MM-DDTHH:mm:ss.sssZ.
Пример значения:
1970-01-01T00:00:00.001.
Тип: string
Значение по умолчанию: YYYY-MM-DDTHH:mm:ss.sssZ
DATETIME_FORMAT¶
Формат, в котором следует кодировать дату и время в CSV-файле.
По умолчанию для кодирования даты и времени используется формат ISO 8601:
YYYY-MM-DDTHH:mm:ss.sssZ.
Пример значения:
1970-01-01T00:00:00.001.
Тип: string
Значение по умолчанию: YYYY-MM-DDTHH:mm:ss.sssZ
TIME_FORMAT¶
Формат, в котором следует кодировать время в CSV-файле.
По умолчанию для кодирования даты и времени используется формат ISO 8601:
YYYY-MM-DDTHH:mm:ss.sssZ.
Пример значения:
1970-01-01T00:00:00.001.
Тип: string
Значение по умолчанию: YYYY-MM-DDTHH:mm:ss.sssZ
RFC3339¶
Если значение равно true, то для кодирования даты и времени используется
формат RFC 339:
YYYY-MM-DDTHH:mm:ss.
Пример значения:
2022-09-27T22:36:00.
Тип: boolean
Значение по умолчанию: false
NULL_VALUE¶
Строка, которую следует использовать для указания нулевых значений в CSV-файле.
Тип: string
Значение по умолчанию: '' (пустая строка)
DELIMITER¶
Символ, который следует использовать в качестве разделителя столбцов в CSV-файле.
Тип: string
Значение по умолчанию: , (запятая)
Параметры для формата Parquet¶
При записи parquet-файлов доступны следующие параметры:
Примечание
Если указан неподдерживаемый параметр, то запрос завершится ошибкой.
Если параметр, специфичный для столбца, указан для столбца, который не существует, то этот параметр будет проигнорирован без ошибок.
Параметры, которые можно указывать для отдельных столбцов, можно задавать с помощью синтаксиса вида
OPTION::COLUMN.NESTED.PATH.
COMPRESSION¶
Используемый кодировщик сжатия и, если применимо, уровень сжатия.
Допустимые значения: uncompressed, snappy, gzip(уровень), lzo,
brotli(уровень), lz4, zstd(уровень) и lz4_raw.
Регистр в указываемых значениях не учитывается.
Если значение равно NULL, то используется кодировщик по умолчанию, заданный в настройках модуля записи parquet-файлов (parquet writer).
Обратите внимание, то данный параметр не задает модуль записи parquet-файлов, используемый по умолчанию.
Можно указывать для столбца: да
Тип: string
Значение по умолчанию: zstd(3)
MAX_ROW_GROUP_SIZE¶
Максимальное количество строк, которые могут быть закодированы в одной группе строк. Для записи и чтения больших групп строк требуется больше памяти.
Можно указывать для столбца: нет
Тип: integer
Значение по умолчанию: 1048576
DATA_PAGESIZE_LIMIT¶
Максимальное ограничение (в байтах) для размера страницы сжатия.
Можно указывать для столбца: нет
Тип: integer
Значение по умолчанию: 1048576
WRITE_BATCH_SIZE¶
Максимальное количество строк, записываемых для каждого столбца в одном пакете (batch).
Можно указывать для столбца: нет
Тип: integer
Значение по умолчанию: 1024
WRITER_VERSION¶
Версия модуля записи parquet-файлов (parquet writer): 1.0 или 2.0.
Можно указывать для столбца: нет
Тип: string
Значение по умолчанию: 1.0
DICTIONARY_PAGE_SIZE_LIMIT¶
Максимальный размер страницы словаря (в байтах).
Можно указывать для столбца: нет
Тип: integer
Значение по умолчанию: 1048576
CREATED_BY¶
Значение свойства «created by» в parquet-файле.
Можно указывать для столбца: нет
Тип: string
Значение по умолчанию: datafusion version 45.0.0
COLUMN_INDEX_TRUNCATE_LENGTH¶
Максимальная длина индекса для столбца.
Можно указывать для столбца: нет
Тип: integer
Значение по умолчанию: 64
DATA_PAGE_ROW_COUNT_LIMIT¶
Максимальное количество строк на странице данных.
Можно указывать для столбца: нет
Тип: integer
Значение по умолчанию: 20000
BLOOM_FILTER_ENABLED¶
Указывает, следует ли записывать bloom-фильтр в parquet-файл.
Можно указывать для столбца: да
Тип: boolean
Значение по умолчанию: false
ENCODING¶
Кодировка, которую следует использовать для parquet-файлов.
Допустимые значения: plain, plain_dictionary, rle, bit_packed,
delta_binary_packed, delta_length_byte_array, delta_byte_array,
rle_dictionary и byte_stream_split.
Регистр в указываемых значениях не учитывается.
Если значение равно NULL, то используется кодировка по умолчанию, заданная в настройках модуля записи parquet-файлов (parquet writer).
См. также параметр DICTIONARY_ENABLED.
Можно указывать для столбца: да
Тип: string
Значение по умолчанию: NULL
DICTIONARY_ENABLED¶
Указывает, включена ли кодировка по словарю. Используйте это значение вместо ENCODING, чтобы задать кодировку по словарю.
Если значение равно NULL, то используется значение по умолчанию, заданное в настройках модуля записи parquet-файлов (parquet writer).
Можно указывать для столбца: да
Тип: boolean
Значение по умолчанию: true
STATISTICS_ENABLED¶
Указывает, включена ли статистика на уровне PAGE или ROW_GROUP.
Допустимые значения: none, chunk и page.
Регистр в указываемых значениях не учитывается.
Если значение равно NULL, то используется значение по умолчанию, заданное в настройках модуля записи parquet-файлов (parquet writer).
Можно указывать для столбца: да
Тип: boolean
Значение по умолчанию: page
MAX_STATISTICS_SIZE¶
Максимальный размер (в байтах), который может занимать статистика.
Можно указывать для столбца: да
Тип: integer
Значение по умолчанию: 4096
BLOOM_FILTER_FPP¶
Вероятность ложного срабатывания (fpp) для bloom-фильтра.
Неявно присваивает BLOOM_FILTER_ENABLED значение true.
Если значение равно NULL, то используется количество по умолчанию, заданное в настройках модуля записи parquet-файлов (parquet writer).
См. также параметр BLOOM_FILTER_NDV.
Можно указывать для столбца: да
Тип: integer
Значение по умолчанию: NULL
BLOOM_FILTER_NDV¶
Количество различных значений (ndv) для bloom-фильтра.
Неявно устанавливает для BLOOM_FILTER_FPP значение true.
Если значение равно NULL, то используется количество по умолчанию, заданное в настройках модуля записи parquet-файлов (parquet writer).
Можно указывать для столбца: да
Тип: integer
Значение по умолчанию: NULL
Заполнители (placeholders)¶
В текущей версии TCS поддерживаются заполнители (placeholders) в формате PostgreSQL
с метками вида $1, например INSERT INTO table(col1, col2) VALUES ($1, $2).
Также поддерживаются заполнители с метками вида ?, например INSERT INTO table(col1, col2) VALUES (?, ?).
Типы данных SQL¶
Ниже приводится соответствие типов данных SQL, которые поддерживаются в PostgreSQL, и примитивных типов данных Apache Arrow, которые поддерживаются в TCS.
Типы данных из PostgreSQL нужно использовать в качестве параметров для подготовленных SQL-запросов (prepared statements).
Тип данных в PostgreSQL |
Тип данных в TCS |
Описание |
|---|---|---|
- |
i8 |
8-битное знаковое целое |
int2/smallint |
i16 |
16-битное знаковое целое |
int4/int |
i32 |
32-битное знаковое целое |
int8/bigint |
i64 |
64-битное знаковое целое |
char |
u8 |
8-битное беззнаковое целое |
- |
u16 |
16-битное беззнаковое целое |
- |
u32 |
32-битное беззнаковое целое |
- |
u64 |
64-битное беззнаковое целое |
float4/real |
f32 |
32-битное с плавающей точкой |
float8/double precision/float |
f64 |
64-битное с плавающей точкой |
boolean/bool |
bool |
логический: |
один из int-типов |
ts |
UNIX timestamp в миллисекундах |
varchar/text/string |
utf8 |
строка UTF-8 |