Apache Superset 是一款现代化的企业级商业智能 Web 应用程序,专为数据探索和可视化而设计。本概述介绍了 Superset 的架构、核心组件和主要功能,以帮助开发人员了解该系统的工作原理。
What is Apache Superset?
Apache Superset 是一个开源数据探索和可视化平台,其设计理念是用户友好、功能丰富且高度可扩展。它允许用户连接到各种数据库、创建交互式可视化效果并构建仪表板,而无需编写代码,同时还为高级用户提供了强大的功能。
Superset 基于 Python Flask 后端和基于 React 的前端构建。它通过 SQLAlchemy 支持多种数据库和数据引擎,并通过基于插件的系统提供各种可视化选项。
资料来源:
- superset/config.py
Key Features 主要特点
Superset 为数据浏览和可视化提供了一套全面的功能:
- SQL Lab:用于直接查询数据库的交互式 SQL 编辑器
- Chart Builder:用于创建可视化的无代码界面
- Dashboard Builder:用于将可视化合并到交互式仪表板中的工具
- Database Connections : 支持 30+ 数据库,包括 PostgreSQL、MySQL、BigQuery、Snowflake 等常用数据库
- Security :使用基于角色的权限系统进行精细访问控制
- Caching :可配置的缓存以提高性能
- API:用于自定义和集成的编程访问
资源来源:
- superset/config.py
System Architecture 系统架构
Superset 遵循客户端-服务器架构,具有单独的前端和后端组件,通过 REST API 进行通信。
High-Level Architecture 高级架构
资源来源:
- superset/models/core.py
- superset/security/manager.py
Data Flow 数据流
下图说明了数据如何流经 Superset 系统
资料来源:
- superset/common/query_context.py
- superset/views/core.py
Core Components 核心组件
Superset 的架构由几个核心组件组成,这些组件协同工作以提供其功能:
Database Connectors and Engine Specs 数据库连接器和引擎规格
Superset 通过 SQLAlchemy 连接到各种数据库。每个受支持的数据库都有一个 EngineSpec
类,用于处理特定于数据库的功能,例如时间粒度表达式、类型映射和查询执行。
资料来源:
- superset/db_engine_specs/base.py
- superset/db_engine_specs/presto.py
- superset/db_engine_specs/hive.py
- superset/db_engine_specs/postgres.py
Data Models 数据模型
Superset 中表示系统中不同实体的核心数据模型:
Model | 描述 |
Database | 表示数据库连接 |
SqlaTable | 表示数据集/表 |
TableColumn | 数据集中的列 |
SqlMetric | 数据集上定义的指标 |
Slice | 单独的图表/可视化 |
Dashboard | 图表集合 |
User | 超集用户 |
Role | 安全角色 |
资料来源:
- superset/models/core.py
- superset/connectors/sqla/models.py
- superset/security/manager.py
Visualization System 可视化系统
Superset 使用基于插件的可视化系统,该系统支持多种图表类型
资料来源:
- superset/viz.py
- superset/common/query_object.py
- superset/common/query_context.py
Security Model 安全模型
Superset 基于 Flask-AppBuilder 实现了一个健壮的安全模型:
资料来源:
- superset/security/manager.py
- superset/views/base.py
Configuration and Deployment 配置和部署
可以通过 superset_config.py
中的各种设置来配置 Superset。主配置文件 superset/config.py 包含所有可以覆盖的默认设置。
Deployment Options 部署选项
Superset 可以通过多种方式进行部署:
部署方式 | 描述 |
Docker | 使用官方 Docker 镜像 |
Docker Compose | 使用 Docker Compose 设置多容器 |
Kubernetes | 使用 Helm 图表进行 Kubernetes 部署 |
手动安装 | 从 PyPI 使用 pip |
Feature Flags 功能标志
Superset 使用功能标志来启用或禁用某些功能。这些可以在 superset_config.py
中配置:
FEATURE_FLAGS = {"DRILL_BY": True,"DASHBOARD_VIRTUALIZATION": True,"EMBEDDABLE_CHARTS": True,"SQL_VALIDATORS_BY_ENGINE": True
}
资料来源:
- superset/config.py
- RESOURCES/FEATURE_FLAGS.md
Extensibility 可扩展性
Superset 的设计使其可以通过多种方式进行扩展
- Database Support:通过创建自定义引擎规范添加对新数据库的支持
- Visualizations:创建自定义可视化插件
- Authentication:与自定义身份验证系统集成
- API Integration:使用 Superset 的 REST API 与其他系统集成
资料来源:
- superset/db_engine_specs/base.py
- superset/views/base.py
Getting Started 入门
对于希望贡献或定制 Superset 的开发人员,代码库的组织方式如下
superset/
——Superset 后端代码
-- superset/views/
——Flask 视图和 API 端点
-- superset/models/
——SQLAlchemy 模型
-- superset/db_engine_specs/
——数据库引擎规范
-- superset/connectors/
——数据库连接器
-- superset/security/
——安全和身份验证
superset-frontend/
- React 前端代码
-- superset-frontend/src/
- 源代码
-- superset-frontend/plugins/
- 可视化插件
资料来源:
- README.md
- superset/initialization/init.py
待更新目录
编号 | 标题 | 描述 |
1 | Superset二次开发之深度解读系列:1.概述 | 本概述介绍了 Superset 的架构、核心组件和主要功能,以帮助开发人员了解该系统的工作原理 |
2 | Superset二次开发之深度解读系列:2.架构 | 全面概述 Apache Superset 的架构,解释不同组件之间的交互方式。涵盖整体系统设计、前后端组件之间的关系、数据流和安全模型。 |
3 | Superset二次开发之深度解读系列:2.1【架构】前端架构 | 详细概述 Apache Superset 的前端架构,包括其关键组件、状态管理模式以及数据在系统中的流动方式。 解释 React 组件的组织结构、Redux 状态管理以及前端不同部分之间的交互 |
4 | Superset二次开发之深度解读系列:2.2【架构】后端架构 | 介绍 Apache Superset 的后端架构,介绍核心组件、组件之间的交互以及数据在系统中的流动方式。 |
5 | Superset二次开发之深度解读系列:2.3【架构】安全模型 | 介绍 Apache Superset 的安全模型,涵盖身份验证、授权和数据访问控制机制。 解释 Superset 如何实现不同级别的安全性,从用户身份验证到行级安全过滤。 |
6 | Superset二次开发之深度解读系列:2.4【架构】数据流 | 描述数据在 Apache Superset 中的流动方式,从数据库连接、查询处理到可视化渲染。 提供所涉及的关键组件的技术概述,以及它们如何相互交互,将数据从外部源移动到面向用户的可视化效果。 |
7 | Superset二次开发之深度解读系列:3.前端系统 | 概述 Apache Superset 中的前端架构和组件系统。 涵盖核心 UI 组件、选择组件以及它们之间的交互模式 |
8 | Superset二次开发之深度解读系列:3.1【前端系统】核心UI组件 | 记录 Apache Superset 前端中的核心可重用 UI 组件。 这些组件构成了 Superset 用户界面的基础,并在整个应用程序中广泛使用 |
9 | Superset二次开发之深度解读系列:3.2【前端系统】仪表盘组件 | 记录 Apache Superset 中构成仪表板界面的核心组件。 重点介绍仪表板构建器、布局系统以及允许用户与仪表板交互的过滤机制 |
10 | Superset二次开发之深度解读系列:3.3【前端系统】筛选器系统 | 筛选器系统为仪表板提供交互式过滤功能,允许用户通过在多个图表上应用约束来动态探索数据 |
11 | Superset二次开发之深度解读系列:3.4【前端系统】SQL Lab | 交互式 SQL 查询工具,允许用户编写和执行 SQL 查询、可视化结果、保存和共享查询以及探索数据库模式 |
12 | Superset二次开发之深度解读系列:4.后端系统 | 后端系统,包括关键组件、架构以及各个部分之间的交互方式。涵盖支持 Superset 功能的服务器端组件,从数据库连接到查询处理和安全性等各个方面 |
13 | Superset二次开发之深度解读系列:4.1【后端系统】配置系统 | 提供一种灵活且分层的方法来配置 Apache Superset 应用程序。介绍 Superset 中的配置工作原理,包括默认设置、如何覆盖它们、功能开关以及关键配置类别 |
14 | Superset二次开发之深度解读系列:4.2【后端系统】数据库连接 | 解释 Apache Superset 如何连接到各种数据库,详细介绍允许 Superset 与各种数据库系统交互的架构、连接机制和特定引擎的实现。 |
15 | Superset二次开发之深度解读系列:4.3【后端系统】SQL处理和执行 | SQL 查询的解析、转换和执行方式 |
16 | Superset二次开发之深度解读系列:4.4【后端系统】REST API | 介绍其架构、核心 API 资源、常见模式以及如何以编程方式与这些端点交互。 |
17 | Superset二次开发之深度解读系列:4.5【后端系统】警报和报告 | 允许用户安排定期报告并根据数据条件配置警报。 用户可以通过电子邮件或 Slack 接收通知,其中包含屏幕截图、CSV 数据或图表和仪表板的格式化文本 |
18 | Superset二次开发之深度解读系列:5.部署 | 涵盖基于 Docker 的部署、使用 Helm 的 Kubernetes 部署,以及在不同环境中部署 Superset 时需要考虑的重要配置方面 |
19 | Superset二次开发之深度解读系列:5.1【部署】Docker 部署 | 提供有关如何使用 Docker 部署 Apache Superset 的全面指南。其中涵盖架构、部署方法、配置选项和常用操作 |
20 | Superset二次开发之深度解读系列:5.2【部署】Kubernetes 部署 | 提供使用存储库中包含的 Helm 图表在 Kubernetes 上部署 Apache Superset 的详细说明和参考 |
21 | Superset二次开发之深度解读系列:6.贡献 | 介绍如何为 Apache Superset 做出贡献。无论您是想贡献代码的开发者,还是想改进文档,亦或是想参与测试,本指南都能助您一臂之力 |