EXASol устанавливает пользовательскую переменную сеанса

В SQL Server (2016) у нас есть SESSION_CONTEXT() и sp_set_session_context для извлечения / сохранения пользовательских переменных в хранилище значений ключей. Эти значения доступны только в сеансе, и их время жизни заканчивается, когда сеанс завершается. (Или в более ранних версиях старый добрый CONTEXT_INFO для хранения некоторых данных в varbinary).

Я ищу подобное решение в EXASol (6.0).

Очевидным может быть создание таблицы и сохранение этой информации там, однако для этого требуется запланированный сценарий очистки и более подверженный ошибкам, чем встроенное решение. Это запасной план, однако я хотел бы быть уверен, что других вариантов нет.

Другим вариантом может быть создание отдельных пользователей в базе данных и их настройка, но только из-за количества добавляемых пользователей это было исключено.

Вариант использования следующий: у приложения есть несколько пользователей, у каждого пользователя есть некоторые значения, которые будут использоваться в каждом запросе. Приложение имеет доступ только к некоторым представлениям.

Это прекрасно работает в SQL Server, но мы хотим протестировать EXASol как альтернативу с той же функциональностью.

Я не могу найти ничего связанного с Руководством по EXASol, но возможно, что я что-то пропустил.

Вот упрощенный пример кода в SQL Server 2016

sp_set_session_context @key='filter', @value='asd', @read_only=1;

CREATE VIEW FilteredMyTable AS
SELECT Col1, Col2, Col3 FROM MyTable
WHERE MyFilterCol = CONVERT(VARCHAR(32), SESSION_CONTEXT('filter'))

Я пробовал решение, которое, очевидно, не идет, просто чтобы проверить, работает ли оно (не работает).

ALTER SESSION SET X_MY_CUSTOM_FILTER = "asd"

2 ответа

Решение

Вы не можете реально установить параметр сеанса в EXASOL, единственный способ добиться чего-то похожего - это сохранить значения, которые вам нужны, в таблице с такой структурой:

SESSION_ID   KEY     VALUE   READ_ONLY
8347387      filter  asd     1

С помощью LUA вы можете создать сценарий, который облегчит вам управление этими "сессионными" переменными.

Я думаю, что вы можете достичь того, что вам нужно, используя возможности сценариев в Exasol - см. Раздел 3.5 в руководстве пользователя.

Вы также можете обрабатывать параметризацию "извне" с помощью сценария оболочки

Другие вопросы по тегам