Skip to main content

FAQ

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

Superset 可以与巨大的数据库一起工作!Superset 作为底层数据库或数据引擎之上的轻量级层,所有的处理都在这些数据库或数据引擎中完成。 Superset 仅仅可视化查询的结果。

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

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

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

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

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

我能否一次连接(join) / 查询多个表?

在 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 元数据字段中将 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_config.py 中更改 Superset 存储 SQLite 数据库的位置:

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

你可以在此处了解更多关于使用配置文件自定义 Superset 的信息 这里

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

表结构会随时间演化,而 Superset 需要反映这些变化。 在仪表板的生命周期中,想要添加一个新的维度或度量是很常见的。 为了让 Superset 发现新的列,你只需前往 Data -> Datasets, 点击已更改结构的数据集旁边的编辑图标, 然后在 Columns 标签下点击 Sync columns from source。 在后台,新列会被合并。之后,你可能还需要重新编辑表以配置 Columns 标签,勾选相应的选项并再次保存。

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

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

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

如何配置 OAuth 认证和授权?

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

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

可以通过在 JSON 元数据属性中使用 label_colors 键提供标签到颜色的映射, 在每个仪表板的基础上实现这一点。

{
"label_colors": {
"Girls": "#FF69B4",
"Boys": "#ADD8E6"
}
}

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 使用情况的文章,包括示例查询

“Edit Dataset(编辑数据集)”视图中的“Hours Offset(小时偏移)”有何作用?

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

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

默认情况下,Superset 使用 Scarf 在安装和/或运行 Superset 时收集基本的遥测数据。 这些数据有助于 Superset 的维护者更好地了解哪些版本的 Superset 正在被使用,以便优先考虑补丁/次要版本发布和安全修复。 我们使用 Scarf Gateway 来位于容器注册表之前, 使用 scarf-js 包来跟踪 npm 安装, 并使用 Scarf pixel 来收集 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 实例。

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