Чтение данных | Tcs

Версия:

1.x

Чтение данных

Для обращения к данным в хранилище Tarantool Column Store используются SQL-запросы.

TCS поддерживает следующие способы обращения к данным:

Поддерживаемые операторы и функции SQL описаны в Справочнике по SQL.

SELECT-запросы через HTTP

Для выполнения запроса SELECT воспользуйтесь одним из двух интерфейсов: SQL или HTTP.

  • SQL:

    Отправьте SQL-запрос через SQL-драйвер.

    Пример запроса на чтение всех объектов таблицы:

    SELECT * FROM users
    
  • HTTP:

    Отправьте POST-запрос на HTTP-адрес /sql.

    Пример запроса на чтение всех объектов таблицы:

    curl -u tcs:tcs -d 'SELECT * FROM users' http://localhost:7777/sql
    

    Пример запроса на чтение с фильтром:

    curl -u tcs:tcs -d 'SELECT * FROM users WHERE id=1' http://localhost:7777/sql
    

    Пример чтения из схемы по умолчанию tcs.schema:

    curl -u tcs:tcs -d 'SELECT * FROM users WHERE id=1' http://localhost:7777/sql
    

Аналитические расчеты

TCS позволяет выполнять аналитические расчеты над хранимыми данными.

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

TCS поддерживает два вида аналитических расчетов:

  • перманентные (хранятся в базе данных)

  • временные (работают только в пределах сессии)

Перманентные аналитические расчеты

Перманентные аналитические расчеты являются хранимыми объектами: чтобы выполнить расчет, нужно сначала его создать и загрузить в TCS. После этого он станет доступен для вызова через HTTP API по имени. Это позволяет уменьшить накладные расходы, возникающие при отправке SQL-запросов через SQL/HTTP API. Среди таких расходов: сериализация и десериализация, передача по сети, разбор и составление плана запроса. Таким образом, аналитические расчеты – оптимальный механизм для ресурсоемких запросов, повторяющихся многократно.

Перманентные аналитические расчеты специфичны для TCS. Они создаются и вызываются только через SQL. Для этого используется код запуска вида PREPARE my_func(INT) AS <query> и последующий вызов через EXECUTE.

Примечание

При работе с TCS по протоколу HTTP доступен только этот вид аналитических расчетов.

Подробнее о работе с этим видом расчетов см. ниже.

Временные аналитические расчеты

Временные аналитические расчеты представляют собой переменную-объект в языке программирования. Они создаются и вызываются только через библиотечные API с помощью кода вызова вида my_db.Prepare(sql).

Подробнее о работе с этим видом расчетов см. Работа с аналитическими расчетами через JDBC/ADBC.

Ограничения при работе с аналитическими расчетами

Аналитические расчеты разных видов можно комбинировать, но с ограничениями:

  • Из временного расчета можно выполнить перманентный расчет, вызвав его по имени.

  • Вызвать временный расчет из перманентного нельзя, потому что у временных расчетов нет имени для привязки.

В качестве аналитического расчета используется один подготовленный оператор SQL (prepared statement).

Созданные аналитические расчеты нельзя изменить. Вместо этого удалите существующий расчет и создайте заново.

Создание аналитических расчетов

Чтобы создать аналитический расчет, воспользуйтесь одним из двух интерфейсов: SQL или HTTP.

  • SQL:

    Отправьте SQL-запрос через SQL-драйвер.

    Запрос должен содержать SQL-оператор PREPARE, создающий подготовленное SQL-выражение (prepared statement)

    Пример: расчет количества записей в таблице.

    PREPARE plan(INT) AS SELECT count(*) FROM users WHERE age > $1
    
  • HTTP:

    Отправьте POST-запрос на HTTP-адрес /sql. В качестве значения используйте SQL-оператор PREPARE, создающий подготовленное SQL-выражение (prepared statement).

    Пример: расчет количества записей в таблице.

    curl -u tcs:tcs -d 'PREPARE plan(INT) AS SELECT count(*) FROM users WHERE age > $1' http://localhost:7777/sql
    

В качестве параметров для подготовленных SQL-выражений используйте типы данных PostgreSQL.

Выполнение аналитических расчетов

Чтобы выполнить существующий в TCS расчет, воспользуйтесь одним из двух интерфейсов: SQL или HTTP.

  • SQL:

    Отправьте SQL-запрос с EXECUTE через SQL-драйвер.

    Пример:

    EXECUTE plan(0)
    
  • HTTP:

    Отправьте POST-запрос на HTTP-адрес /sql. JSON-тело запроса должно содержать инструкцию EXECUTE, имя и входные параметры расчета.

    Пример:

    curl -u tcs:tcs -d 'EXECUTE plan(0)' http://localhost:7777/sql
    

    В ответе TCS отправляет результаты выполнения в следующих секциях:

    • success – результаты успешно выполненных запросов;

    • fail – информация о запросах, которые не удалось выполнить;

    • timings – время, потраченное на разные этапы обработки запроса;

    • plans – вывод EXPLAIN ANALYZE для планов, указанных в запросе.

(queries-computation-manage)

Управление аналитическими расчетами

Чтобы получить список аналитических расчетов и их статусов, отправьте запрос SELECT, содержащий функцию tcs_prepareds.

Пример запроса:

SELECT * FROM tcs_prepareds()

В ответе придёт список, содержащий имена и тела запросов, их зависимости и статусы.

Пример ответа:

name              query                                 depends_on  status
0 my_prepared     PREPARE my_prepared A   S SELECT 1    None        Ready

Статус Ready указывает на то, что аналитический расчет готов. Если аналитический расчет не готов (планируется к выполнению), его статус будет Planning.

Чтобы просмотреть текст конкретного аналитического расчета, отправьте запрос SELECT, содержащий функцию tcs_prepareds и имя расчета.

Пример: просмотр текста существующего аналитического расчета my_prepared.

SELECT * FROM tcs_prepareds() WHERE name = my_prepared

Представления для чтения (read views)

TCS предполагает работу под постоянной транзакционной нагрузкой на запись. Для консистентности чтения данных в таких условиях TCS использует представления для чтения (read view) – снимки хранилища данных в конкретный момент времени.

В каждый момент времени в системе существует одно актуальное представление на чтение. Оно обновляется раз в rv_update_ms миллисекунд.

Также есть очередь из используемых в данный момент представлений, из которых еще выполняется чтение в проходящих обработку запросах SQL и прочих.

Когда запрос на чтение обработан, и при этом уже есть более актуальное представление, то представление, которые использовалось для этого запроса, помещается в очередь. При следующей итерации цикла сборщика мусора (раз в rv_update_ms миллисекунд) все представления из очереди удаляются.

Подробнее о представлениях на чтение читайте в документации Tarantool EE.

Нематериализованные SQL-представления (non-materialized views in SQL)

Нематериализованные SQL-представления удобны тем, что позволяют обращаться к большим запросам, как к таблице. Поскольку создаваемое представление не имеет физической формы, указанный запрос будет выполняться каждый раз при обращении к этому представлению.

Создание нематериализованных SQL-представлений

Чтобы создать нематериализованное SQL-представление, отправьте SQL-запрос, содержащий SQL-оператор CREATE VIEW.

Пример: SQL-представление, содержащее список имен всех совершеннолетних лиц в таблице.

CREATE VIEW adults AS SELECT name FROM users WHERE age >= 18;

Примечание

Созданные SQL-представления существуют только на мастер-узле хранилища Tarantool и не сохраняются между перезагрузками.

Использование нематериализованных SQL-представлений

После создания нематериализованное SQL-представление становится доступно:

  • для запросов на чтение,

  • для аналитических расчетов,

  • для использования в других нематериализованных SQL-представлениях; это означает, что в TCS можно создавать вложенные (иерархические) нематериализованные SQL-представления.

Пример: обращение к SQL-представлению adults из SELECT-запроса.

SELECT salary FROM users WHERE name IS IN (SELECT name FROM adults)

Управление нематериализованными SQL-представлениями

Чтобы просмотреть все доступные нематериализованные SQL-представления, отправьте запрос SELECT, содержащий функцию tcs_views:

SELECT * FROM tcs_views()

Чтобы просмотреть текст конкретного SQL-представления, отправьте запрос SELECT, содержащий функцию tcs_views и имя представления.

Пример: просмотр текста существующего SQL-представления adults.

SELECT * FROM tcs_views() WHERE name = adults

Чтобы заместить существующее SQL-представление, отправьте SQL-запрос, содержащий SQL-оператор CREATE OR REPLACE VIEW.

Пример: замещение существующего SQL-представления adults.

CREATE OR REPLACE VIEW adults AS SELECT name FROM users WHERE age >= 16

Чтобы удалить SQL-представление, отправьте SQL-запрос, содержащий SQL-оператор DROP VIEW и имя представления.

Пример: удаление существующего SQL-представления adults.

DROP VIEW adults
Нашли ответ на свой вопрос?
Обратная связь