【问题标题】:Apache Superset - Can I set a dynamic database as a source for a dataset?Apache Superset - 我可以将动态数据库设置为数据集的源吗?
【发布时间】:2021-05-18 09:54:40
【问题描述】:

在 Apache 超集中:

我有多个数据库,它们具有相同的确切架构(每个数据库上的不同数据,SaaS 平台的每个客户的数据库)。 我想创建一个仪表板(带有图表、数据集),可以由登录用户的权限填充。 这意味着仪表板将从指定的源数据库中查询数据,而不是预定义的。

前提基本上是从数据库中解耦图表/数据集,并允许其参数化。

【问题讨论】:

    标签: apache-superset superset


    【解决方案1】:

    Superset 并不真正支持这种情况,但我可以想到一种解决方法可能 工作:您可以在您的superset_config.py 中定义一个DB_CONNECTION_MUTATOR 路由到取决于用户的不同数据库。

    在你的superset_config.py,添加这个函数:

    def DB_CONNECTION_MUTATOR(uri, params, username, security_manager, source):
        user = security_manager.find_user(username=username)
        if url.database = "db_name" and user and user.email.endswith("@examplea.com"):
            uri.host = "host-for-examplea.com"
        return uri, params
    

    在上面的函数中,如果用户的电子邮件以 @examplea.com 结尾,我们会将 SQLAlchemy URL 的主机更改为 host-for-examplea.com

    为了让它工作,创建一个默认数据库(在这个例子中我们称之为db_name),并基于它创建所有图表/仪表板。然后,用户应该被DB_CONNECTION_MUTATOR重定向到特定的数据库。

    不过,可能发生的一个严重问题是缓存。您应该确保禁用所有缓存,以防止用户看到来自其他数据库的数据。

    【讨论】:

      猜你喜欢
      • 2022-01-26
      • 2020-08-26
      • 2018-06-23
      • 1970-01-01
      • 2021-08-01
      • 1970-01-01
      • 2020-10-18
      • 1970-01-01
      • 2012-10-07
      相关资源
      最近更新 更多