常见问题解答
Superset 可以处理多大的数据集?
Superset 甚至可以处理海量数据库!Superset 作为底层数据库或数据引擎上的一层薄层,负责所有处理。Superset 只是对查询结果进行可视化。
在 Superset 中实现可接受的性能的关键在于你的数据库是否能够以用户可以接受的速度执行查询并返回结果。如果你在使用 Superset 时遇到性能缓慢的问题,请对你的数据仓库进行基准测试和调整。
运行 Superset 需要哪些计算规格?
Superset 安装的规格取决于你的用户数量和他们的活动,而不是你的数据大小。社区中的 Superset 管理员报告称,8GB RAM、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
键提供标签到颜色的映射,以逐个仪表盘为基础实现。
{
"label_colors": {
"Girls": "#FF69B4",
"Boys": "#ADD8E6"
}
}
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 维护人员还可以通过将 SCARF_ANALYTICS
环境变量设置为 false
在 Superset 容器(或运行 Superset/webpack 的任何地方)中退出遥测数据收集。Docker 用户的其他退出说明可在 Docker 安装 页面上找到。
Superset 是否有归档面板或回收站,用户可以从中恢复已删除的资产?
否。目前,无法从 UI 中恢复已删除的 Superset 仪表板/图表/数据集/数据库。但是,有一个 正在进行的讨论 关于实施此类功能。
因此,建议定期备份元数据数据库。要进行恢复,您可以使用附加的数据库备份副本启动 Superset 服务器的恢复实例,并使用 Superset UI 中的“导出仪表盘”按钮(或 superset export-dashboards
CLI 命令)。然后,获取 .zip 文件并将其导入当前的 Superset 实例。
或者,您可以以编程方式定期导出资产作为备份。