跳到主内容

常见问题

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

Superset 甚至可以处理超大型数据库!Superset 充当底层数据库或数据引擎的薄层,所有处理都在底层完成。Superset 只是简单地将查询结果可视化。

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

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

您的 Superset 安装规格取决于您有多少用户以及他们的活动量,而不是您的数据大小。社区中的 Superset 管理员报告称,8GB 内存和 2 个虚拟 CPU 足以运行一个中等规模的实例。要开发 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 网关超时),您可能位于网关或代理服务器(如 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 秒的错开时间将被忽略。

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

默认情况下,Superset 会在 `~/.superset/superset.db` 创建并使用一个 SQLite 数据库。由于 NFS 上文件锁定实现存在问题,SQLite 在 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 配置示例

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

可以在每个仪表板的基础上实现,通过在 JSON 元数据属性中使用 `label_colors` 键提供标签到颜色的映射。您可以使用完整的十六进制颜色、命名颜色(如 `red`、`coral` 或 `lightblue`),或者当前调色板中的索引(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 在运行时间序列查询时获取不同的时间粒度
  • 引擎是否支持子查询。如果为否,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 实例中。

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