问题描述
我有低优先级用户和高优先级用户。首先,我需要处理来自高优先级用户的查询。 低优先级用户最初应该受到限制,因为它们会降低高优先级用户的速度。
目前我还没有找到解决方案。这通常是可能的还是我需要分叉 apache-superset 并在源代码中自己实现这样的逻辑?路线图中是否计划了此功能?
无论如何,我将不胜感激!
解决方法
超集通常是现有数据存储上的一个薄层,没有太多的计算层。
考虑到这一点,正确的技术决策可能是在数据库/数据存储层进行配置。许多人将 LDAP 集成到 Superset 和他们的数据存储中,因此可以配置角色和数据的 2 向配置优先级/权限。
话虽如此,Superset 是开源的!绝对欢迎您 fork 代码并自己实现它。更好的是,您可以随时通过创建 Github 问题来进行讨论。
,就像 Srini 所说,这取决于您的数据层。
实现此目的的一种方法是在您的 SQL_QUERY_MUTATOR
中定义自定义 superset_config.py
:
# superset_config.py
def SQL_QUERY_MUTATOR(sql,username,security_manager):
pool = "vip" if username in VIP_LIST else "normal"
return f"-- pool: {pool}\n{sql}"
这将在查询前添加一条注释,指定一个池是“vip”还是“normal”。然后,您可以将其发送到解析评论并将查询分派到正确标头的代理。
另一种方法是指定一个 DB_CONNECTION_MUTATOR
来根据用户设置连接参数:
# superset_config.py
def DB_CONNECTION_MUTATOR(uri,params,security_manager,source):
pool = "vip" if username in VIP_LIST else "normal"
params["configuration"] = {"job.queue.name": pool}}
return uri,params