Skip to main content
Edit this page on GitHub

常见问题解答

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

Superset 可以处理甚至巨大的数据库!Superset 作为你底层数据库或数据引擎之上的一个薄层,所有处理工作都由这些底层系统完成。Superset 只是将查询结果可视化。

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

运行 Superset 需要什么样的计算规格?

你的 Superset 安装所需的规格取决于你有多少用户以及他们的活动情况,而不是数据的大小。社区中的 Superset 管理员报告称,8GB RAM 和 2vCPU 足以运行一个中等规模的实例。如果要开发 Superset,例如编译代码或构建镜像,你可能需要更多的资源。

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

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

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

在 Explore 或 Visualization UI 中不行。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 Gateway Time-out),你可能位于网关或代理服务器(如 Nginx)之后。如果这些 Web 服务器没有及时从 Superset 服务器(正在处理长时间查询)收到响应,它们会直接向客户端发送 504 状态码。Superset 有一个客户端超时限制来解决这个问题。如果查询在客户端超时(默认 60 秒)内没有返回,Superset 会显示警告信息以避免网关超时消息。如果你有更长的网关超时限制,可以在 superset_config.py 中更改超时设置:

SUPERSET_WEBSERVER_TIMEOUT = 60

为什么在地理空间可视化中地图不可见?

你需要在 Mapbox.com 注册一个免费账户,获取 API 密钥,并将其添加到 .env 文件中的 MAPBOX_API_KEY 键:

MAPBOX_API_KEY = "longstringofalphanumer1c"

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

默认情况下,仪表板定时刷新功能允许你根据设定的时间表自动重新查询仪表板上的每个切片。然而,有时你并不希望所有切片都被刷新——尤其是当某些数据变化缓慢或运行繁重查询时。要排除特定切片从定时刷新过程中,请在仪表板的 JSON 元数据字段中添加 timed_refresh_immune_slices 键:

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

在上面的示例中,如果为仪表板设置了定时刷新,那么除了 324 以外的所有切片将按照计划自动重新查询。 切片刷新也将在指定的时间段内错开。你可以通过将 stagger_refresh 设置为 false 来关闭这种错开,并通过在 JSON Metadata 字段中将 stagger_time 设置为以毫秒为单位的值来修改错开时间段:

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

在这里,如果开启了周期性刷新,整个仪表板将一次性刷新。2.5 秒的错开时间将被忽略。

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

默认情况下,Superset 会在 ~/.superset/superset.db 创建并使用一个 SQLite 数据库。由于 NFS 上的文件锁定实现存在问题,SQLite 在 NFS 上使用时表现不佳

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

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

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

你可以在这里阅读更多关于使用配置文件自定义 Superset 的信息:配置 Superset

如果表结构发生了变化怎么办?

表结构会演变,Superset 需要反映这一点。在仪表板的生命周期中,添加新的维度或指标是很常见的。要让 Superset 发现你的新列,你只需前往 数据 -> 数据集,点击结构已更改的数据集旁边的编辑图标,然后在 标签页中点击 从源同步列。在幕后,新列将被合并。之后,你可能需要重新编辑表格以配置列标签页,勾选适当的复选框并再次保存。

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

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

Superset 使用 MySQL、PostgreSQL 和 SQLite 后端进行了测试。建议你在生产环境中将 Superset 安装在这些数据库服务器之一上。在其他 OLTP 数据库上的安装可能有效,但未经过测试。据报道,Microsoft SQL Server 不能作为 Superset 的后端。列存储、非 OLTP 数据库不适合这种类型的工作负载。

如何配置 OAuth 认证和授权?

你可以查看这个 Flask-AppBuilder 的配置示例

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

可以通过在 JSON Metadata 属性中使用 label_colors 键提供标签到颜色的映射来实现,每个仪表板都可以这样做。你可以使用完整的十六进制颜色、命名颜色(如 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仪表板/图表/数据集/数据库。然而,关于实现此功能的讨论正在进行中。

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

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