Перейти к содержанию

Работа с данными SQL

В данном разделе приведены примеры команд для работы с данными в Picodata с помощью языка SQL-запросов.

Создание таблицы

Для создания таблицы в Picodata следует сначала подключиться к интерактивной консоли инстанса. Для ввода команд можно использовать как формат Lua, так и язык SQL напрямую, в зависимости от выбранного языка консоли. В примерах ниже использован формат Lua.

Пользователям доступны функции для работы как с глобальными, так и шардированными таблицами (в последнем случае реализованы возможности распределенного SQL).

Для примера создадим шаблон списка друзей Свинки Пеппы, котором будет два поля: идентификатор записи и имя друга:

pico.sql([[
    create table "friends_of_peppa" (
                "id" integer,
                "name" text not null,
                primary key ("id")
    ) using memtx distributed by ("id")
    option (timeout = 3.0)
]])

Помимо двух колонок, в примере указаны:

  • первичный ключ таблицы (колонка "id");
  • движок хранения данных in-memory (memtx);
  • тип таблицы (шардированный, distributed by);
  • ключ шардирования таблицы (колонка "id");
  • таймаут перед возвращением управления пользователю.

Для того чтобы создать такую же, но глобальную таблицу, следует указать соответствующий тип:

pico.sql([[
    create table "friends_of_peppa" (
                "id" integer,
                "name" text not null,
                primary key ("id")
    ) using memtx distributed globally
    option (timeout = 3.0)
]])

Подробнее о типах таблиц см. в глоссарии. Описание команд SQL приведено в разделе Команды SQL.

Запись данных в таблицу

Запись данных, т.е. вставка строк, в таблицу происходит с помощью команды INSERT в SQL-запросе. В данный момент поддерживается запись только в шардированные таблицы. Можно использовать обычный запрос с прямой передачей значений:

pico.sql(
    [[insert into "friends_of_peppa" ("id", "name") values (1, "Suzy")]]
)

Либо параметризированный запрос:

pico.sql(
    [[insert into "friends_of_peppa" ("id", "name") values (?, ?)]],
    {1, "Suzy"}
)

См. подробнее о различиях в INSERT-запросах.

Чтение данных из таблицы

Для чтения всех данных из таблицы подойдёт команда:

pico.sql([[select * from "friends_of_peppa"]])

Можно вывести отдельно строку по известному полю:

pico.sql([[select * from "friends_of_peppa" where "id" = 1]])

См. подробнее о вариантах чтения данных в SQL.

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

Удаление строки с известным id:

picodata> pico.sql([[delete from "friends_of_peppa" where "id" = 1]])

В консоли будет выведено количество удаленных строк (в данном случае, это 1).

Приведенный выше пример поможет сделать первые шаги в работе с данными в Picodata. Подробнее о внутренней архитектуре кластера Picodata см. в разделе Жизненный цикл инстанса.

Параметры запуска из командной строки описаны в разделе Аргументы командной строки Picodata.