跳到主要内容
版本 下一

常见问题

Superset 可以处理多大的数据集?

Superset 甚至可以处理庞大的数据库!Superset 作为您底层数据库或数据引擎之上的薄层,所有处理均由它们完成。Superset 只是将查询结果可视化。

在 Superset 中获得可接受性能的关键在于您的数据库能否以用户可接受的速度执行查询并返回结果。如果您在使用 Superset 时遇到性能缓慢的问题,请对您的数据仓库进行基准测试和调优。

运行 Superset 需要哪些计算规格?

您的 Superset 安装规格取决于您拥有的用户数量及其活动,而不是数据的大小。社区中的 Superset 管理员报告称,8GB 内存、2vCPU 足以运行中等规模的实例。要开发 Superset,例如编译代码或构建镜像,您可能需要更高的性能。

监控您的资源使用情况并根据需要增加或减少。请注意,Superset 的使用往往会集中爆发,例如,如果会议中的每个人都同时加载同一个仪表板。

Superset 的应用程序元数据不需要非常大的数据库来存储,尽管日志文件会随着时间的推移而增长。

我可以同时连接/查询多个表吗?

在“探索”或“可视化”用户界面中不能。Superset SQLAlchemy 数据源只能是一个表或一个视图。

在使用表时,解决方案是创建一个包含您分析所需所有字段的表,最可能是通过一些计划的批处理过程。

视图是一个简单的逻辑层,它将任意 SQL 查询抽象为虚拟表。这允许您连接和联合多个表,并使用任意 SQL 表达式应用一些转换。这里的限制是您的数据库性能,因为 Superset 实际上将在您的查询(视图)之上运行查询。一个好的做法可能是将自己限制在只将主要大表连接到一个或多个小表,并尽可能避免使用 GROUP BY,因为 Superset 会进行自己的 GROUP BY,并且重复工作可能会降低性能。

无论您使用表还是视图,性能都取决于您的数据库向与 Superset 交互的用户提供结果的速度。

但是,如果您使用 SQL Lab,则没有此类限制。只要您的数据库帐户有权访问这些表,您就可以编写 SQL 查询来连接多个表。

如何创建自己的可视化?

我们建议阅读创建可视化插件中的说明。

我可以上传和可视化 CSV 数据吗?

当然可以!阅读此处的说明,了解如何启用和使用 CSV 上传。

为什么我的查询会超时?

长时间运行的查询超时可能有多种原因。

对于从 Sql Lab 运行长时间查询,Superset 默认允许其运行长达 6 小时,然后才会被 celery 终止。如果您想增加查询运行时间,可以在配置中指定超时。例如:

SQLLAB_ASYNC_TIME_LIMIT_SEC = 60 * 60 * 6

如果您在加载仪表板或探索切片时遇到超时(504 网关超时),您可能位于网关或代理服务器(如 Nginx)之后。如果它没有收到来自 Superset 服务器(正在处理长时间查询)的及时响应,这些 Web 服务器将直接向客户端发送 504 状态码。Superset 有一个客户端超时限制来解决此问题。如果查询未在客户端超时(默认为 60 秒)内返回,Superset 将显示警告消息以避免网关超时消息。如果您有更长的网关超时限制,您可以在 superset_config.py 中更改超时设置

SUPERSET_WEBSERVER_TIMEOUT = 60

为什么地理空间可视化中不显示地图?

您需要在 Mapbox.com 注册一个免费帐户,获取一个 API 密钥,并将其添加到 .env 中,键为 MAPBOX_API_KEY

MAPBOX_API_KEY = "longstringofalphanumer1c"

如何限制仪表板上的定时刷新?

默认情况下,仪表板定时刷新功能允许您根据设定的时间表自动重新查询仪表板上的每个切片。但有时,您可能不希望所有切片都刷新——特别是如果某些数据变化缓慢,或者运行繁重的查询。要从定时刷新过程中排除特定切片,请将 timed_refresh_immune_slices 键添加到仪表板 JSON 元数据字段中

{
"filter_immune_slices": [],
"expanded_slices": {},
"filter_immune_slice_fields": {},
"timed_refresh_immune_slices": [324]
}

在上面的示例中,如果为仪表板设置了定时刷新,则除了 324 之外的所有切片都将按计划自动重新查询。

切片刷新也将分散在指定的时间段内。您可以通过将 stagger_refresh 设置为 false 来关闭此分散,并通过将 JSON 元数据字段中的 stagger_time 设置为毫秒值来修改分散周期

{
"stagger_refresh": false,
"stagger_time": 2500
}

这里,如果启用了周期性刷新,则整个仪表板将立即刷新。2.5 秒的分散时间将被忽略。

为什么“flask fab”或 superset 启动时会冻结/挂起/无响应(我的主目录是 NFS 挂载的)?

默认情况下,Superset 会在 ~/.superset/superset.db 创建并使用一个 SQLite 数据库。众所周知,SQLite 在 NFS 上使用时效果不佳,因为 NFS 上的文件锁定实现存在问题。

您可以使用 SUPERSET_HOME 环境变量覆盖此路径。

另一种解决方法是通过在 superset_config.py 中添加以下内容来更改 superset 存储 sqlite 数据库的位置

SQLALCHEMY_DATABASE_URI = 'sqlite:////new/location/superset.db?check_same_thread=false'

您可以此处阅读有关使用配置文件自定义 Superset 的更多信息。

如果表模式发生变化怎么办?

表模式不断演变,Superset 需要反映这一点。在仪表板的生命周期中,添加新维度或指标是很常见的。要让 Superset 发现您的新列,您只需转到 数据 -> 数据集,单击架构已更改的数据集旁边的编辑图标,然后从 选项卡中点击 从源同步列。在后台,新列将被合并。之后,您可能希望重新编辑表以配置“列”选项卡,选中相应的框并再次保存。

我可以使用哪个数据库引擎作为 Superset 的后端?

澄清一下,数据库后端是 Superset 用来存储其内部信息(如用户列表和仪表板定义)的 OLTP 数据库。虽然 Superset 支持多种数据库作为数据,但只有少数数据库引擎支持用作 OLTP 后端/元数据存储。

Superset 使用 MySQL、PostgreSQL 和 SQLite 后端进行测试。建议您将 Superset 安装在这些数据库服务器之一上以用于生产。在其他 OLTP 数据库上安装可能有效但未经测试。据报道,Microsoft SQL Server 能用作 Superset 后端。列式存储、非 OLTP 数据库不适用于此类工作负载。

如何配置 OAuth 认证和授权?

您可以查看此 Flask-AppBuilder 配置示例

有没有办法强制仪表板使用特定的颜色?

通过使用 label_colors 键在 JSON 元数据属性中提供标签到颜色的映射,可以为每个仪表板实现此目的。您可以使用完整的十六进制颜色、命名颜色(如 redcorallightblue),或当前调色板中的索引(0 代表第一种颜色,1 代表第二种颜色等)。示例:

{
"label_colors": {
"foo": "#FF69B4",
"bar": "lightblue",
"baz": 0
}
}

Superset 是否支持 [在此插入数据库引擎]?

连接到数据库部分提供了受支持数据库的最佳概览。未在该页面列出的数据库引擎也可能有效。我们依靠社区为该知识库做出贡献。

为了通过 SQLAlchemy 连接器在 Superset 中支持某个数据库引擎,它需要有一个符合 Python 的 SQLAlchemy 方言以及一个已定义的 DBAPI 驱动程序。对 SQL 支持有限的数据库也可能有效。例如,即使 Druid 不支持连接和子查询,也可以通过 SQLAlchemy 连接器连接到 Druid。支持数据库的另一个关键要素是通过 Superset 数据库引擎规范接口。此接口允许定义超出 SQLAlchemy 和 DBAPI 范围的数据库特定配置和逻辑。这包括以下功能:

  • 与日期相关的 SQL 函数,允许 Superset 在运行时间序列查询时获取不同的时间粒度
  • 引擎是否支持子查询。如果为 false,Superset 可能会运行两阶段查询以弥补此限制
  • 处理日志和推断查询完成百分比的方法
  • 如果驱动程序不是标准 DBAPI,如何处理游标和连接的技术细节

除了 SQLAlchemy 连接器之外,还可以(尽管更复杂)扩展 Superset 并编写自己的连接器。目前唯一的例子是 Druid 连接器,由于 Druid 不断增长的 SQL 支持以及最近 DBAPI 和 SQLAlchemy 驱动程序的可用性,它正在被取代。如果您正在考虑集成的数据库具有任何类型的 SQL 支持,那么走 SQLAlchemy 路线可能更可取。请注意,要实现原生连接器,数据库需要支持运行 OLAP 类型查询,并且应该能够执行基本 SQL 中的典型操作

  • 聚合数据
  • 应用过滤器
  • 应用 HAVING 类型过滤器
  • 具有模式感知能力,暴露列和类型

Superset 是否提供公共 API?

是的,有一个公共 REST API,并且该 API 的形式正在稳步扩展。您可以在此处阅读有关此 API 的更多信息并使用 Swagger 与其交互。

/api/v1 下的端点集合的最初愿景最初是在SIP-17 中指定的,并且已经不断取得进展以涵盖越来越多的用例。

可用的 API 使用 Swagger 文档化,通过在 superset_config.py 中启用以下标志,文档可以在 /swagger/v1 下提供

FAB_API_SWAGGER_UI = True

还有其他未文档化 [私有] 的以编程方式与 Superset 交互的方法,它们不提供任何保证,也不推荐使用,但可能暂时符合您的用例

  • 直接使用 ORM (SQLAlchemy)
  • 使用内部 FAB ModelView API(将在 Superset 中弃用)
  • 修改您分支中的源代码

如何查看使用情况统计信息(例如,每月活跃用户)?

此功能未包含在 Superset 中,但您可以提取和分析 Superset 的应用程序元数据以查看发生了哪些操作。默认情况下,用户活动记录在 Superset 元数据数据库的 logs 表中。一家公司发布了一篇关于他们如何分析 Superset 使用情况(包括示例查询)的文章。

数据集编辑视图中的“小时偏移”有什么作用?

在“编辑数据集”视图中,您可以指定一个时间偏移。此字段允许您配置要添加到或从时间列中减去的小时数。例如,这可以用于将 UTC 时间转换为本地时间。

Superset 是否收集任何遥测数据?

Superset 默认使用 Scarf 在安装和/或运行 Superset 时收集基本的遥测数据。这些数据有助于 Superset 的维护者更好地了解正在使用哪些版本的 Superset,以便优先发布补丁/次要版本和安全修复。我们使用 Scarf Gateway 放置在容器注册表前面,使用 scarf-js 包跟踪 npm 安装,并使用 Scarf 像素收集 Superset 页面浏览的匿名分析。Scarf 清除 PII 并提供汇总统计数据。Superset 用户可以通过 此处此处 记录的各种方式轻松选择退出分析。Superset 维护者还可以通过将 Superset 容器(或运行 Superset/webpack 的任何地方)中的 SCARF_ANALYTICS 环境变量设置为 false 来选择退出遥测数据收集。有关 Docker 用户的额外选择退出说明可在 Docker 安装 页面上找到。

Superset 是否有档案面板或回收站,用户可以从中恢复已删除的资产?

没有。目前,无法从 UI 恢复已删除的 Superset 仪表板/图表/数据集/数据库。但是,关于实施此类功能,正在进行讨论

因此,建议定期备份元数据数据库。为了恢复,您可以启动一个 Superset 服务器的恢复实例,并附加备份的数据库副本,然后使用 Superset UI 中的“导出仪表板”按钮(或 superset export-dashboards CLI 命令)。然后,获取 .zip 文件并将其导入到当前的 Superset 实例中。

或者,您可以以编程方式定期导出资产作为备份。

我运行了 Superset 容器镜像的安全扫描,它显示了几十个“高危”和“关键”漏洞!你们能发布一个没有这些漏洞的 Superset 版本吗?

您谈论的是依赖项 CVE:Superset 使用的软件中已识别的漏洞。这些 CVE 大多数在 Linux 内核或 Python 中,两者都有许多其他人在其安全性方面工作。

我们通过定期将依赖项更新到更新版本来尽可能最好地解决这些依赖项 CVE。我们使用机器人协助完成此操作,并愉快地欢迎人类提交修复依赖项 CVE 的拉取请求。

Superset 安全团队主要关注Superset 本身的漏洞。有关过去的 Superset CVE 列表,请参阅我们的 CVE 页面