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 в руководстве пользователя.
Вы также можете обрабатывать параметризацию "извне" с помощью сценария оболочки