Quick BI 数据集实现方式与直接读取数据 · 调研报告
日期:2026-08-16 目标:搞清楚 Quick BI「数据集」底层是怎么实现的,以及能否直接读取数据集中的数据
1. 结论摘要(TL;DR)
Quick BI 的「数据集」本质是逻辑建模层,不是物理表。数据本身要么留在源端(直连模式),要么被抽取到阿里云的 OLAP 加速引擎(抽取模式)。
要「直接读取数据集中的数据」,有 4 条路径,按推荐度排序:
| 优先级 | 路径 | 可行性 | 说明 |
|---|---|---|---|
| ⭐ 首选 | 直连底层数据源 | 高,通用 | 绕过 Quick BI,直接查数据集背后的物理表 |
| 次选 | 数据服务 API(QueryData) | 官方支持,但仅专业版 | 把数据集发布成 API 后调用 |
| 备选 | 直查加速引擎物化表 | 依赖抽取模式 | 找到物化表后直接 SQL 查 |
| 不可行 | OpenAPI 直接读数据行 | ❌ | OpenAPI 只能读元数据,读不了数据 |
2. 数据集是什么:一个「逻辑建模层」
Quick BI 的数据集不是一个存放数据的物理表,而是对底层数据源的一次逻辑封装,它定义的是:
- 数据源连接:指向底层的 RDS MySQL / PostgreSQL / MaxCompute / Hologres / AnalyticDB / OSS / 自建库等
- 字段模型:哪些是「维度」(分组字段)、哪些是「度量」(聚合字段)
- 计算字段:在数据集上定义的 SQL 表达式(如
sum(sales) / count(order)) - 表关联关系:多表 JOIN 的逻辑定义
- 权限:行级权限、列级权限
关键认知:你在 Quick BI 里看到的「数据集」,本质是一份「如何从底层数据源取数、如何建模」的元数据定义。真正查数时,Quick BI 会根据这份定义 + 你的可视化配置,动态生成 SQL 去底层取数。
3. 两种数据模式(数据的真实去向)
数据集的数据实际落在哪里,取决于创建时选的是「直连」还是「抽取」:
3.1 直连模式(Direct Query)
- 数据不落地 Quick BI,完全留在源端
- 每次查询,Quick BI 把生成的 SQL 下推到数据源执行
- 适合:数据源性能好、对实时性要求高的场景
- 特点:实时(查的是源端最新数据),但查询性能受制于数据源
3.2 抽取模式(Extract / 加速)
- 数据从源端抽取/同步到 Quick BI 的加速引擎,形成物化表
- 后续查询走加速引擎,不再回源
- 适合:大数据量、复杂聚合、源端性能不足的场景
- 特点:查询快,但数据是「快照」,有延迟(需定时抽取更新)
4. 数据实际存储在哪(实现方式核心)
| 模式 | 数据物理位置 | 能否直接访问 |
|---|---|---|
| 直连模式 | 就在底层数据源(RDS / MaxCompute / Hologres 等) | ✅ 用数据源自己的方式直接查 |
| 抽取模式 | 抽取到 Quick BI 的加速引擎,物化为物理表 | ⚠️ 需找到物化表名 |
加速引擎的底层
Quick BI 的「抽取加速」功能,底层依赖阿里云的 OLAP 分析引擎,常见为:
- MaxCompute:阿里云大数据计算服务(通用抽取方案)
- Hologres:实时数仓(高性能抽取方案)
- AnalyticDB:云原生数仓(分析型抽取方案)
抽取时,Quick BI 会在对应引擎里创建物化表(表名通常是 Quick BI 内部生成的、带数据集标识的表)。找到这个物化表后,就可以用该引擎的 SDK/SQL 直接查。
⚠️ 物化表的表名映射关系,官方文档未完全公开,需要结合加速任务信息(OpenAPI 的
AllotDatasetAccelerationTask等)或控制台查看,才能精确定位到物理表。
5. 直接读取数据的 4 条路径详解
路径 A:直连底层数据源(⭐ 首选,推荐)
数据集的「直连」本质就是查底层数据源。既然数据就在源端,最直接的方式是绕过 Quick BI,用数据源自己的接口查。
- 若源是 MaxCompute → 用 odps-sdk / Tunnel / SQLTask 查询(你已有现成封装)
- 若源是 RDS MySQL / PostgreSQL → 用 JDBC 查
- 若源是 Hologres → 兼容 PostgreSQL 协议,JDBC 查
优点:通用、无版本限制、无 QPS 限制、实时、可做任意复杂查询。 缺点:需要自己知道底层数据源在哪、表结构如何(数据集的字段映射要自己重建)。
路径 B:数据服务 API(QueryData,官方支持但有限制)
Quick BI 的「数据服务」功能,可以把数据集发布成 API,然后通过 OpenAPI 的 QueryData 调用拿数据。
- 前提:先在控制台把数据集发布成「数据服务 API」,拿到
ApiId - 接口:
quickbi-public服务,版本2022-01-01,QueryData/QueryDataService/QueryDataServiceList QueryData关键参数:ApiId(必填)、UserId、Conditions(查询条件 map)、ReturnFields(返回字段)- 限制(重要):
- 数据服务功能仅专业版开放(个人版/标准版没有)
- 单 API QPS 10 次/秒,接口超时 60s
- 数据集若开了行级权限,调用时同样会被行级权限拦截
优点:官方支持、不用碰底层数据源、权限由 Quick BI 统一管控。 缺点:仅专业版、QPS 低、适合低频小批量取数,不适合高频/大数据量。
路径 C:直查加速引擎物化表(备选)
如果数据集开了「抽取加速」,数据已物化到 MaxCompute/Hologres/AnalyticDB 的物理表。找到物化表后,直接查。
优点:绕过 Quick BI 查询层,性能好,可做任意 SQL。 缺点:需要先定位物化表名(映射关系不透明);数据是快照,有延迟。
路径 D:OpenAPI 读元数据(❌ 不能读数据行)
Quick BI 开放平台的 QueryDatasetList / QueryDatasetInfo / QueryDatasetDetailInfo 等接口,只能拿到数据集的元数据(名称、字段定义、维度度量、类型),不能返回数据行。
- 这些接口的价值:拿字段模型、拿加速任务状态,辅助路径 A/C 的落地
- 但别指望它们直接返回数据
6. 路径对比总表
| 维度 | A 直连数据源 | B 数据服务 API | C 加速引擎物化表 | D OpenAPI |
|---|---|---|---|---|
| 能否读数据行 | ✅ | ✅ | ✅ | ❌ 仅元数据 |
| 版本要求 | 无 | 专业版 | 需抽取模式 | 无 |
| QPS 限制 | 无 | 10 次/秒 | 无 | 有(API 通用) |
| 实时性 | 实时 | 视数据服务配置 | 快照(有延迟) | - |
| 实现成本 | 中(要懂数据源) | 低(配置为主) | 中(要定位物化表) | 低 |
| 大数据量 | ✅ 支持 | ⚠️ 受 60s 超时限制 | ✅ 支持 | - |
7. 推荐方案
结论:优先走「路径 A — 直连底层数据源」,这是最通用、最不受限制的方案。
结合你的实际情况(已有 MaxCompute SDK 封装能力):
- 如果数据集底层是 MaxCompute → 直接用你封装的
MaxComputeQueryService直查,绕开 Quick BI - 如果数据集底层是 RDS/Hologres → 用 JDBC 直连查询
- 只有当你无法接触底层数据源(比如数据源是别人管理的、你只有 Quick BI 权限) → 才考虑路径 B 数据服务 API(需专业版)或路径 C 加速引擎物化表
落地第一步:用 OpenAPI 的 QueryDatasetDetailInfo 拿到数据集的底层数据源连接信息 + 字段定义(这些元数据是能读的),据此定位底层表,再用路径 A 直查。
附:实证确认过的 API 清单
以下接口为本次调研前已通过阿里云 OpenAPI 文档(next.api.aliyun.com,quickbi-public / 2022-01-01)实证确认存在:
QueryDatasetList— 列出数据集QueryDatasetInfo— 数据集信息QueryDatasetDetailInfo— 数据集字段详情(维度/度量定义)AllotDatasetAccelerationTask— 触发数据集抽取加速QueryData/QueryDataService/QueryDataServiceList— 数据服务查询GetDataSourceConnectionInfo— 底层数据源连接信息
注:加速引擎底层具体为 MaxCompute 还是 Hologres/AnalyticDB,取决于账号开通的加速引擎类型,需在控制台或通过加速任务接口确认,本报告该部分为架构性说明,落地时建议以控制台实际配置为准。