Модификация данных | Tcs

Version:

1.x
Руководство пользователя Модификация данных

Модификация данных

Для выполнения операций модификации данных в Tarantool Column Store используются запросы SQL DML. Их можно отсылать как через SQL-драйвер, так и в виде POST-запроса на HTTP-адрес /sql.

Примечание

Текущие ограничения:

  • При записи данных блокируются все таблицы целиком.

  • Механизмы решения конфликтных ситуаций при работе с данными (как, например, DO NOTHING ON CONFLICT в PostgreSQL) не поддерживаются.

Вставка данных

TCS поддерживает несколько вариантов вставки данных в таблицу:

  • SQL-запрос с помощью SQL-драйверов;

  • SQL-запрос на HTTP-адрес /sql;

  • HTTP-запрос с данными в формате JSON на HTTP-адрес /insert.

Вставка данных через SQL-драйверы

Для вставки данных в таблицу используются SQL-запросы с оператором INSERT вида INSERT INTO table_name { VALUES ( expression [, ...] ) [, ...] | query }.

В одном запросе можно передавать как один, так и несколько объектов для вставки. TCS обрабатывает объекты в том порядке, в каком они указаны в запросе.

В значениях полей можно указывать как конкретные значения, так и null.

Пример:

INSERT INTO target_table VALUES (1, 'One'), (2, 'Two');

Также в запросах можно использовать аргументы-заполнители (placeholders).

Вставка данных через /sql

Вставка данных чере HTTP-адрес /sql производится с помощью SQL-запросов, полностью аналогичных тем, что используются при вставке данных через SQL-драйверы. Алгоритм обработки запросов и их быстродействие здесь также аналогичны.

Вставка данных через /insert

HTTP-адрес /insert используется для выполнения запросов на вставку как более быстрая альтернатива SQL-драйверам и HTTP-адресу /sql.

Вставка через HTTP-адрес /insert работает быстрее, поскольку не требует ресурсоемкого построения планов. При этом способе вставки производятся лишь 2 дополнительных действия:

  • проверка соответствия типов переданных значений и типов колонок;

  • перевод данных в необходимый формат для вставки в Tarantool.

Через HTTP-адрес /insert данные передаются не с помощью SQL-запросов, а с помощью HTTP-запросов в сериализованном виде в формате JSON.

Требования к HTTP-запросам:

  • Запросы отсылаются на HTTP-адрес вида /insert/$name, где /$name – это имя таблицы.

  • Тело запроса должно содержать массив описаний вставляемых объектов.

  • Для каждой строки указываются значения вида "имя_колонки": значение. Их требуется указывать для всех колонок, которые есть в таблице.

  • Порядок колонок в запросе может быть любым. Например, [{ "a": 1, "b": 2 }] эквивалентно [{ "b": 2, "a": 1 }].

  • Значения null можно опускать. Например, [{ "a": 1, "b": null }] эквивалентно [{ "a": 1 }].

  • В заголовке запроса нужно обязательно указывать content-type: application/json.

Пример: вставка данных в таблицу target_table с помощью утилиты curl.

curl -u 'tcs:tcs' -H 'Content-Type: application/json' -d '[{"a":1, "b":-1}, {"a":2, "b": -2}]' http://localhost:7777/insert/target_table

Вставка данных из выборки (insert into select)

Для вставки в таблицу объектов из выборки используйте SQL-запрос вида INSERT INTO table_1 SELECT attribute FROM table_2.

Пример:

INSERT INTO names SELECT name FROM users

В операциях вставки из выборки можно использовать все имеющиеся в TCS возможности SELECT-запросов, например осуществлять выборку из нескольких таблиц (оператор JOIN) и задавать условия с помощью оператора WHERE. Подробнее см. Справочник по SQL > Инструкция SELECT.

Порядок полей таблиц и типы должны совпадать. Например, возьмем две таблицы:

  • таблицу names, которая содержит 2 поля, name и age (именно в таком порядке они объявлены в модели данных);

  • таблицу users, которая содержит поля address, age, name и прочие.

Следующий запрос составлен с учетом порядка полей в этих таблицах:

INSERT INTO names SELECT name, age FROM users

Обновление данных

Для обновление данных в таблице используйте запрос с SQL-оператором UPDATE.

Поддерживается следующий синтаксис запросов:

UPDATE table_name
SET column1 = value1, column2 = value2, ...
WHERE condition;

Пример:

UPDATE names
SET name = 'Anna Danilova', age = '32'
WHERE id = 10

Удаление данных

Для удаления объектов из таблиц используйте запрос с SQL-оператором DELETE.

Пример:

DELETE FROM a WHERE i > 1 LIMIT 100
Found what you were looking for?
Feedback