Superset 使用指南之优化数据可视化性能与扩展

1. Superset 概述

什么是 Apache Superset?

Apache Superset 是一个开源、现代化的数据可视化和数据探索平台。它通过提供直观的用户界面,使用户能够轻松创建复杂的图表和仪表板,探索海量数据,同时避免传统商业智能(BI)工具的复杂性和高成本。作为一个高度可扩展的 BI 工具,Superset 支持与多个数据源的集成,并且能够处理大规模的数据库查询,帮助用户快速从数据中提取价值。

Superset 的核心特点:
  1. 可视化图表构建器:用户可以通过拖拽界面或编写 SQL 语句轻松构建多种类型的图表,包括柱状图、折线图、饼图、热力图等。
  2. 多数据源支持:Superset 支持多种数据源,如 MySQL、PostgreSQL、Apache Druid、Apache Kylin 等,方便用户集成现有的数据基础设施。
  3. 高度可定制化的仪表板:用户可以将多个图表组合成动态仪表板,支持交互式的过滤、联动以及实时数据更新。
  4. SQL Lab:Superset 内置了一个强大的 SQL 编辑器,允许用户直接编写 SQL 查询并即时可视化查询结果,非常适合数据科学家和分析师。
  5. 用户权限管理:内置的用户权限管理系统,支持多层次的角色划分和权限控制,能够有效保障数据安全。
  6. 开源和社区驱动:作为一个 Apache 基金会项目,Superset 拥有活跃的社区支持,用户可以参与项目的开发、讨论,甚至贡献代码。
Superset 的主要应用场景:
  1. 商业智能(BI):Superset 可作为企业的 BI 平台,帮助用户快速生成业务报表和实时仪表板,支持决策和战略规划。
  2. 大数据分析:通过与大数据平台(如 Apache Kylin、Druid 等)的集成,Superset 能够处理海量数据,为用户提供亚秒级的查询响应和可视化展示。
  3. 数据探索:分析师和数据科学家可以使用 Superset 的 SQL Lab 进行数据探索和分析,从而发现潜在的业务机会或改进点。
  4. 自助式数据分析:非技术用户也可以通过简单的拖拽操作,自主完成数据的可视化和分析,减少对数据团队的依赖。
为什么选择 Superset?
  • 快速构建图表和仪表板:相比传统 BI 工具,Superset 的学习曲线更短,用户可以迅速上手创建自定义图表和仪表板。
  • 轻量级但功能强大:Superset 的架构设计轻便,但功能丰富,可以满足中小企业甚至大型企业的 BI 需求。
  • 支持多数据源集成:无论是结构化还是半结构化数据,Superset 都可以方便地与之集成,为用户提供一致的分析体验。
  • 开源且高度可扩展:作为开源工具,用户可以根据自身业务需求进行定制,开发新的可视化插件或扩展功能。

2. Superset 的核心架构

Apache Superset 通过其灵活的架构设计,能够处理多种数据源,并为用户提供强大的数据可视化和探索能力。其架构设计主要围绕几个核心组件:数据源集成、可视化引擎、安全管理、扩展能力。
在这里插入图片描述

1. 数据源集成

Superset 通过 SQLAlchemy 进行数据源集成,支持多种数据库和数据平台。无论是传统的关系型数据库(如 MySQL、PostgreSQL),还是大数据平台(如 Apache Druid、Apache Kylin),Superset 都能够轻松连接。其架构使得数据源的扩展性非常强,用户可以通过配置,快速集成新的数据源。

  • 支持的数据源

    • 关系型数据库:MySQL、PostgreSQL、SQLite、SQL Server、Oracle 等。
    • 分布式数据库和大数据平台:Apache Druid、Apache Kylin、Google BigQuery、Presto 等。
    • 数据仓库:Snowflake、Amazon Redshift、ClickHouse 等。
  • 连接配置:用户只需提供数据库连接字符串即可集成数据源,Superset 会通过 SQLAlchemy 管理与数据源的交互,处理查询、结果返回等。

2. 数据可视化引擎

Superset 的数据可视化引擎是其核心之一,支持用户通过简单的拖拽式界面或编写 SQL 查询来创建图表和仪表板。用户可以基于他们所连接的数据源,创建实时更新的动态图表,并通过交互式的方式进行数据探索。

  • 图表构建:Superset 提供多种图表类型,包括柱状图、折线图、饼图、热力图、地理地图等,用户可以根据数据特点选择适合的可视化方式。支持的图表类型基于流行的可视化库如 D3.js 和 Apache ECharts。

  • 拖拽式界面:通过可视化编辑器,用户可以选择维度、度量、聚合方式等构建图表,零代码操作即可生成业务报表。

  • SQL Lab:Superset 还提供一个强大的 SQL 编辑器,名为 SQL Lab,用户可以在其中编写自定义 SQL 查询,并通过查询结果直接生成可视化图表,非常适合数据分析师和高级用户。

3. 仪表板与互动功能

仪表板是 Superset 中最重要的可视化展示方式之一。它允许用户将多个图表组合在一起,形成动态、交互式的数据展示界面。仪表板中的图表可以互相联动,用户可以通过过滤器和交互操作,从不同的角度探索数据。

  • 实时更新:Superset 支持定时刷新和实时数据更新,使得仪表板上的数据始终保持最新状态,非常适合实时监控和业务报告。

  • 联动过滤:用户可以通过设置联动过滤器,使仪表板中的所有图表都响应某个特定的过滤条件。例如,在地理地图上选择某个地区,所有相关图表都会自动更新显示该地区的数据。

  • 嵌入与分享:用户可以将生成的仪表板嵌入到外部系统中,或通过分享链接将仪表板分发给其他团队成员,便于协作和分享数据洞察。

4. 安全与权限管理

Superset 内置了一个强大的权限管理系统,支持对不同用户角色设置细粒度的权限控制。企业可以根据不同团队的需求,分配相应的访问权限,保障数据的安全性。

  • 用户与角色管理:Superset 支持基于角色的访问控制(RBAC),可以为不同用户或用户组分配不同的权限。例如,某些用户只能查看特定的仪表板,而其他用户则可以编辑或创建新的图表。

  • 数据级权限控制:除了仪表板和图表的权限控制,Superset 还允许对数据源进行权限控制,确保不同角色的用户只能访问其有权查看的数据集。

5. 扩展与定制能力

Superset 的架构是高度模块化和可扩展的。用户可以根据需求开发自定义插件,扩展现有功能或增加新的数据可视化方式。同时,Superset 的 API 也为与其他系统集成提供了便利。

  • 插件系统:通过开发插件,用户可以添加新的图表类型、数据源支持或其他自定义功能。插件开发的灵活性使得 Superset 能够适应各种业务需求。

  • API 支持:Superset 提供 REST API,允许用户通过编程方式与系统交互。这使得 Superset 能够轻松集成到现有的工作流程或自动化分析流程中,支持自动化数据可视化和报告生成。

6. 缓存与查询性能优化

为了在处理大规模数据时仍保持高性能,Superset 提供了多种缓存和优化机制。通过缓存策略,用户可以避免频繁的重复查询,提高系统响应速度。

  • 查询缓存:Superset 支持对查询结果进行缓存,以避免重复查询带来的性能开销。用户可以配置缓存策略,决定缓存的存储时间和失效机制。

  • 异步查询与任务调度:对于复杂和耗时的查询,Superset 提供了异步查询模式,允许用户在后台执行查询任务,防止前端页面的卡顿。

3. Superset 的安装和配置

Apache Superset 是一个开源项目,它可以在本地环境或云服务器上进行安装和配置。安装过程涉及依赖的准备、Superset 的安装、数据源的连接以及一些关键的配置优化。

1. 环境准备

Superset 可以运行在多种操作系统上,但最常见的部署环境是 Linux。为了确保顺利安装,需要提前准备以下依赖:

  • Python 3.8+:Superset 依赖于 Python,因此首先要确保系统中安装了正确版本的 Python。
  • Node.js 和 npm:用于前端构建和资源管理。
  • A database (MySQL, PostgreSQL, SQLite):用于存储 Superset 的元数据(例如用户信息、仪表板配置等)。生产环境下推荐使用 MySQL 或 PostgreSQL。
检查环境是否满足要求:
python3 --version  # 确保 Python 版本为 3.8 及以上
node --version     # 确保 Node.js 已正确安装
npm --version      # 确保 npm 已正确安装
2. Superset 的安装步骤

Superset 可以通过 Python 的 pip 包管理工具进行安装,以下是详细的安装步骤:

步骤 1:创建虚拟环境(可选,但推荐)

为了隔离项目环境,建议使用 venv 创建 Python 虚拟环境:

python3 -m venv venv
source venv/bin/activate  # 激活虚拟环境
步骤 2:安装 Superset

使用 pip 安装 Superset 以及其相关依赖:

pip install apache-superset
步骤 3:初始化数据库

Superset 需要一个数据库来存储配置信息和用户数据。运行以下命令来初始化数据库:

superset db upgrade
步骤 4:创建管理员账户

创建一个管理用户,以便后续登录 Superset 的 Web 界面:

export FLASK_APP=superset
superset fab create-admin

在提示中输入管理员用户名、密码和电子邮件。

步骤 5:初始化角色和权限

Superset 需要配置默认的角色和权限,执行以下命令来完成初始化:

superset init
步骤 6:启动 Superset

现在,Superset 已经成功安装并初始化,可以通过以下命令启动:

superset run -p 8088 --with-threads --reload --debugger

默认情况下,Superset 将在 http://localhost:8088 启动服务,用户可以通过浏览器访问该地址。

3. 连接数据源

一旦 Superset 启动,用户可以通过 Web 界面将各种数据源连接到 Superset 中。以下是添加数据源的步骤:

步骤 1:登录 Superset

使用之前创建的管理员账户登录 Superset 的 Web 界面。

步骤 2:配置数据库连接
  • 在左侧导航栏中,选择 Data > Databases,然后点击右上角的 + Database 按钮。
  • 输入数据库的连接 URI。例如,连接到 MySQL 的 URI 格式为:
    mysql://username:password@hostname:port/database
    
  • 点击 Test Connection 以验证连接是否成功。
  • 成功后,点击 Save 保存配置。
支持的数据源:

Superset 支持连接到多种类型的数据库,常见的数据源包括:

  • MySQL
  • PostgreSQL
  • Apache Druid
  • Google BigQuery
  • Amazon Redshift
  • ClickHouse
  • Apache Kylin
4. 关键配置项

为了保证 Superset 的高效运行,生产环境下需要配置一些关键参数,以提升系统性能和稳定性。

配置项 1:配置数据库元数据

确保使用一个性能稳定的数据库(如 PostgreSQL 或 MySQL)作为 Superset 的元数据存储。将以下配置项添加到 superset_config.py 文件中,以设置数据库元数据连接:

SQLALCHEMY_DATABASE_URI = 'postgresql://username:password@localhost/superset'
配置项 2:配置缓存

Superset 支持对查询结果进行缓存,以提高重复查询的响应速度。推荐配置 Redis 作为缓存后端,配置示例如下:

CACHE_CONFIG = {'CACHE_TYPE': 'RedisCache','CACHE_DEFAULT_TIMEOUT': 300,'CACHE_KEY_PREFIX': 'superset_','CACHE_REDIS_HOST': 'localhost','CACHE_REDIS_PORT': 6379,'CACHE_REDIS_DB': 0,'CACHE_REDIS_URL': 'redis://localhost:6379/0',
}
配置项 3:启用异步查询

对于耗时较长的查询,Superset 支持异步查询模式。通过配置 Celery,用户可以在后台执行复杂查询,避免前端阻塞。配置 Celery 的示例如下:

from celery import Celeryclass Config:CELERY_CONFIG = {'broker_url': 'redis://localhost:6379/0','result_backend': 'redis://localhost:6379/0',}celery_app = Celery('superset')
celery_app.config_from_object(Config)
配置项 4:前端资源优化

生产环境下,Superset 的静态文件需要进行打包和压缩。运行以下命令构建前端资源:

npm install
npm run build
5. 常见安装问题与解决方法
问题 1:superset db upgrade 命令失败
  • 原因:通常是由于缺少数据库依赖。
  • 解决方法:确保安装了数据库依赖包。例如,对于 PostgreSQL,需要安装 psycopg2
    pip install psycopg2-binary
    
问题 2:连接数据库失败
  • 原因:可能是数据库 URI 格式错误或者数据库未正确启动。
  • 解决方法:检查数据库 URI 是否正确,确保数据库服务正在运行。
问题 3:页面显示空白或资源加载失败
  • 原因:可能是前端资源未正确构建。
  • 解决方法:执行 npm run build 来重新构建前端资源,确保所有静态文件都正常生成。

4. Superset 的数据可视化与仪表板

Apache Superset 的核心功能之一是强大的数据可视化和仪表板构建工具。用户可以通过简单的拖拽操作或编写 SQL 查询,快速生成各种数据图表,并将它们组合到动态仪表板中。Superset 提供了丰富的可视化组件和强大的交互功能,帮助用户从数据中快速提取关键洞察。

1. 构建图表

Superset 提供了多种数据可视化类型,涵盖了常见的业务分析场景。用户可以在 Explore 界面中选择数据源,配置图表的维度和度量,生成符合需求的图表。

支持的图表类型:
  • 柱状图(Bar Chart):用于显示数据的分类和分布情况。
  • 折线图(Line Chart):适用于展示时间序列数据和趋势分析。
  • 饼图(Pie Chart):用于展示各部分数据的占比。
  • 散点图(Scatter Plot):用于展示两个变量之间的关系。
  • 热力图(Heatmap):用于展示不同维度之间的数据密度。
  • 地理地图(Geographical Map):用于展示地理位置相关的数据分析。
图表构建步骤:
  1. 选择数据源:首先在左侧导航栏中选择数据源。
  2. 配置维度和度量:根据数据分析需求,选择维度(如时间、类别)和度量(如总销售额、平均值)进行图表配置。
  3. 图表类型选择:选择适合的数据可视化方式,例如使用柱状图分析销售数据,或使用折线图展示趋势。
  4. 应用过滤器:通过过滤器精确分析特定数据集,例如限定某一时间段或特定地区的销售情况。
实例:

假设你需要构建一个柱状图,用来展示每个月的销售额,可以通过选择 “时间” 作为维度,“销售额” 作为度量,并选择柱状图来生成图表。

SQL 查询示例

SELECT order_date, SUM(order_amount) as sales
FROM sales_data
GROUP BY order_date
2. 仪表板设计

Superset 的仪表板功能允许用户将多个图表组合到一个动态界面中,形成一个完整的业务展示面板。仪表板支持数据的实时更新和图表间的联动过滤,用户可以通过交互式操作,从不同维度分析数据。

创建仪表板的步骤:
  1. 添加图表:在创建好多个图表后,可以将它们添加到一个新的或已有的仪表板中。
  2. 布局设计:Superset 提供了拖拽式布局功能,允许用户自定义图表的排列方式。用户可以调整图表的大小、位置,创建一个符合业务需求的布局。
  3. 添加过滤器:可以添加全局或局部过滤器,让用户能够实时筛选数据。例如,在仪表板中添加时间过滤器,让用户选择特定的时间范围查看销售数据。
  4. 发布与分享:设计好的仪表板可以通过链接分享给其他团队成员,支持在不同设备上访问,并可嵌入其他系统中进行展示。
动态仪表板的功能:
  • 实时数据更新:Superset 支持数据的定时刷新或实时更新,确保仪表板上的数据始终保持最新状态,适合监控类场景。
  • 联动过滤:用户可以通过图表中的某一维度对整个仪表板进行联动过滤。例如,点击某个柱状图中的区域后,所有相关图表都会自动更新显示该区域的对应数据。
实例:

你可以将销售额的柱状图、客户分布的地理图和产品分类的饼图组合到同一个仪表板中,并通过时间过滤器筛选数据。例如,用户可以在时间过滤器中选择某一季度,图表将自动更新,展示该季度的销售情况、客户分布和产品销售占比。

3. 交互功能

Superset 的交互功能使得用户可以对图表进行实时过滤和动态调整,通过简单的点击或选择操作,深入探索数据,发现隐藏的趋势和异常情况。

交互功能包括:
  • 联动过滤:通过点击某个图表中的数据点,可以自动更新其他图表的数据展示。例如,点击某个产品类别,所有相关图表都会显示该类别的数据。
  • 下钻功能:支持通过图表下钻到更详细的数据级别。例如,点击一个国家,可以下钻查看省、市的销售数据。
  • 工具提示:在图表中,用户可以通过悬停操作查看某个数据点的详细信息,帮助理解数据背景。
实例:

假设你有一个全球销售地图和一个按国家分类的销售额柱状图。用户点击地图中的某个国家后,柱状图将自动更新,仅显示该国家的销售数据,帮助用户快速进行地理数据的分析。

4. 多样化图表的创建与配置

Superset 提供了强大的图表配置选项,用户可以灵活调整图表的样式、颜色、数据格式等,以满足业务分析的需求。你可以通过设置不同的配色方案,调整坐标轴、标题和标签格式,使图表更加直观和易于理解。

配置选项示例:
  • 坐标轴配置:可以根据数据类型调整坐标轴的单位、格式以及标签展示方式。
  • 配色方案:根据图表类型选择适合的配色方案,突出数据的差异性。
  • 数据聚合方式:支持多种聚合方式,如求和、平均值、最大值、最小值等,用户可以根据需求进行选择。
5. 使用 SQL Lab 进行数据探索

Superset 内置的 SQL Lab 工具是一个强大的 SQL 查询编辑器,允许用户直接编写 SQL 查询,并将结果可视化。这一功能适合更为复杂的数据分析任务,如自定义聚合、过滤、复杂计算等。

SQL Lab 的特点:
  • 实时查询:支持对接的数据库进行实时查询,并将结果展示为表格或图表。
  • 保存查询:用户可以保存常用的查询,方便后续重复使用。
  • 将查询结果转换为图表:用户可以直接将查询结果转换为图表,并添加到仪表板中。
实例:

通过 SQL Lab,你可以运行如下 SQL 查询,查看某类产品的销售趋势:

SELECT product_category, SUM(order_amount) as total_sales
FROM sales_data
WHERE product_category = 'Electronics'
GROUP BY product_category
ORDER BY total_sales DESC;

该查询结果可以直接转换为柱状图,并添加到仪表板中进行展示。

5. Superset 的查询与数据探索

Apache Superset 提供了强大的查询和数据探索功能,尤其是通过 SQL Lab 工具,用户可以直接与数据库交互,编写自定义 SQL 查询,进行复杂的数据分析。SQL Lab 不仅提供了实时查询的能力,还可以将查询结果立即转换为可视化图表,并进一步用于仪表板展示。

1. SQL Lab 介绍

SQL Lab 是 Superset 的核心查询工具,它允许用户编写 SQL 查询、探索数据库结构、查看实时查询结果。通过 SQL Lab,用户可以轻松地探索和分析数据,并且支持保存常用的查询模板供后续使用。

SQL Lab 的主要功能:
  • 多数据源支持:SQL Lab 可以连接到多个不同的数据源,用户可以根据需要切换不同的数据库进行查询。
  • 实时查询:通过 SQL Lab,用户可以直接运行实时查询,立即查看查询结果,确保数据分析及时性。
  • 结果可视化:查询结果可以直接转换为可视化图表,并可将其添加到仪表板中。
2. SQL Lab 的使用步骤
步骤 1:选择数据源
  • 进入 SQL Lab 界面,首先选择要查询的数据源。Superset 支持多个数据源,如 MySQL、PostgreSQL、Druid、Presto 等。
  • 在左侧的数据库列表中,用户可以浏览数据库的结构、表名、字段类型等信息,以帮助构建查询。
步骤 2:编写 SQL 查询
  • 在查询编辑器中,用户可以编写 SQL 查询,支持复杂的 SQL 聚合、过滤、排序等操作。
  • SQL Lab 支持多种 SQL 方言,能够适配不同类型的数据库。
实例:

假设你想查看过去一年中,每个季度的销售总额,可以通过以下 SQL 查询来实现:

SELECT QUARTER(order_date) AS quarter, SUM(order_amount) AS total_sales
FROM sales_data
WHERE YEAR(order_date) = 2023
GROUP BY QUARTER(order_date)
ORDER BY quarter;
步骤 3:查看查询结果
  • 运行 SQL 查询后,结果将显示在查询编辑器的下方,用户可以查看数据表格式的结果。
  • 如果查询涉及较大数据集,SQL Lab 会提供分页显示,并允许用户导出结果为 CSV 文件。
步骤 4:将查询结果转换为图表
  • 在查询结果上方,用户可以点击 Explore 按钮,将查询结果直接转为图表。选择适合的图表类型(如柱状图、折线图等),然后进入可视化界面进行进一步的定制。
  • 一旦图表完成,用户可以选择将图表保存到仪表板,或另存为独立的图表供后续使用。
3. 自定义计算与数据聚合

Superset 支持复杂的自定义计算和数据聚合,用户可以使用 SQL 查询进行详细的分析。例如,用户可以根据业务需求计算出总和、平均值、最大值、最小值等统计量,并将其可视化。

聚合查询示例:

假设你想分析不同产品类别的平均销售额,可以编写以下查询:

SELECT product_category, AVG(order_amount) AS avg_sales
FROM sales_data
GROUP BY product_category
ORDER BY avg_sales DESC;

该查询将为每个产品类别计算平均销售额,并按降序排列结果。

自定义计算示例:

用户还可以在查询中进行自定义计算,例如计算每个产品类别的总销售额和销售量,然后计算出每单位产品的平均销售额:

SELECT product_category, SUM(order_amount) AS total_sales, COUNT(order_id) AS num_orders,(SUM(order_amount) / COUNT(order_id)) AS avg_sales_per_order
FROM sales_data
GROUP BY product_category;
4. 保存和重用查询

SQL Lab 允许用户保存常用的查询,便于日后快速访问和重复使用。用户可以将已验证的查询保存到数据库,并通过查询管理界面进行分类、标签和管理。

保存查询的步骤:
  1. 在 SQL Lab 中编写好查询后,点击查询界面右上方的 Save 按钮。
  2. 在弹出的对话框中,为查询命名并选择保存位置。你还可以为查询添加描述或标签,以便日后检索。

保存的查询可以通过 Saved Queries 选项卡进行管理,用户可以查看、编辑和运行已保存的查询,甚至可以与其他用户共享这些查询。

5. 复杂查询与联合查询

SQL Lab 支持编写复杂的 SQL 查询,包括子查询、联合查询和窗口函数。用户可以利用这些功能来处理复杂的数据分析任务,发现隐藏的数据模式或趋势。

联合查询示例:

假设你想对比今年和去年每个产品类别的销售额,可以通过以下联合查询来实现:

SELECT product_category, SUM(order_amount) AS sales_2023
FROM sales_data
WHERE YEAR(order_date) = 2023
GROUP BY product_categoryUNION ALLSELECT product_category, SUM(order_amount) AS sales_2022
FROM sales_data
WHERE YEAR(order_date) = 2022
GROUP BY product_category;
子查询示例:

有时需要在主查询中嵌入子查询以进一步细化分析。以下示例展示了如何计算销售额超过特定阈值的产品类别:

SELECT product_category, SUM(order_amount) AS total_sales
FROM sales_data
WHERE product_category IN (SELECT product_categoryFROM sales_dataGROUP BY product_categoryHAVING SUM(order_amount) > 100000
)
GROUP BY product_category;
6. 导出查询结果

SQL Lab 提供了方便的数据导出功能,用户可以将查询结果导出为 CSV 文件,供外部使用或进一步分析。导出功能非常适合那些需要将数据导入其他工具(如 Excel)进行进一步操作的场景。

导出步骤:
  1. 在 SQL Lab 中运行查询,查看查询结果。
  2. 点击查询结果表格上方的 Export CSV 按钮,Superset 将自动导出结果为 CSV 文件。
7. 优化查询性能

对于大数据集或复杂查询,可能会遇到查询性能问题。SQL Lab 支持配置查询缓存,用户可以通过缓存机制来提高查询响应速度,避免频繁的重复查询。

启用查询缓存:

管理员可以在 superset_config.py 中配置缓存策略,确保重复查询可以从缓存中获取数据,从而减少查询时间。

CACHE_CONFIG = {'CACHE_TYPE': 'RedisCache','CACHE_DEFAULT_TIMEOUT': 300,'CACHE_KEY_PREFIX': 'superset_','CACHE_REDIS_HOST': 'localhost','CACHE_REDIS_PORT': 6379,'CACHE_REDIS_DB': 0,'CACHE_REDIS_URL': 'redis://localhost:6379/0',
}

Superset 的查询与数据探索功能通过 SQL Lab 提供了丰富的查询和数据分析能力,支持实时查询、复杂计算以及数据可视化。通过结合 SQL Lab 与 Superset 的可视化功能,用户能够快速从数据中获得有价值的业务洞察。如果你对某个查询功能有疑问或需要更多详细示例,欢迎随时与我交流!

6. Superset 的安全与权限管理

Apache Superset 提供了全面的安全和权限管理功能,确保用户能够安全地访问数据并保护敏感信息。通过基于角色的访问控制(RBAC),Superset 允许管理员为不同用户分配适当的权限,从而控制他们可以访问的数据源、图表和仪表板。这种灵活的权限机制非常适合企业和团队合作的环境。

1. 基于角色的访问控制(RBAC)

Superset 采用 基于角色的访问控制(RBAC)模型来管理权限。在此模型中,用户被分配到不同的角色,每个角色具有不同的权限。管理员可以根据用户的角色来控制其可以访问的数据源、查询权限、以及可执行的操作。

默认角色:

Superset 预定义了几个常见角色,供管理员在初始配置时使用:

  • Admin:拥有系统的所有权限,包括管理用户、配置数据源、创建和修改仪表板和图表等。
  • Alpha:能够创建和编辑图表、仪表板、SQL 查询等,但不能管理系统设置和用户权限。
  • Gamma:只能查看现有的图表和仪表板,不能进行任何修改操作,适用于数据分析和查看角色。
  • Public:适用于未登录用户,只能查看公共内容。
自定义角色:

除了默认角色,管理员还可以创建自定义角色,以满足特定业务需求。通过自定义角色,管理员可以灵活地配置每个用户组的权限,使其适应不同的工作流程和数据访问需求。

2. 权限管理

Superset 的权限管理系统非常细粒度,管理员可以为不同角色配置精确的访问权限。例如,某些用户可以仅访问特定的数据源和仪表板,而其他用户则可以创建新图表和进行数据探索。通过这种方式,管理员可以确保用户只能访问和修改其职责范围内的数据和资源。

细粒度权限配置:

管理员可以配置以下权限:

  • 数据源权限:控制用户是否可以访问、查询或管理某个特定的数据源。例如,只有财务团队可以访问财务数据源。
  • 图表和仪表板权限:控制用户是否可以查看、编辑或删除某个图表或仪表板。例如,某些用户只能查看预定义的图表,而无法创建新图表。
  • SQL Lab 权限:控制用户是否可以使用 SQL Lab 进行自定义查询。例如,某些用户可以运行 SQL 查询,但无法保存查询结果。
设置权限示例:

管理员可以为 销售团队 创建一个自定义角色,该角色允许其访问销售相关的数据源,查看和创建销售数据的图表和仪表板,但不能修改系统配置或访问其他部门的数据源。

3. 用户和组管理

Superset 支持用户和用户组的管理,管理员可以轻松地为每个用户分配适当的角色,确保他们具有相应的权限。

创建用户:

管理员可以通过 Superset 的 Web UI 或命令行创建新用户,并为用户分配角色。通过角色的灵活分配,管理员可以控制每个用户的权限范围。

用户组管理:

除了单独管理用户,管理员还可以将用户组织到 用户组 中。每个用户组可以拥有多个用户,管理员可以为整个组分配角色和权限,从而简化权限管理工作。当用户加入或离开组时,其权限将自动更新。

创建用户示例:

通过命令行创建用户并分配角色的示例命令:

superset fab create-user \--username <username> \--firstname <first_name> \--lastname <last_name> \--email <email> \--password <password> \--role Alpha
4. 数据级别的权限控制

除了基于角色的权限,Superset 还支持对数据源进行细粒度的权限控制。管理员可以通过配置,限制某些用户只能访问特定表或字段的数据源。例如,某些用户只能查看某个表中的特定列,或只能查询某些预定义的视图,而无法访问整个数据集。

数据级别权限控制的使用场景:
  • 部门隔离:例如,销售团队只能访问销售数据,财务团队只能访问财务数据,彼此不能交叉访问数据。
  • 字段权限:例如,某些用户只能查看数据表中的汇总数据,而不能查看详细的交易记录。
5. 基于 OAuth、LDAP 和 SSO 的集成

Superset 提供了与 OAuth、LDAP 和 SSO(单点登录)集成的能力,帮助企业将用户身份验证集成到现有的身份管理系统中。这使得企业能够通过统一的用户管理平台来管理用户权限,而无需单独为每个系统配置用户和角色。

OAuth、LDAP 集成步骤:
  1. OAuth:通过配置 AUTH_TYPE = AUTH_OAUTH,可以将 Superset 集成到现有的 OAuth 认证系统中。例如,可以使用 Google、GitHub 等 OAuth 提供商进行身份验证。
  2. LDAP:通过配置 LDAP 相关参数,Superset 可以与企业的 LDAP 服务集成,使用现有的目录服务来管理用户认证。
  3. SSO:通过配置 SAML 或其他 SSO 机制,用户可以通过单点登录的方式访问 Superset 系统,而不需要再次输入用户名和密码。
示例配置:
# 配置 OAuth
AUTH_TYPE = AUTH_OAUTH
OAUTH_PROVIDERS = [{'name': 'google','token_key': 'access_token','icon': 'fa-google','remote_app': {'client_id': 'YOUR_GOOGLE_CLIENT_ID','client_secret': 'YOUR_GOOGLE_CLIENT_SECRET','base_url': 'https://www.googleapis.com/oauth2/v2/','request_token_params': {'scope': 'email profile'},'access_token_url': 'https://accounts.google.com/o/oauth2/token','authorize_url': 'https://accounts.google.com/o/oauth2/auth','request_token_url': None,'access_token_method': 'POST','authorize_url_params': None,'access_token_params': None,'redirect_uri': '/login/google','token_key': 'access_token',}
}]
6. 日志和审计功能

为了增强安全性,Superset 提供了日志和审计功能,帮助管理员跟踪用户操作并识别潜在的安全威胁。管理员可以通过日志查看用户的登录记录、查询执行情况以及对系统的修改操作。

常见审计功能:
  • 登录日志:记录每个用户的登录时间和 IP 地址。
  • 查询日志:记录用户运行的每个查询,查询内容、时间和执行结果。
  • 操作日志:记录用户的操作,如图表创建、仪表板修改等。

这些日志可以帮助管理员审查用户活动,确保系统安全,并在出现问题时追踪根源。

7. Superset 的优化与扩展

Apache Superset 是一个功能强大的数据可视化和分析平台,然而在处理大规模数据和高并发访问时,进行适当的优化和扩展可以显著提升系统的性能和用户体验。此外,Superset 具有高度的扩展性,用户可以通过插件、API 和自定义功能,定制适合自己业务需求的功能。

1. 性能优化策略

在面对大规模数据集和高并发访问时,Superset 提供了多种优化策略,能够提高查询速度和减少资源消耗。以下是常见的性能优化方法:

1.1 查询缓存

Superset 支持查询结果缓存,避免了重复查询带来的性能开销。缓存机制可以显著减少数据库负载,并提高查询响应时间,特别是当用户经常运行相同的查询时。

配置缓存策略:

  • 缓存可以通过 Redis 实现,确保查询结果在缓存中存储一段时间,供后续请求使用。
  • 配置文件 superset_config.py 中设置缓存:
    CACHE_CONFIG = {'CACHE_TYPE': 'RedisCache','CACHE_DEFAULT_TIMEOUT': 300,'CACHE_KEY_PREFIX': 'superset_','CACHE_REDIS_HOST': 'localhost','CACHE_REDIS_PORT': 6379,'CACHE_REDIS_DB': 0,
    }
    
  • 设置缓存失效时间:例如,设置 300 秒的缓存失效时间可以平衡性能和数据的实时性。
1.2 异步查询与任务调度

Superset 提供异步查询模式,允许复杂查询在后台执行,避免阻塞前端界面,提升用户体验。这对于运行大型数据集上的长时间 SQL 查询尤其重要。

启用异步查询的步骤:

  • 配置 Celery 作为任务队列:
    CELERY_CONFIG = {'broker_url': 'redis://localhost:6379/0','result_backend': 'redis://localhost:6379/0',
    }
    
  • 启动 Celery 任务调度服务:
    celery worker -A superset.celery_app:app -l info
    

通过异步查询,用户可以在后台运行复杂查询,前端不会受到影响,同时可以继续进行其他操作。

1.3 数据库层优化

优化数据库本身也是提升 Superset 查询性能的重要方式。可以通过以下几种方式进行数据库层优化:

  • 创建索引:确保数据库中的关键字段已创建索引,能够显著提升查询性能,尤其是涉及 WHERE 条件的查询。
  • 分区表:在大型数据集上,将数据分区(按时间、地理位置等维度),可以减少查询的扫描范围,提升性能。
  • 视图或物化视图:将常用的复杂查询预计算成视图或物化视图,避免每次查询时都重新计算。
2. 扩展 Superset 的功能

Superset 拥有高度可扩展的架构,用户可以通过插件、API、以及自定义功能增强系统的能力。以下是几种常见的扩展方式:

2.1 插件系统

Superset 提供了一个灵活的插件系统,允许用户自定义数据可视化类型、添加新的数据源连接器、或者开发自定义功能插件。插件可以显著扩展 Superset 的功能,使其适应更广泛的业务场景。

插件开发示例:

  1. 创建一个自定义图表插件,支持新的可视化类型。
  2. 将插件代码添加到 plugins 目录,并通过配置文件启用:
    from superset.plugins import MyCustomPlugin
    APP_PLUGINS = [MyCustomPlugin()]
    
  3. 在 Superset 前端的图表选择中,用户将可以选择新的可视化类型。
2.2 自定义数据源

通过自定义数据源连接器,Superset 可以与更多的数据库系统或数据平台集成。用户可以基于 SQLAlchemy 或其他数据源 SDK 开发自定义连接器。

  • 步骤:通过继承 SQLAlchemy 连接器类,开发自定义数据源适配器,将其与 Superset 集成。
  • 示例:开发一个支持新的大数据平台(如 Cassandra、Hadoop)的连接器。
2.3 REST API 集成

Superset 提供了 REST API 接口,允许用户通过编程方式与 Superset 进行交互,自动化管理和查询仪表板、图表、数据源等。通过 API,开发者可以实现与其他系统的深度集成,创建自动化工作流或定制化应用。

常见的 REST API 使用场景:

  • 自动化创建和更新图表、仪表板。
  • 从外部系统触发查询,并将结果嵌入到其他应用中。
  • 自动化的仪表板发布和分享。
API 调用示例:

假设你需要通过 API 创建一个新的仪表板,可以调用以下 API:

curl -X POST "http://localhost:8088/api/v1/dashboard" \-H "Authorization: Bearer <your_access_token>" \-H "Content-Type: application/json" \-d '{"dashboard_title": "New Dashboard","position_json": "{}","json_metadata": "{}"}'
2.4 自定义前端界面

Superset 的前端使用 React 框架构建,用户可以根据需求自定义前端界面。通过修改 Superset 的前端代码,你可以调整用户界面布局、增加自定义的组件或功能,优化用户体验。

  • 前端开发步骤
    1. 克隆 Superset 源代码仓库并安装前端依赖:
      git clone https://github.com/apache/superset.git
      cd superset-frontend
      npm install
      
    2. 修改前端代码,例如自定义图表的样式或布局。
    3. 重新构建前端资源:
      npm run build
      
3. 支持多租户架构

对于企业级应用,Superset 还可以支持 多租户架构。通过创建不同的用户组和角色,企业可以将多个团队或部门的数据隔离开来,每个团队只能访问自己的数据源和仪表板。

实现多租户支持的步骤:
  1. 配置用户组:为每个租户(团队或部门)创建独立的用户组,并为每个组分配专属的角色和权限。
  2. 数据隔离:通过为不同用户组分配独立的数据源,确保每个团队只能访问自己的数据集。
  3. 权限管理:通过基于角色的权限控制(RBAC),限制每个租户对特定数据源、仪表板和图表的访问权限。
4. 监控与审计

为了确保 Superset 在高并发和大规模数据集下运行良好,进行监控和审计是必不可少的。管理员可以通过日志和监控工具了解系统的运行状况,并及时处理性能瓶颈和安全问题。

监控方法:
  • Prometheus 和 Grafana:通过集成 Prometheus 和 Grafana,管理员可以实时监控 Superset 的性能指标,例如查询速度、系统负载等。
  • 日志审计:Superset 支持操作日志记录,包括用户登录、查询执行、仪表板和图表修改等,管理员可以通过日志追踪用户操作,审查系统活动。
5. 自动化工作流集成

Superset 还可以与自动化工作流工具(如 Apache Airflow)集成,结合自动化任务调度和数据管道管理,创建一个完整的 BI 数据流工作流。通过这种集成,企业可以实现从数据处理、分析到可视化的一站式自动化流程。

8. Superset 的常见问题与故障排除

在使用 Apache Superset 过程中,用户可能会遇到一些常见问题和挑战。这些问题通常与系统配置、查询性能、数据源连接、以及权限管理有关。通过了解这些问题的根本原因并采取适当的解决方案,您可以确保 Superset 系统稳定运行并提供良好的用户体验。

1. 系统安装与启动问题
问题 1.1:superset db upgrade 失败

原因:此问题通常是由于数据库配置不正确或数据库依赖包缺失引起的。

解决方案

  • 确保数据库配置正确,例如,SQLALCHEMY_DATABASE_URI 指向正确的数据库连接。
  • 确保安装了数据库依赖包,例如对于 PostgreSQL,您需要安装 psycopg2
    pip install psycopg2-binary
    
  • 如果仍然失败,建议检查 Superset 日志文件,查看错误堆栈信息。
问题 1.2:Superset 启动后网页无法访问或页面加载错误

原因:这通常是由于前端资源未正确构建或服务端端口配置错误引起的。

解决方案

  • 确保前端资源已经正确构建。如果尚未构建或构建失败,请运行以下命令:
    npm install
    npm run build
    
  • 检查是否在正确端口启动服务。例如,默认情况下 Superset 使用端口 8088
    superset run -p 8088 --with-threads --reload --debugger
    
2. 查询与数据源连接问题
问题 2.1:连接数据源失败

原因:可能是由于数据源 URI 格式错误,或者数据源服务未启动。

解决方案

  • 检查数据源 URI 是否正确,确保格式符合 SQLAlchemy 的标准连接字符串格式。例如,连接 MySQL 数据库的 URI:
    mysql://username:password@hostname:port/database
    
  • 确保数据源服务正在运行,并且可以从 Superset 服务器访问该服务。
  • 如果使用 SSL 或其他身份验证机制,确保相关的证书或凭证已正确配置。
问题 2.2:查询响应缓慢

原因:可能是由于数据库的性能瓶颈、查询缺乏优化、或 Superset 未使用缓存功能。

解决方案

  • 优化查询:使用索引、分区表和优化的 SQL 查询以提升数据库性能。
  • 启用查询缓存:通过 Redis 缓存查询结果以减少数据库的负载。可以在 superset_config.py 中配置 Redis 缓存:
    CACHE_CONFIG = {'CACHE_TYPE': 'RedisCache','CACHE_DEFAULT_TIMEOUT': 300,'CACHE_KEY_PREFIX': 'superset_','CACHE_REDIS_HOST': 'localhost','CACHE_REDIS_PORT': 6379,
    }
    
  • 使用异步查询:对于长时间运行的查询,建议启用 Celery 异步查询模式,避免阻塞前端页面。
问题 2.3:SQL Lab 查询无法保存

原因:数据库元数据表缺少必要权限,或者数据库 URI 配置有误。

解决方案

  • 检查数据库的元数据表,确保 Superset 有权对其进行读写操作。
  • 确保 SQLALCHEMY_DATABASE_URI 配置正确,并且数据库的连接凭据允许执行写操作。
3. 权限与访问控制问题
问题 3.1:用户无法访问某些图表或仪表板

原因:用户角色缺少访问权限,或管理员未为该用户分配适当的权限。

解决方案

  • 检查用户的角色和权限设置,确保用户分配到正确的角色。
  • Security > List Roles 中查看角色的权限,确保用户拥有访问特定图表、仪表板或数据源的权限。
  • 如果需要为用户定制权限,可以创建自定义角色并分配具体的访问权限。
问题 3.2:OAuth 或 LDAP 身份验证失败

原因:OAuth 或 LDAP 配置不正确,导致 Superset 无法与身份验证提供者通信。

解决方案

  • 检查 superset_config.py 中的 OAuth 或 LDAP 配置,确保提供者 URL、客户端 ID 和客户端密钥正确无误。
  • 确保 OAuth 提供者或 LDAP 服务器正常运行并能够处理身份验证请求。
  • 使用调试模式运行 Superset 并查看详细的错误日志,找到失败的根本原因。
4. 数据可视化与图表问题
问题 4.1:图表渲染失败或显示空白

原因:可能是由于数据源返回空结果集,或数据类型与图表配置不兼容。

解决方案

  • 检查 SQL 查询结果,确保有数据返回且数据类型与图表兼容。
  • 确认图表的维度和度量配置正确。例如,如果图表需要数值型度量,请确保查询返回的列是数值型数据。
问题 4.2:图表加载时间过长

原因:数据量太大或查询未优化。

解决方案

  • 使用适当的查询优化技巧,例如减少查询范围、使用索引、添加聚合和过滤条件。
  • 如果图表的数据显示较慢,考虑缩减图表展示的数据量,或者为数据设置分页显示。
5. 仪表板问题
问题 5.1:仪表板无法保存或更新

原因:可能是由于数据库的写入权限不足,或者仪表板元数据出现冲突。

解决方案

  • 确保 Superset 使用的数据库有足够的权限保存和更新仪表板元数据。
  • 检查仪表板的 JSON 配置是否正确,避免存在格式错误或冲突。
问题 5.2:仪表板加载过慢

原因:仪表板中的图表数量过多或每个图表的查询性能较差。

解决方案

  • 通过优化查询、启用缓存或异步加载图表来减少加载时间。
  • 考虑将大型仪表板分解为多个小型仪表板,以提高每个仪表板的加载性能。
6. 性能和扩展性问题
问题 6.1:高并发查询导致系统崩溃

原因:系统资源不足或查询并发过高。

解决方案

  • 增加服务器的资源(如 CPU、内存)或扩展服务器节点,提升系统的并发处理能力。
  • 限制并发查询数量,确保系统资源不被大量查询占用。可以通过以下配置限制并发查询:
    QUERY_MAX_ROWS = 10000  # 设置最大查询行数
    SQLLAB_CTAS_NO_LIMIT = True  # 禁止无限制的查询
    
问题 6.2:系统负载过高或内存不足

原因:可能是由于大量的并发查询或长时间运行的查询占用了大量资源。

解决方案

  • 启用 Celery 异步查询,避免大查询阻塞主线程。
  • 使用 Redis 缓存查询结果,减少重复查询的资源开销。
7. 日志与调试工具
问题 7.1:如何调试 Superset 的问题?

解决方案

  • 启用 Superset 的 调试模式,并查看日志文件来获取详细的错误信息:
    export FLASK_ENV=development
    superset run -p 8088 --with-threads --reload --debugger
    
  • 日志文件可以帮助管理员快速定位问题,例如数据源连接失败、权限问题或查询执行错误。日志文件通常位于 /var/log/supersetsuperset/logs 目录下。

9. Superset 的发展趋势

Apache Superset 作为一个开源数据可视化和分析平台,随着大数据技术和数据分析需求的不断演变,正在持续发展以适应未来的挑战。Superset 的发展趋势主要体现在增强实时数据处理能力、提升性能、云原生架构的集成,以及扩展其可视化和用户体验的能力。以下是 Superset 在未来可能的发展方向和趋势。

1. 增强实时数据处理能力

随着数据分析领域逐渐向实时数据流处理发展,Superset 也在不断提升其对实时数据处理的支持。目前,Superset 可以与如 Apache Kafka 和 Apache Flink 等实时数据流平台集成,未来的版本可能会进一步增强其对低延迟、实时数据更新和分析的支持。

实时数据的支持:
  • 流数据分析:通过集成实时数据流工具(如 Kafka、Flink),Superset 将可以更快地对流数据进行可视化分析,确保数据分析在瞬息万变的商业环境中保持实时性。
  • 动态仪表板更新:随着企业对实时监控的需求增加,Superset 可能进一步优化动态仪表板,使其能够处理更加复杂的实时数据流,提供更短的更新间隔和更低的延迟。
2. 云原生架构集成

随着企业逐渐将数据分析转向云端,Superset 也将不断增强其与云服务的深度集成。未来,Superset 将优化其云原生特性,支持更轻量化的部署,适应分布式和容器化的环境。

云原生趋势:
  • 与云平台的无缝集成:Superset 将继续加深与 AWS、Google Cloud、Microsoft Azure 等云平台的集成,优化在这些平台上的运行性能,支持容器化部署(如 Kubernetes 和 Docker)。
  • 自动扩展和弹性计算:Superset 的架构将更加灵活,能够根据需求自动扩展计算和存储资源,在处理大规模数据时提供更高的性能和弹性。
  • Superset-as-a-Service:未来可能会出现更多云服务版本的 Superset,企业能够以 SaaS 形式快速部署和使用 Superset,避免复杂的基础设施管理。
3. 性能优化与可扩展性

为了应对日益增长的数据集规模,Superset 将不断优化其性能和可扩展性。未来的 Superset 版本将重点提升查询性能、图表渲染速度和系统的整体可扩展性。

性能优化方向:
  • 智能查询优化:Superset 可能会引入智能化查询优化机制,自动识别常见查询模式并对其进行优化。通过更智能的缓存机制,系统将能够更高效地处理高并发查询。
  • 更高效的可视化渲染:随着数据集的增大,Superset 将优化可视化引擎,提升大规模图表的渲染速度,确保用户能够在几秒内获取数据洞察。
  • 分布式计算支持:未来版本可能会更加依赖分布式计算技术,以便在处理海量数据时保持高效。通过与大数据处理框架(如 Spark、Flink)的集成,Superset 将能够更好地支持大规模并行数据处理。
4. 增强的可视化与用户体验

Superset 一直以来都以其丰富的可视化功能和简单易用的界面而著称。未来的发展将集中在扩展图表类型、提高用户交互体验、以及优化仪表板管理功能。

可视化趋势:
  • 更多图表类型与自定义选项:Superset 将继续扩展其支持的图表类型,并为用户提供更多自定义图表样式的选项。未来可能会集成更多高级可视化库,如 D3.js 的高级功能,提升图表的交互性和美观度。
  • 仪表板设计的增强:用户将在仪表板布局和设计上拥有更多的控制,例如更灵活的组件布局、更强大的过滤器和联动功能,使仪表板变得更加直观和强大。
  • 移动端优化:随着移动设备的普及,Superset 可能会进一步优化移动端的用户体验,确保在手机或平板上查看仪表板时有流畅的操作体验。
5. 人工智能与机器学习的集成

Superset 未来可能通过与机器学习(ML)和人工智能(AI)技术的集成,提升其在预测分析和自动化数据处理领域的能力。

AI 和 ML 趋势:
  • 机器学习集成:Superset 可能会提供与常见机器学习平台(如 TensorFlow、PyTorch)的集成,使用户能够在同一个平台上进行数据预处理、模型训练和可视化分析。
  • 智能建议功能:通过 ML 算法,Superset 可能会提供智能化的数据分析建议,例如自动推荐合适的图表类型、自动检测数据中的异常情况或趋势。
  • 预测分析:用户将能够利用 Superset 平台直接进行预测性分析,如销售预测、客户行为预测等,并将预测结果与其他数据集一同可视化。
6. 社区和开源生态的壮大

作为一个开源项目,Superset 未来的发展依赖于其社区的壮大和贡献者的持续支持。随着社区的扩大,Superset 的功能将更加丰富,扩展性更强,并且能够快速适应行业需求。

社区发展方向:
  • 更多插件与扩展:随着社区贡献者的增加,Superset 的插件生态将不断扩大,用户可以通过第三方插件获得更多数据源支持、更多可视化类型以及更多定制化功能。
  • 更完善的文档与支持:开源社区将继续改善 Superset 的文档和教程,使新用户能够更快上手,并提供更多的学习资源和开发支持。
7. 多租户架构的支持与优化

随着企业对多租户架构需求的增加,Superset 可能会进一步优化其在多租户环境下的性能和安全性,使多个团队和用户群体能够共享同一个平台,但又保持数据和权限的隔离。

多租户支持的未来趋势:
  • 更强的隔离性:Superset 将为多租户提供更加精细的权限控制,确保不同租户的数据源、图表和仪表板完全隔离。
  • 多租户优化:未来版本可能会为多租户提供更好的性能优化策略,确保在大规模多用户环境下,系统的性能不会受到影响。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/145357.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

vue项目引入比较独特的字体的方法

引入字体的步骤 前言&#xff08;步骤一&#xff09;引入的文件OPPOSans-M.ttf,TencentSans-W3.ttf,TencentSans-W7.ttf,YouSheBiaoTiHei.ttf (步骤二)font.css(步骤三) 全局引入在使用的地方的展示效果展示 前言 公司这边开发一个可视化大屏&#xff0c;UI小姐姐设置了很多比…

安卓13修改设置设备型号和设备名称分析与更改-android13设置设备型号和设备名称更改

总纲 android13 rom 开发总纲说明 文章目录 1.前言2.问题分析3.代码分析4.代码修改5.编译6.彩蛋1.前言 用户要定制一些系统显示的设备型号和设备名称,这就需要我们分析设置里面的相关信息来找到对应的位置进行修改了。 2.问题分析 像这种信息要么是config.xml里面写死了,要…

ES6 -- 2015

学习视频 1. let和const 1.1 let 变量必须先声明再使用同一变量不能重复声明变量有块级作用域 1.2 const 声明常量&#xff0c;常量不能改变常量必须有初始值&#xff0c;不能先声明再赋值 2. 解构 1 数组解构 保持左右的结构一样&#xff0c;安装顺序一一对应 完全解构…

Knife4j 一款基于Swagger的开源文档管理工具

一、简单介绍 1.1 简介 Knife4j 是一款基于Swagger的开源文档管理工具&#xff0c;主要用于生成和管理 API 文档 二、使用步骤&#xff1a; 2.1 添加依赖&#xff1a; <dependency><groupId>com.github.xiaoymin</groupId><artifactId>knife4j-spr…

三维手势 handpose 3D RGB 手势3D建模 三维建模-手势舞 >> DataBall

请关注即将发布 handpose x plus 项目 三维手势 handpose 3D RGB 单目相机手势识别 手语 歌曲 Friends 手势检测 手势3D建模 三维建模 咨询合作 DataBall 项目&#xff0c;欢迎加以下微信。 助力快速掌握数据集的信息和使用方式。

记录|C#的资源路径设置的资料整理

目录 前言一、在这里插入图片描述 https://bbs.csdn.net/topics/360001606 二、三、添加到资源文件中四、获得图片的三种路径方法五、给资源文件添加文件夹更新时间 前言 参考文章&#xff1a; 原本以为C# winform中进行图片等文件的路径的读取是直接可以按照资源文件中显示的来…

powerbi-L8-导入数据时候的动态列

背景&#xff1a; 在数据导入之后刷新的过程中出现了无法刷新的异常报错&#xff0c; 检查后发现是由于原始数据的列的名字变化导致了power BI在处理数据类型的时候 需求 处理方法是什么&#xff0c; &#xff1f; 方法 动态获取表格的列&#xff1a; 获取数据的时候&#xff…

​OpenAI最强模型o1系列:开启人工智能推理新时代

前不久OpenAI发布全新模型——o1模型&#xff0c;也就是业界说的“草莓模型”&#xff0c;包含三款型号&#xff1a;OpenAI o1、OpenAI o1-preview和OpenAI o1-mini。 其中&#xff0c;OpenAI o1-mini和 o1-preview已经对用户开放使用&#xff1a; OpenAI o1&#xff1a;高级推…

拥塞控制算法的 rtt 公平性

我强调过&#xff0c;拥塞控制的核心在公平可用性&#xff0c;公平性由 buffer 动力学保证&#xff0c;而 buffer 动力学有两种表现形式&#xff1a; buffer 占比决定带宽占比&#xff0c;以 aimd 为例&#xff1b;带宽越小&#xff0c;buffer 挤兑加速比越大&#xff0c;以 b…

AI Agent的20个趋势洞察

结论整理自【QuestMobile2024 AI智能体应用洞察半年报】&#xff1a; AI原生应用&#xff08;APP)一路高歌&#xff1b;豆包用户突破3000万&#xff1b;TOP10 APP以综合类应用为主。无论何种类型的AIGC APP都以智能体为“抓手”&#xff0c;专注于解决各种细分场景中的问题&am…

Opencv+Cuda编译的保姆级别教程

OpencvCuda编译的保姆级别教程 一、环境总览二、环境准备2.1 opencv和opencv扩展2.2 cuda环境下载2.2.1 首先电脑要有英伟达的显卡2.2.2 然后查看显卡驱动版本2.2.3 下载Cuda Toolkit工具包2.2.4 下载Cudnn库 2.3 CMake下载 三、CMake配置步骤3.1 加载路径第一次Configure3.1.1…

influxdb-winsdows电脑用户切换 Unauthorized

如果切换winsdows电脑用户之后启动influxdb出现Unauthorized 1.考虑windows用户的权限问题&#xff0c;给full control 2.要把原来用户下的.influxdb中的sqlite给搬到新用户下&#xff0c;因为里面存了数据库的token&#xff0c;需要认证

C++入门基础知识77(实例)——实例 2【标准输入输出】

成长路上不孤单&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a; 【14后&#x1f60a;///C爱好者&#x1f60a;///持续分享所学&#x1f60a;///如有需要欢迎收藏转发///&#x1f60a;】 今日分享关于C 实例 【标准输入输出】相关内容&#…

React学习day08-useReducer、useMemo、memo、useCallback、forwardRef、useInperativeHandle

15、useReducer 1&#xff09;作用&#xff1a;用来管理相对复杂的状态数据&#xff0c;类似于useState 2&#xff09;使用步骤&#xff08;传递一般的参数&#xff09;&#xff08;在APP.js中&#xff09;&#xff1a; ①定义一个reducer函数&#xff0c;在函数中通过switc…

技术美术百人计划 | 《4.4 抗锯齿》笔记

前言&#xff1a;文中补充的内容很多来自链接里的&#xff0c;建议看看链接的文章。 一、锯齿 (一) 什么是锯齿 在学习渲染的旅途中&#xff0c;你可能会时不时遇到模型边缘有锯齿的情况。这些锯齿边缘(Jagged Edges)的产生和光栅器将顶点数据转化为片段的方式有关。在下面的…

Mobile net V系列详解 理论+实战(1)

Mobilenet 系列 论文精讲部分0.摘要1. 引文2. 引文3. MobileNet 模型架构3.0 卷积个人理解3.1 深度可分离卷积3.2 网络结构和训练3.3 宽度乘数&#xff1a;更细的模型 α3.4 分辨率乘数&#xff1a;降低表示的维度ρ 4. 实验4.1 模型选择4.2. 模型缩减超参数4.3. 细粒度识别4.4…

人力资源数据集分析(二)_随机森林与逻辑回归

数据入口&#xff1a;人力资源分析数据集 - Heywhale.com 数据说明 字段说明EmpID唯一的员工IDAge年龄AgeGroup年龄组Attrition是否离职BusinessTravel出差&#xff1a;很少、频繁、不出差DailyRate日薪Department任职部门&#xff1a;研发部门、销售部门、人力资源部门Dista…

Linux 进程3

进程地址空间 CPU读取数据都需要地址&#xff0c;在计算机中所有东西都是一种数据&#xff0c;包括我们的进程。 这是一个进程空间示意图&#xff0c;操作系统通过task_struct结构体链表来管理每一个进程&#xff0c;结构体里面有一个指针指向操作系统为进程开辟的一段空间&am…

2-100 基于matlab的水果识别

基于matlab的水果识别。从面积特征、似圆形特征&#xff0c;颜色(rgb值和hsv值)特征对图像中的梨子、苹果、桃子、香蕉和菠萝进行特征提取&#xff0c;边缘检测识别&#xff0c;最后按照筛选出来的特征对水果进行识别。程序已调通&#xff0c;可直接运行。 下载源程序请点链接…

【CustomPainter】渐变圆环

说明 实现一个渐变圆环&#xff0c;起点位置为- π / 2。 效果 源码 GradientCircularPainter1 class GradientCircularPainter1 extends CustomPainter {final double progress;GradientCircularPainter1(this.progress);overridevoid paint(Canvas canvas, Size size) {c…