1. 概述
1.1 版本
| FineBI 版本 | 功能变动 |
|---|---|
| 7.0.7 | - |
| 7.0.11 |
|
1.2 功能简介
本文讲解 FineBI 中「数据目录」搜索已发布的指标/维度/指标集信息查看与校验查询相关的 API 接口。
配合 FineDataLInk 支持将接口中的指标维度数据取出,并写入指定的数据库,方便用户在其他系统使用指标中心的数据。
1.3 前置条件
需要先将查询并调用的指标中心数据需要先发布到「数据目录」。为在数据目录中调用接口查询指标中心数据做准备。

2. 认证方式
获取接口信息前,需要先进行认证。推荐「摘要签名认证」,能提供更稳定的接口获取环境
本文演示测试接口属于临时环境,使用的是 JWT 认证
2.1 JWT认证
使用平台 JWT 认证产生的用户 Token ,有效期跟随登录有效期。
2.2 摘要签名认证
1)摘要算法采用 HMAC-SHA256 ,指标中心提供 secretKey ,使用BI平台的 username 和 secretKey 一起制作签名。
username:BI平台的登录用户名
Secret Key:超管在平台「管理系统>系统管理>指标服务」中点击「生成Key」即可获取。如下图所示:
注:该 Secret Key 仅超管有权限获取。

2)制作签名认证
签名生成:signature = HmacSHA256(用户名+随机数+时间戳, secretKey);使用base64编码
在 Headers 中添加 Authorization: HMAC-SHA256 signature={签名},identity={用户名},nonce={随机数},timestamp={时间戳}
示例:Authorization: HMAC-SHA256 signature=c4Q63zUQIXoBIwQQKq6jJpEZYD2DilQf/cYUS41MNqc=,identity=lucian,nonce=e7ec7bbc-5c8b-4076-a292-93165bd0ad0d,timestamp=1765334705601
制作签名的过程可参考:
import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
import java.nio.charset.StandardCharsets;
import java.util.Base64;
import java.util.UUID;
public class SignatureDemo {
public static void main(String[] args) {
//修改为BI平台中的username
String identity = "qinghui";
//修改为对应的secretKey
String secretKey = "1bbe91b1-a39c-4742-9694-e126bcf9a3bd";
//Nonce,自动生成
String nonce = String.valueOf(UUID.randomUUID());
//时间戳,自动生成
String timestamp = String.valueOf(System.currentTimeMillis());
//待签名字符串
String stringToSign = identity + nonce + timestamp;
//签名
String signature = hmacSHA256(secretKey, stringToSign);
//拼出完整的Authorization
System.out.println("Authorization:\n" + "HMAC-SHA256 signature=" + signature + ",identity=" + identity + ",nonce=" + nonce + ",timestamp=" + timestamp);
}
/**
* 对字符串data进行HmacSHA256签名,以Base64的结果返回
*
* @param secretKey 签名密钥
* @param data 待签名字符串
*/
public static String hmacSHA256(String secretKey, String data) {
try {
Mac hmacSha256 = Mac.getInstance("HmacSHA256");
SecretKeySpec secretKeySpec = new SecretKeySpec(secretKey.getBytes(StandardCharsets.UTF_8), "HmacSHA256");
hmacSha256.init(secretKeySpec);
byte[] hashBytes = hmacSha256.doFinal(data.getBytes(StandardCharsets.UTF_8));
return Base64.getEncoder().encodeToString(hashBytes);
} catch (Exception e) {
throw new RuntimeException("HmacSha error", e);
}
}
}
2.3 指标服务管控
为保障指标服务及 BI 平台的稳定性,超管可进入「管理系统>系统管理>指标服务」,对指标服务的调用频率、取数并发和请求配置进行管控。

各配置项说明如下:
| 配置项 | 默认值 | 校验规则 | 说明 |
|---|---|---|---|
| 是否开启管控 | 开启 | - | 开启后,对指标服务的调用频率、取数并发和请求配置进行管控 |
| 并发取数上限 | 20 | 正整数,最大值为 10000,不可为空 | 系统允许同时处于底层引擎取数计算中的请求数量上限 |
| 排队超时时间 | 5000 毫秒 | 正整数,最大值为 30000,不可为空 | 并发取数达到上限后,后续取数请求允许等待的最长时间 |
| 平台调用频率 | 300 | 正整数;为空时不限制 | 系统每秒允许接收的所有 BI 用户各类请求的最大次数 |
| 用户调用频率限制 | 30 | 正整数;为空时不限制 | 单个 BI 用户每秒允许发起的各类请求的最大次数 |
| 单页最大行数 | 10000 行 | 正整数;为空时不限制 | 数据查询请求中 pageSize 的最大可用值。请求设置的 pageSize 超过该值时,以此处配置的值为准 |
提示:1. 并发取数相关的取数请求包括维度值取数和维度指标取数。
2. 上述配置对单机生效。集群环境中,各节点的配置分别生效。
3. 从低版本升级至 FineBI 7.0.11 后,默认开启指标服务管控。
4. 修改排队超时时间后,已经入队且正在排队的请求仍使用修改前的超时时间;新入队请求使用修改后的超时时间。
5. “平台调用频率限制”“用户调用频率限制”和“单页最大行数”为空时,表示不限制。
| 触发场景 | 提示信息 |
|---|---|
| 取数请求排队超时 | 当前取数请求过于频繁,请稍后重试 |
| 平台调用频率超过限制 | 当前平台每秒接收的请求个数超出 QPS 限制,请稍后重试 |
| 单个用户调用频率超过限制 | 当前用户每秒发送的请求个数超出 QPS 限制,请稍后重试 |
3. 接口信息
以下是发布到「数据目录」中的指标/维度资源调用接口:
| 类型 | 接口 | 描述 |
|---|---|---|
| 搜索数据资源 | 搜索资源 | 同数据目录搜索 |
| 查看指标语义信息 | 查看指标属性 | 同数据目录指标详情,包含基础信息、标签、扩展字段、计算口径等 |
| 查看指标血缘 | 同数据目录指标血缘 | |
| 查看相关维度 | 同数据目录指标相关维度 | |
| 查看维度语义信息 | 查看维度属性 | 同数据目录维度详情,包含基础信息、标签、扩展字段、计算口径等 |
| 查看维度血缘 | 同数据目录维度血缘 | |
| 查看相关指标 | 同数据目录维度相关指标 | |
| 查看维度值 | 查看维度值 | 同数据目录维度预览,支持分页、搜索 |
| 数据查询 | 获取指标的结果集 | 同数据目录指标维度数据校验 |
| 获取指标的查询sql | 获取直连查询SQL,了解指标查询的取数逻辑,方便进行数据校验以及性能调优 |
4. 错误码说明
响应失败部分场景会返回错误码信息,不同报错原因对应的错误码如下表所示:
| 报错原因 | 错误码 |
|---|---|
| 参数异常 | 61310024 |
| 指标不存在 | 61310111 |
| 指标无权限 | 61310112 |
| 指标未发布 | 61310119 |
| 维度不存在 | 61310113 |
| 维度无权限 | 61310114 |
| 维度未发布 | 61310120 |
5. FDL读取指标中心数据并落库
使用 FineDataLInk 将接口中的指标维度数据取出,并写入指定的数据库。其他系统即可直接使用指标中心的数据。数据库中取出的数据,如下图所示:
详情请参见文档:FineDataLink读取指标中心数据并落库

