EXASol设置自定义会话变量

时间:2017-05-09 08:34:12

标签: sql session exasolution

在SQL Server(2016)中,我们有SESSION_CONTEXT()sp_set_session_context来检索/存储键值存储中的自定义变量。这些值仅在会话中可用,并且它们的生命周期在会话终止时结束。 (或者在早期版本中,旧的CONTEXT_INFO将一些数据存储在varbinary中。

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

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

另一种选择可能是在数据库中创建单个用户并对其进行配置,但仅仅因为要添加的用户数量,这被排除了。

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

这在SQL Server中运行得非常好,但是我们想要测试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"

2 个答案:

答案 0 :(得分:0)

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

您还可以在外部处理参数化'通过shell脚本

答案 1 :(得分:0)

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

SESSION_ID   KEY     VALUE   READ_ONLY
8347387      filter  asd     1

使用LUA,您可以创建一个脚本,使您更容易管理这些“会话”变量。