函数视图
函数视图提供了一种灵活的方式来控制用户访问数据库和表。函数视图是封装了访问数据库以及相关计算语句的自定义函数。用户即使不具备读写数据库原始数据的权限,也可通过执行函数视图,间接访问数据库,得到所需计算结果。
下面的例子中,自定义函数 getSpread 计算 dfs://TAQ/quotes 表中指定股票的平均买卖报价差。用户 user1 不具有读取 dfs://TAQ/quotes 表的权限。现在我们把函数 getSpread 定义为函数视图,并赋予用户 user1 执行该视图的权限。虽然 user1 不具备读取 dfs://TAQ/quotes 表的权限,但是仍然可以通过执行 getSpread 函数,利用 dfs://TAQ/quotes 表的数据进行计算,来获得指定股票的买卖报价差。
由于 dfs://TAQ/quotes 是分布式数据库,以下代码需要由系统管理员在控制节点上执行。用户 user1 可在任意数据节点 / 计算节点运行 getSpread 函数。
def getSpread(s, d){
return select avg((ofr-bid)/(ofr+bid)*2) as spread from loadTable("dfs://TAQ","quotes") where symbol=s, date=d
}
addFunctionView(getSpread)
grant("user1", VIEW_EXEC, "getSpread")
如果 DolphinDB 集群重启,之前定义的函数视图仍然可以使用。但是 DolphinDB 不允许直接修改函数视图中的语句,如果要修改函数视图,需要先使用 dropFunctionView 函数删除函数视图。
dropFunctionView("getSpread")