EXASol 设置自定义会话变量

EXASol set a custom session variable

在 SQL 服务器 (2016) 中,我们有 SESSION_CONTEXT() and sp_set_session_context to retrieve/store custom variables in a key-value store. These values are available only in the session and their lifetime ends when the session is terminated. (Or in earlier versions the good old CONTEXT_INFO 将一些数据存储在 varbinary 中。

我正在 EXASol (6.0) 中寻找类似的解决方案。

一个明显的方法是创建一个 table 并将此信息存储在那里,但是这需要计划的清理脚本并且比内置解决方案更容易出错。这是后备计划,但我想确定没有其他选择。

另一种选择可能是在数据库中创建个人用户并对其进行配置,但由于要添加的用户数量太多,所以被排除了。

用例如下:一个应用程序有多个用户,每个用户都有一些值用于每个查询。该应用程序只能访问某些视图。

这在 SQL 服务器中非常有效,但我们想测试 EXASol 作为具有相同功能的替代方案。

我在 EXASol Manual 中找不到任何相关内容,但有可能是我遗漏了一些内容。

这是 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"

我认为您可以通过使用 Exasol 中的脚本功能实现您需要的功能 - 请参阅用户手册中的第 3.5 节..

您还可以通过 shell 脚本

处理参数化 'externally'

您无法在 EXASOL 中真正设置会话参数,实现类似功能的唯一方法是将您需要的值存储在 table 中,其结构如下:

SESSION_ID   KEY     VALUE   READ_ONLY
8347387      filter  asd     1

使用 LUA,您可以创建一个脚本,让您更轻松地管理这些 "session" 变量。