常见问题解答
Superset 可以处理多大的数据集?
Superset 甚至可以处理巨型数据库!Superset 作为底层数据库或数据引擎之上的一个薄层,所有处理都在底层进行。Superset 只是将查询结果可视化。
在 Superset 中实现可接受的性能的关键在于您的数据库是否能够以用户可以接受的速度执行查询并返回结果。如果您在 Superset 中遇到性能缓慢的问题,请对您的数据仓库进行基准测试和调优。
运行 Superset 需要哪些计算规格?
您 Superset 安装的规格取决于您有多少用户以及他们的活动,而不是您的数据大小。社区中的 Superset 管理员报告称,8GB 内存,2 个 vCPU 足以运行中等规模的实例。要开发 Superset,例如编译代码或构建镜像,您可能需要更大的算力。
监控您的资源使用情况,并在需要时增加或减少。请注意,Superset 使用率往往会发生峰值,例如,如果所有参会者都在会议中同时加载相同的仪表板。
Superset 的应用程序元数据不需要非常大的数据库来存储它,尽管日志文件会随着时间的推移而增长。
我可以一次性连接/查询多个表吗?
在探索或可视化 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 来关闭此分散,并通过将 stagger_time
设置为 JSON 元数据字段中的毫秒值来修改分散时间段
{
"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 发现您的新列,您只需转到 数据 -> 数据集,单击模式已更改的数据集旁边的编辑图标,然后从 列 选项卡中点击 从源同步列。在后台,新列将被合并。之后,您可能希望重新编辑表格,然后配置 列 选项卡,选中相应的复选框,并再次保存。
我可以使用什么数据库引擎作为 Superset 的后端?
为了澄清,数据库后端是一个 OLTP 数据库,Superset 使用它来存储其内部信息,例如您的用户列表和仪表板定义。虽然 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 在运行时间序列查询时获取不同的时间粒度
- 引擎是否支持子查询。如果为 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 网关 位于容器注册表前面,使用 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 实例中。
或者,您可以通过编程方式定期导出资产作为备份。