Apache Superset开源现代化数据BI工具

Apache Superset 是一款开源的现代化数据BI工具 ,由 Airbnb 开源的"现代化的企业级 BI(商业智能) Web 应用程序",其通过创建和分享 dashboard,为数据分析提供了轻量级的数据查询和可视化方案,支持数据可视化探索、交互式仪表盘制作、SQL查询等功能,能帮助技术和非技术人员快速实现数据洞察,前端主要用到了 React 和 NVD3/D3,而后端则基于 Python 的 Flask 框架和 Pandas、SQLAlchemy 等依赖库。以下是基于 Superset 做数据BI的结构化流程与核心操作指南,兼顾部署、使用和优化。

一、 核心前提:部署与环境准备

1. 部署方式选择

部署方式 适用场景 操作难度
Docker Compose 测试/个人使用/小型团队 低(一键部署)
Kubernetes 企业级生产环境 中(需容器编排经验)
源码部署 二次开发/定制化需求 高(需Python环境)

2. 快速部署(Docker Compose 方式)

  1. 克隆官方仓库:

    bash 复制代码
    git clone https://github.com/apache/superset.git
    cd superset
  2. 启动容器:

    bash 复制代码
    docker-compose up -d
  3. 创建管理员账户:

    bash 复制代码
    docker-compose exec superset bash
    superset fab create-admin
  4. 初始化数据库:

    bash 复制代码
    superset db upgrade
    superset init
  5. 访问 UI:浏览器打开 http://localhost:8088,输入账户密码登录。

3. 连接数据源

Superset 支持主流数据库/数据仓库,核心步骤:

  1. 登录后,点击顶部 Data > Databases > + Database
  2. 选择数据源类型(如 MySQL、PostgreSQL、ClickHouse、Hive、BigQuery 等)
  3. 配置连接信息:
    • SQLAlchemy URI :格式为 数据库类型://用户名:密码@主机:端口/数据库名
      示例(MySQL):mysql+pymysql://root:123456@192.168.1.100:3306/sales_db
    • 测试连接,确认成功后保存。

二、 核心操作:从数据到可视化仪表盘

步骤1:创建数据集(Dataset)

数据集是可视化的基础,对应数据库中的表/视图/SQL查询结果。

  1. 点击 Data > Datasets > + Dataset
  2. 选择已连接的数据库,再选择目标表;或选择 Custom SQL 编写自定义查询(适合复杂数据加工)
  3. 配置字段类型:标记维度(Dimension,如时间、地区)和指标(Metric,如销售额、用户数)
  4. 保存数据集。

步骤2:制作可视化图表(Chart)

Superset 提供 50+ 图表类型(折线图、柱状图、饼图、热力图、地图等),操作流程统一:

  1. 点击 Charts > + Chart,选择数据集
  2. 选择图表类型(根据分析需求)
    • 趋势分析:折线图/面积图
    • 占比分析:饼图/环形图
    • 对比分析:柱状图/条形图
    • 地理分析:地图/气泡图
  3. 配置图表参数
    • Data 标签:选择维度(X轴/分组)、指标(Y轴/计算方式,如 sum、avg、count)
    • Customize 标签:设置标题、颜色、图例、坐标轴格式
  4. 点击 Run Query 预览效果,保存图表。

步骤3:搭建交互式仪表盘(Dashboard)

仪表盘用于整合多个图表,实现数据联动和一站式洞察。

  1. 点击 Dashboards > + Dashboard,输入名称并保存
  2. 进入仪表盘编辑模式,点击 + Add Chart,选择已创建的图表添加
  3. 布局调整:拖拽图表调整大小和位置
  4. 配置交互功能(核心亮点)
    • 过滤器(Filter):添加时间、地区等过滤器,实现多图表联动筛选
    • 图表联动:设置钻取功能(如点击"全国销售额"下钻到"省份销售额")
    • 刷新策略:设置自动刷新时间(如5分钟/次)
  5. 保存仪表盘,分享给团队(支持权限控制)。

三、 进阶技巧:提升BI分析效率

1. 自定义指标与计算字段

  • 在数据集编辑页,点击 + Add Metric 自定义指标,例如:

    sql 复制代码
    SUM(CASE WHEN status = 'paid' THEN amount ELSE 0 END) AS 已支付销售额
  • 支持窗口函数、聚合函数,满足复杂计算需求。

2. 权限管控(企业级必备)

  • 基于 RBAC(角色权限控制):创建角色(如管理员、分析师、只读用户)
  • 精细控制:限制用户对特定数据库、数据集、仪表盘的访问权限。

3. 性能优化

  • 对大表创建物化视图,减少查询耗时
  • 开启 缓存:在配置文件中设置 Redis 缓存,缓存查询结果
  • 优化 SQL 查询:避免 select *,添加合理索引

4. 集成与扩展

  • API 集成:通过 Superset REST API 实现自动化报表推送
  • 自定义插件:开发自定义图表类型(基于 React)
  • 告警功能:结合外部工具(如 AlertManager)实现指标异常告警

四、连接数据源准备工作

  1. 确保 Superset 服务正常运行(如 Docker 环境访问 http://localhost:8088),使用管理员账户登录。
  2. 提前准备目标数据库信息:地址、端口、用户名、密码、数据库名(Schema),并确保网络连通、账户有查询权限。
  3. 安装对应数据库驱动(Docker 部署通常已预装主流驱动,源码部署需手动安装,如 pip install mysqlclient)。

五、核心步骤:连接数据库(数据源)

  1. 进入数据库配置页:点击顶部 Data > Databases > + Database(或右上角"+"→Data→Connect Database)。
  2. 选择数据库类型:在"Supported Databases"中选择目标类型(如 MySQL、PostgreSQL、ClickHouse 等)。
  3. 配置连接信息(关键)
    • Display Name:自定义数据源名称(如"MySQL-销售库")。

    • SQLAlchemy URI :核心连接串,格式为 数据库类型://用户名:密码@主机:端口/数据库名,示例如下:

      数据库 连接串示例
      MySQL mysql+pymysql://root:123456@192.168.1.100:3306/sales_db
      PostgreSQL postgresql://user:pass@localhost:5432/analytics
      ClickHouse clickhouse+connect://user:pass@host:8123/default
      Doris doris://user:pass@host:9030/catalog.db
    • 高级配置(可选):开启 SSL 加密、设置连接超时、添加额外参数(如 ?charset=utf8mb4)。

  4. 测试并保存:点击 Test Connection ,提示"Connection successful"后,点击 Save 完成数据库连接。

六、关键后续:注册数据集(Dataset)

数据库连接后,需将表/视图注册为数据集,才能用于图表制作:

  1. 进入数据集页:点击 Data > Datasets > + Dataset
  2. 选择数据对象:依次选择已连接的数据库、Schema、目标表(或自定义 SQL 查询)。
  3. 配置字段属性:
    • 标记维度(Dimension,如时间、地区)和指标(Metric,如销售额 sum(amount))。
    • 设置时间列(用于时间筛选)、字段类型(字符串/数值/日期)。
  4. 保存数据集:点击 Add 完成注册,数据集将显示在列表中,可用于后续图表制作。

Superset 可视化图表集成到企业管理系统

核心是通过 嵌入(Embedding)API 调用 实现,无需让用户单独登录 Superset。以下是 3种主流集成方案,按实现难度和灵活性排序,附详细操作步骤。

方案1:官方嵌入式集成(推荐,企业级首选)

Superset 支持 认证代理(Auth Proxy)嵌入式令牌(Embed Token) 两种嵌入式方案,可直接将仪表盘/图表嵌入到企业系统页面中,保留交互功能(如筛选、下钻)。

核心前提

  1. Superset 需配置为 允许嵌入 (修改配置文件 superset_config.py)。
  2. 企业管理系统与 Superset 需在同一域名或配置 CORS 跨域。

步骤1:开启 Superset 嵌入功能

修改 superset_config.py,添加以下配置:

python 复制代码
# 允许嵌入式访问
ENABLE_EMBEDDING = True
# 允许的嵌入来源(企业管理系统域名,* 为测试环境)
EMBEDDED_SUPERSET_DOMAINS = ["https://your-enterprise-system.com"]
# 使用令牌认证(推荐)
EMBEDDING_SECRET_KEY = "your-secret-key"  # 自定义强密钥

重启 Superset 服务使配置生效。

步骤2:生成嵌入令牌(两种方式)

方式A:手动生成(测试用)
  1. 进入 Superset 仪表盘页面,点击右上角 ... > Embed Dashboard
  2. 设置权限(如允许筛选、隐藏导航栏),生成 嵌入链接嵌入代码
    • 嵌入链接示例:https://superset.your.com/embed/dashboard/abc123?token=xxx

    • 嵌入代码示例(iframe):

      html 复制代码
      <iframe 
        src="https://superset.your.com/embed/dashboard/abc123?token=xxx"
        width="100%" 
        height="800px" 
        frameborder="0"
      ></iframe>
方式B:API 生成(生产用,动态授权)

通过 Superset REST API 生成令牌,适合根据企业系统用户权限动态返回图表。

  1. 获取 Superset 管理员 Token:

    bash 复制代码
    curl -X POST "https://superset.your.com/api/v1/security/login" \
    -H "Content-Type: application/json" \
    -d '{"username":"admin","password":"your-pass","provider":"db"}'
  2. 调用嵌入令牌生成接口:

    bash 复制代码
    curl -X POST "https://superset.your.com/api/v1/security/guest_token/" \
    -H "Authorization: Bearer {admin-token}" \
    -H "Content-Type: application/json" \
    -d '{
      "user": {"username": "enterprise-user-01"},
      "resources": [{"type": "dashboard", "id": 1}],  # 仪表盘ID
      "rls": []  # 可选,行级权限过滤
    }'
  3. 接口返回 guest_token,拼接成 iframe 链接嵌入企业系统。

步骤3:在企业管理系统中嵌入

直接将 iframe 代码插入到企业系统的页面模板中,示例(Java 后端 Thymeleaf 模板):

html 复制代码
<div class="dashboard-container">
  <h3>销售数据仪表盘</h3>
  <iframe 
    th:src="@{https://superset.your.com/embed/dashboard/abc123?token=${guestToken}}"
    width="100%" 
    height="900px"
    style="border:none;"
  ></iframe>
</div>

方案优势与局限

优势 局限
保留 Superset 全部交互功能 需要配置跨域,部署复杂度中等
支持权限控制和行级过滤 嵌入页面样式需与企业系统适配

方案2:API 调用 + 前端渲染(高度自定义)

如果需要将 Superset 图表数据与企业系统前端组件深度融合(如自定义样式、联动业务数据),可通过 Superset API 获取图表数据,再用前端框架(Vue/React)渲染。

步骤1:获取图表数据 API

  1. 找到目标图表的 chart_id (Superset 图表页面 URL 中 chart/123123 即为 ID)。

  2. 调用数据查询接口:

    bash 复制代码
    curl -X POST "https://superset.your.com/api/v1/chart/data" \
    -H "Authorization: Bearer {admin-token}" \
    -H "Content-Type: application/json" \
    -d '{
      "chart_id": 123,
      "form_data": {  # 图表查询参数,可自定义筛选条件
        "granularity": "month",
        "time_range": "Last 6 Months"
      }
    }'
  3. 接口返回 JSON 格式数据,包含 columns(字段名)和 data(数据行)。

步骤2:前端渲染数据

以 React + ECharts 为例,将 API 数据渲染为图表:

jsx 复制代码
import React, { useEffect, useState } from 'react';
import * as echarts from 'echarts';

const SalesChart = () => {
  const [chartData, setChartData] = useState(null);

  useEffect(() => {
    // 调用 Superset API 获取数据
    fetch('https://superset.your.com/api/v1/chart/data', {
      method: 'POST',
      headers: {
        'Authorization': 'Bearer ' + localStorage.getItem('superset-token'),
        'Content-Type': 'application/json'
      },
      body: JSON.stringify({ chart_id: 123, form_data: {...} })
    })
    .then(res => res.json())
    .then(data => setChartData(data));
  }, []);

  useEffect(() => {
    if (!chartData) return;
    // 用 ECharts 渲染
    const myChart = echarts.init(document.getElementById('sales-chart'));
    myChart.setOption({
      xAxis: { type: 'category', data: chartData.data.map(d => d.month) },
      yAxis: { type: 'value' },
      series: [{ data: chartData.data.map(d => d.sales), type: 'bar' }]
    });
  }, [chartData]);

  return <div id="sales-chart" style={{ width: '100%', height: '400px' }}></div>;
};

export default SalesChart;

方案优势与局限

优势 局限
完全自定义样式,与企业系统无缝融合 失去 Superset 原生交互功能(需自行开发)
支持与业务数据联动 需前端开发成本,API 调用需处理鉴权

方案3:静态图片导出(简单无交互)

适合只需要展示图表快照、无需交互的场景(如企业报表 PDF、邮件推送)。

步骤1:导出 Superset 图表为图片

  1. 进入图表页面,点击右上角 ... > Export > Export as PNG,手动下载图片。

  2. 或通过 API 批量导出:

    bash 复制代码
    curl -X GET "https://superset.your.com/api/v1/chart/123/export/png" \
    -H "Authorization: Bearer {admin-token}" \
    -o "sales-chart.png"

步骤2:集成到企业系统

将图片上传到企业系统的文件服务器,在页面中通过 <img> 标签引用:

html 复制代码
<img src="/static/images/sales-chart.png" alt="销售趋势图" class="report-img">

方案优势与局限

优势 局限
实现最简单,无跨域/鉴权问题 无交互功能,数据需手动/定时更新
兼容性好,支持所有前端框架 不适合实时数据展示

关键注意事项(企业级部署)

  1. 权限管控

    • 生产环境禁止使用 EMBEDDED_SUPERSET_DOMAINS = ["*"],需指定企业系统域名。
    • 通过 行级安全(RLS) 控制用户只能查看权限内数据(如部门、区域数据)。
  2. 性能优化

    • 开启 Superset 缓存,减少重复查询。
    • 嵌入式方案建议使用 CDN 加速 Superset 静态资源。
  3. 安全防护

    • 嵌入令牌需设置 过期时间,避免长期有效。
    • 企业系统与 Superset 之间的通信建议使用 HTTPS 加密。

相关推荐
SelectDB技术团队2 小时前
AI 能力揭秘(五):Apache Doris 原生向量检索的设计及实现
人工智能·apache
Apache IoTDB2 小时前
Apache IoTDB V2.0.6/V1.3.6 发布|新增查询写回功能,优化查询与同步性能
apache·iotdb
徐小夕@趣谈前端2 小时前
【推荐】jitword协同文档新增AI公文助手,一键生成红头文件
vue.js·人工智能·开源·编辑器·github
优选资源分享3 小时前
开源免费 Linux 服务器管理工具 Server Box v1.0.1297
linux·服务器·开源
信创天地12 小时前
信创场景软件兼容性测试实战:适配国产软硬件生态,破解运行故障难题
人工智能·开源·dubbo·运维开发·risc-v
DarrenPig12 小时前
【常州工NEC】ROBOCON小白入门之路(二)2026CURC-NEC赛季规划
开源·github·交流·robocon
有毒的教程18 小时前
SaltStack 开源自动化运维工具详细介绍
运维·开源·saltstack
CoderJia程序员甲20 小时前
GitHub 热榜项目 - 日榜(2026-01-20)
开源·大模型·llm·github·ai教程
OpenCSG1 天前
兼顾开源创新与数据安全:CSGHub 为企业 AI 选型提供最优解
人工智能·开源