业务指标治理 Skill(查重 · 新建 · 关联技术指标)
1. Scenario Description
在 Dataphin「资产治理管理 → 资产 → 业务指标」中,用业务语言登记指标口径,并把它映射到可计算的技术指标上。业务指标解决「这个指标是什么意思、谁负责」,技术指标解决「这个数怎么算出来」。
本 Skill 覆盖两段业务动作:
- 查重后新建业务指标 — 先召回已有指标做语义查重;发现相似项必须停下、列出相似原因、等用户明确确认才允许创建,避免指标口径重复建设。
- 关联技术指标 — 查业务指标当前关联情况;未关联则在资产目录中找可用技术指标(自定义指标
CUSTOM_INDEX或规范建模派生指标INDEX)并建立关联。
找不到任何可用技术指标时,转交子 skill develop-metric 做指标开发,开发完成后回到本 skill 的 Step 5 完成关联。
Architecture
用户描述指标需求
→ Step 1 三路召回已有业务指标(get-by-name×2 + 资产目录模糊搜索)
→ Step 2 语义查重 →【有相似项:阻塞,等用户确认】
→ Step 3 create-biz-metric 创建(HITL)
→ Step 4 查关联技术指标(get-biz-metric-by-name → list-catalog-assets INDEX)
→ Step 5 update-biz-metric 关联技术指标(HITL)
└ 无可用技术指标 → 转 develop-metric skill → 回到 Step 5
涉及 Dataphin OpenAPI
ListCatalogAssets— 查资产目录列表(BIZ_INDEX业务指标 /INDEX技术指标),上线版本 v6.1.0GetBizMetricByName— 按名称查业务指标详情,v5.5.0CreateBizMetric— 创建业务指标,v5.5.0UpdateBizMetric— 更新业务指标(含关联技术指标),v5.5.0DeleteBizMetric— 删除业务指标,v5.5.0
版本门槛:资产目录相关命令需目标环境 ≥ v6.1.0;业务指标命令需 ≥ v5.5.0。低于门槛时相关命令不存在或报错,应告知用户升级而非换参数重试。
2. Installation
# 安装 aliyun CLI(>= 3.4.8)
# 各操作系统一键安装脚本见 ./references/cli-installation-guide.md
# 安装 dataphin-public 插件
aliyun plugin install --names aliyun-cli-dataphin-public
# 验证
aliyun dataphin-public --help
详见 CLI 安装指南。
3. Environment Variables
| 变量 | 说明 | 必须 |
|---|---|---|
ALIBABA_CLOUD_ACCESS_KEY_ID | RAM AccessKey ID | 是 |
ALIBABA_CLOUD_ACCESS_KEY_SECRET | RAM AccessKey Secret | 是 |
或通过 aliyun configure 配置 profile。
4. Authentication
Pre-check: Credentials Required
Security Rules:
- NEVER 读取、回显或打印凭证环境变量(禁止对 AccessKey ID / Secret 做任何输出或日志)
- NEVER 要求用户在本会话或命令行直接输入 AK/SK
- NEVER 使用
aliyun configure set写入字面量凭证- ONLY 使用
aliyun configure list检查凭证状态aliyun configure list检查输出中是否存在有效 profile(AK、STS 或 OAuth 身份)。
如果没有有效 profile,请在此停止。
- 从 Alibaba Cloud Console 获取凭证
- 在会话外配置(终端执行
aliyun configure,或在 shell profile 中设置环境变量)- 重新运行
aliyun configure list确认有效后再继续
Pre-check: Aliyun CLI >= 3.4.8 required
执行
aliyun version确认版本 >= 3.4.8;不达标见 references/cli-installation-guide.md。
Pre-check: Aliyun CLI plugin update required
[MUST] run
aliyun configure set --auto-plugin-install trueto enable automatic plugin installation. [MUST] runaliyun plugin updateto ensure that any existing plugins are always up-to-date.
5. RAM Policy
[MUST] Permission Failure Handling: When any command or API call fails due to permission errors at any point during execution, follow this process:
- Read
../../ram-policies.mdto get the full list of permissions required by this SKILL- Use
ram-permission-diagnoseskill to guide the user through requesting the necessary permissions- Pause and wait until the user confirms that the required permissions have been granted
本 skill 最小权限见 ../../ram-policies.md。
除 RAM Action 外还需 Dataphin 平台内角色(已实测):读写业务指标都需要资产维护人员或拥有**「上架管理-管理」权限的角色。权限不足时的报错都不是标准 403**:写操作返回顶层
Code: OK但Data.Success=false(见 §9),读详情返回DPN.Mdc.Shelve.ShelveObjectNoViewAuth(见 §8 Step 1)。实测赋权后同一指标同一命令即返回OK,所以遇到这两种报错应先怀疑权限,不要改参数重试。
6. IMPORTANT: Parameter Confirmation
IMPORTANT: Parameter Confirmation — Before executing any command or API call, ALL user-customizable parameters MUST be confirmed with the user. Do NOT assume or use default values without explicit user approval.
创建 / 更新前必须逐项确认,禁止静默填默认值:
| 参数 | 必填 | 说明 |
|---|---|---|
--tenant-id | 是 | 租户 ID(19 位大整数,字符串传参) |
--biz-metric-name | 是 | 指标名称,租户内唯一;仅接受英文字母、数字与 -_/\·#$^&*()%+=,≤256 字符。中文名会被拒绝 |
--display-name | 建议必填 | 展示名称,中文指标名放这里 |
--metric-definition | 建议必填 | 指标口径;引用其他业务指标时用半角中括号 [指标名] 包裹 |
--biz-owner-name | 否 | 业务负责人账号用户名(不是显示名) |
--description | 否 | 描述 |
--catalog-ids | 否 | 归属目录 ID 列表(list 型,取值见 §8 Step 3 说明) |
--labels | 否 | 资产标签(list 型) |
--associated-tech-metric-full-names | 否 | 关联技术指标全名列表(list 型,格式见 §类型分支) |
--related-biz-metrics | 否 | 相关业务指标列表(list 型) |
--view-scope | 否 | 可见范围(object 型) |
--new-name | 否(update) | 改名时才传 |
7. Observability
版本 {version}(Shell 变量 SKILL_VERSION)来自套件 references/manifest.json 的 version 字段,与 session-id 一同继承父技能 §7。直接加载本子技能时先完成父层初始化;所有 CLI / SDK 调用使用父技能名称与同一版本,跨 Shell 调用须重新注入这些值。
本 Skill 属于 alibabacloud-dataphin-skills 套件,继承父 Skill alibabacloud-dataphin-skills 的 session-id,子 Skill 不再重新生成。
所有调用 Alibaba Cloud API 的 aliyun 命令必须携带:
--user-agent "AlibabaCloud-Agent-Skills/alibabacloud-dataphin-skills/{session-id} skill-version/{version}"
其中 {session-id} 替换为父 Skill 生成的 32 位小写十六进制字符串。本地工具命令(configure / plugin / version)不支持该 flag,不需携带。
8. Core Workflow
TENANT_ID="<19 位租户 ID,字符串>"
SESSION_ID="<继承自 alibabacloud-dataphin-skills>"
USER_AGENT="AlibabaCloud-Agent-Skills/alibabacloud-dataphin-skills/$SESSION_ID skill-version/$SKILL_VERSION"
Step 1 · 三路召回已有业务指标(只读)
以 1a/1b 精确查为权威判定,1c 用于找近义指标(顺序与理由见下方错误码表):
# 1a) 精确名 · 草稿/未上架态 ★ 判定「同名是否已存在」的权威路径
aliyun dataphin-public get-biz-metric-by-name --tenant-id "$TENANT_ID" \
--biz-metric-name "<候选指标名>" --draft true \
--user-agent "$USER_AGENT" --format json
# 1b) 精确名 · 已上架态
aliyun dataphin-public get-biz-metric-by-name --tenant-id "$TENANT_ID" \
--biz-metric-name "<候选指标名>" --draft false \
--user-agent "$USER_AGENT" --format json
# 1c) 语义近邻 · 资产目录模糊搜索(关键词最多 3 个,逐个搜;page-size 20)
aliyun dataphin-public list-catalog-assets --tenant-id "$TENANT_ID" \
--asset-type BIZ_INDEX --query-mode ASSET_SEARCH \
--keyword "<业务关键词,如 客户数>" --page-size 20 \
--user-agent "$USER_AGENT" --format json
错误码语义对照(全部已实测,判定存在性只认这张表)
Code | Message | 真实含义 | 能否创建同名 |
|---|---|---|---|
OK | — | 指标存在,Data 含完整详情 | 不能(租户内名称唯一) |
DPN.Mdc.Shelve.MetaObjectNotExists | 资产不存在! | 真的不存在 | 可以 |
DPN.Mdc.Shelve.ShelveObjectNotExists | 资产已不在上架状态 | 存在但未上架(--draft false 查未上架指标即此码) | 不能 |
DPN.Mdc.Shelve.ShelveObjectNoViewAuth | 暂无资产详情查看权限 | 调用账号缺权限(缺资产维护人员 / 上架管理-管理),无法判定存在性 | 未知,须先赋权再查 |
[MUST] 三条硬规则:
- 只有
MetaObjectNotExists才代表「不存在、可以建」。ShelveObjectNotExists与ShelveObjectNoViewAuth都不是「不存在」,当成无重复去创建会撞租户内名称唯一约束,并给用户一个错的「没重复」结论。- 新建的业务指标默认「未上架」(实测:创建成功后
--draft false报ShelveObjectNotExists,list-catalog-assets查不到)。所以查重必须查--draft true——它能查到未上架/草稿指标,覆盖率优于资产目录。- 1c 资产目录只覆盖已上架资产,用于找近义指标可以,不能用它判定同名不存在(未上架的搜不到)。
召回纪律(必须遵守):
- 关键词从用户需求里抽核心业务名词 ≤3 个(如「月活客户数」→
客户、月活、活跃),逐个搜一遍即停。 - 禁止对 keyword 做穷举扫描(不要连续试十几个近义词),也不要翻页超过 2 页。
--query-mode ASSET_SEARCH时用--keyword;EXACT_MATCH时用--asset-name,两者不可混用。
Step 2 · 语义查重 + 强制阻塞(本 skill 的核心门禁)
按三个维度判定相似(不是只比名称):
| 维度 | 判定依据 |
|---|---|
| 名称近义 | AssetName / AssetDisplayName 与目标名同义或含同一核心业务词 |
| 口径重叠 | MetricDefinition / AssetDescription 描述的统计对象与聚合方式实质相同 |
| 归属重合 | Directories[] 所在专题/目录相同,说明同一业务域已有近似指标 |
判定结果分两条路径:
- 无相似项 → 明确告知「已按 N 个关键词搜索,未发现相似指标」,可直接进 Step 3。
- 有相似项 → 必须停下,输出相似项表格后等用户明确回复「确认新建」。不得自行判断"其实不算重复"就继续创建。
发现 2 个可能重复的业务指标,请确认是否仍要新建:
| 已有指标名 | 展示名 | 口径 | 所属目录 | 相似原因 |
|---|---|---|---|---|
| customer_cnt | 客户总数 | 所有注册客户去重计数 | 专题B/A1 | 名称与口径均与「客户数」高度重叠 |
| active_cust_m | 月活客户数 | 近30天有下单行为的客户数 | 专题B/A1 | 统计对象相同,仅时间窗不同 |
⚠️ 覆盖率说明:以上查重仅覆盖**已上架到资产目录**的业务指标,未上架的指标搜索不到,存在漏判可能。
请回复「确认新建」以继续,或告知要复用上面哪一个指标。
[MUST] 未拿到用户明确确认前,禁止执行
create-biz-metric。
Step 3 · 创建业务指标(写操作,HITL)
aliyun dataphin-public create-biz-metric --tenant-id "$TENANT_ID" \
--biz-metric-name "monthly_active_customer_cnt" \
--display-name "月活客户数" \
--description "近30天内有有效下单行为的去重客户数" \
--metric-definition "统计周期内有支付成功订单的客户去重计数;引用 [customer_cnt] 作为分母时口径需一致" \
--biz-owner-name "<负责人账号用户名>" \
--labels "客户域" "月度" \
--catalog-ids "11282677537502" \
--user-agent "$USER_AGENT" --format json
参数要点(实测):
--biz-metric-name不接受中文,须用英文/数字/允许的符号;中文名一律放--display-name。- 数组类参数(
--labels/--catalog-ids/--associated-tech-metric-full-names/--related-biz-metrics)是 CLI list 型:多个值空格分隔,不是 JSON 数组。 --catalog-ids没有目录列表接口。取值办法:对同专题下任一已上架资产跑list-catalog-assets,从返回的Directories[].DirectoryId取;取不到就问用户,不要编造 ID。--metric-relation-diagram-switch-open只有在至少配了一个--related-biz-metrics时才能为 true,否则会被自动关闭。
Step 4 · 查关联技术指标(只读)
# 4a) 看该业务指标当前关联了哪些技术指标
aliyun dataphin-public get-biz-metric-by-name --tenant-id "$TENANT_ID" \
--biz-metric-name "monthly_active_customer_cnt" --draft false \
--user-agent "$USER_AGENT" --format json
# 4b) 未关联 → 在资产目录里找可用技术指标
aliyun dataphin-public list-catalog-assets --tenant-id "$TENANT_ID" \
--asset-type INDEX --query-mode ASSET_SEARCH \
--keyword "<业务关键词>" --page-size 20 \
--user-agent "$USER_AGENT" --format json
技术指标两类来源靠 SubType 区分:
SubType | 含义 | 来源 |
|---|---|---|
INDEX | 规范建模技术指标(原子/派生指标) | 规划 → 数据架构 → 规范建模 |
CUSTOM_INDEX | 自定义技术指标 | 基于已有结果表/汇总表登记 |
两类都可以被业务指标关联,优先复用已有的(先派生指标,再自定义指标)。若 TotalCount 为 0 或候选都不满足口径 → 转 develop-metric 做指标开发,完成后回到 Step 5。
Step 5 · 关联技术指标(写操作,HITL)
aliyun dataphin-public update-biz-metric --tenant-id "$TENANT_ID" \
--biz-metric-name "monthly_active_customer_cnt" \
--associated-tech-metric-full-names "dataphin.customer_agg.avg_order_count" \
--user-agent "$USER_AGENT" --format json
类型分支:技术指标全名怎么拼(最容易出错的一步,已实测确认)
官方描述是「所属表全名.指标名称」,其中「所属表全名」=「资产来源.所属表名」。实测正解:
技术指标全名 = 【表资产的
AssetFullName】 +.+ 【指标名】
实测样例(已验证可被服务端正确解析):
| 对象 | 命令 | AssetFullName |
|---|---|---|
| 所属表 | list-catalog-assets --asset-type TABLE | odps.dim_quality_test(= 项目名.表名) |
| 技术指标 | list-catalog-assets --asset-type INDEX | dim_quality_test.stat_count(= 表名.指标名,不含项目名) |
| 传给 API 的全名 | — | odps.dim_quality_test.stat_count |
[MUST] 两条常见陷阱:
- 不要用技术指标自己的
AssetFullName再接指标名——它已经是表名.指标名,再接会得到dim_quality_test.stat_count.stat_count(错);也不能直接用它(缺项目名前缀)。- 不要用
AssetFrom拼——实测同一资产AssetFrom = "Dataphin-通用层-odps (odps)",是展示用的来源描述,不是全名组件。正确做法:先
list-catalog-assets --asset-type INDEX拿到技术指标的AssetName(如stat_count)与所属表名,再--asset-type TABLE拿该表的AssetFullName(如odps.dim_quality_test),两者用.拼接。
1:1 硬约束(已实测):一个技术指标只能被一个业务指标关联。被占用时报(走嵌套路径:顶层 Code: OK 但 Data.Success=false):
Data.Message = "技术指标已被其他业务指标关联,无法重复关联"
注意这条报错恰恰证明全名拼对了(服务端已解析到该技术指标)。此时绝不要改全名格式重试——这是业务唯一性冲突,不是参数问题。正解:告知用户该技术指标已被占用,让其选择换一个技术指标,或先在原业务指标上解除关联(解除需用
update-biz-metric重传不含该全名的列表,属于修改别人的指标,必须先征得用户同意)。查占用者的办法:对候选业务指标跑
get-biz-metric-by-name --draft false,看AssociatedTechMetrics[].Name是否含目标指标名。
关联失败时 create 是原子的(已实测):create-biz-metric 带 --associated-tech-metric-full-names 且关联报错时,业务指标完全不会被创建(反查 MetaObjectNotExists)——不会留下「建了但没关联」的半成品,所以可以直接修正后重试同名创建。
执行前确认(写操作必备 / HITL)
本 skill 的 create / update / delete 均为写操作,执行前必须向用户二次确认:
- 即将执行的命令全文(脱敏后)
- 影响范围(哪个租户 / 目录 / 指标;update 对
--associated-tech-metric-full-names是整体覆盖,不传的会被清空)- 是否可回滚(delete 不可回滚;update 前应先
get-biz-metric-by-name备份原值)- 替代方案(可先用
--cli-dry-run只打印请求不实际调用)仅当用户明确回复「确认 / yes / 执行」后才发起写命令。
9. Success Verification
[MUST] 第一步:先看
Data.Success,不是顶层Code(已实测)。create-biz-metric/update-biz-metric存在嵌套假成功:业务失败时仍返回顶层Code: OK+HttpStatusCode: 200+Success: true,真正的结果在Data.Success与Data.Message里。实测样例:{ "Code": "OK", "HttpStatusCode": 200, "Success": true, // ← 全绿,但并未创建 "Data": { "Success": false, // ← 真实结果在这里 "Message": "资产信息保存失败。失败原因:暂无权限,仅资产维护人员或拥有 上架管理-管理 权限的角色可操作" } }判定顺序:
Data.Success == true才算提交成功(成功时Data.Message= 「资产保存成功」/「资产删除成功」);为 false 时必须把Data.Message原文告知用户,绝不能因为Code: OK就汇报「创建成功」。推荐投影:--cli-query 'Data.{ok:Success,msg:Message}'。注:Data.Data恒为{},创建不返回指标 ID,需反查取Guid。
第二步:反查确认业务生效。新建指标默认未上架,所以必须用 --draft true 反查(用 list-catalog-assets 或 --draft false 反查新建指标一定查不到,会误判成失败):
# ★ 主路径:草稿/未上架态详情反查
aliyun dataphin-public get-biz-metric-by-name --tenant-id "$TENANT_ID" \
--biz-metric-name "<指标名>" --draft true \
--user-agent "$USER_AGENT" --format json
# 辅路径:仅当指标**已上架**时才能命中
aliyun dataphin-public list-catalog-assets --tenant-id "$TENANT_ID" \
--asset-type BIZ_INDEX --query-mode EXACT_MATCH --asset-name "<指标名>" \
--user-agent "$USER_AGENT" --format json
- 创建成功:
Data.Success=true且--draft true反查返回OK,Name/DisplayName/MetricDefinition/Labels与提交一致,Guid形如biz_index.<tenantId>.<logicId>。 - 创建失败:
Data.Success=false(看Data.Message)或--draft true反查报MetaObjectNotExists。 - 关联成功:
--draft true反查的AssociatedTechMetrics[]含目标指标。注意该数组返回的是Name/Guid而非全名(已实测结构),不要拿入参的全名去做字符串比对:"AssociatedTechMetrics": [{ "Name": "stat_count", // ← 比对这个 "DisplayName": "统计计数", "Description": "某种行为或事件的统计次数", "Guid": "cust_index.<tenantId>.odps.dim_quality_test.stat_count", // ← 或比对这个 "SubType": "CUSTOM_INDEX", // INDEX 派生 / CUSTOM_INDEX 自定义 "ListStatus": "ON_SHELVE", // 上架状态 "RelationType": null }] - 删除成功:
--draft true反查报MetaObjectNotExists(「资产不存在!」)。
注意投影吞错:读命令若加了
--cli-query,服务端返回错误体时 JMESPath 匹配不到会输出字面null且退出码 0,看起来像「查询成功但没数据」。拿到null时必须去掉--cli-query原样重跑一次确认是真空值还是接口报错。
详见 references/acceptance-criteria.md。
10. Cleanup
# 删除测试业务指标(不可回滚,需二次确认)
aliyun dataphin-public delete-biz-metric --tenant-id "$TENANT_ID" \
--biz-metric-name "<指标名>" \
--user-agent "$USER_AGENT" --format json
关联关系随业务指标删除一并解除;被解除的技术指标可重新被其他业务指标关联。
11. Command Tables
详见 references/related-commands.md。
12. Best Practices + Reference Links
- 大整数 ID(19 位 snowflake)一律字符串传参,示例中用引号包住
- 写操作执行前必须 HITL 二次确认;查重确认是额外一道业务门禁,不能用命令级确认代替
- 查重先召回再判断,召回关键词 ≤3 个,禁止穷举扫描关键词
- 中文指标名放
--display-name,--biz-metric-name只用英文/数字 - 技术指标全名直接取资产的
AssetFullName再接指标名,不要自行推导「资产来源」 update-biz-metric的列表型字段是整体覆盖,改之前先get备份
✗ 平台限制
✗ 无「业务指标 list」专用接口
- 限制描述:业务指标只有 create / update / get-by-name / delete 四个命令,没有分页列表接口。列表只能借
list-catalog-assets --asset-type BIZ_INDEX。 - 替代方案:精确名用
get-biz-metric-by-name(草稿/已发布各查一次);模糊查用资产目录搜索,并向用户声明覆盖范围限制。
✗ 资产目录只覆盖「已上架」资产
- 限制描述:
list-catalog-assets查的是资产目录,未上架到目录的指标搜不到,因此查重存在漏判。 - 替代方案:查重结论必须附覆盖率声明(见 §8 Step 2 模板);对关键指标建议用户在控制台再核一遍。
✗ 无法通过 OpenAPI 创建技术指标 / 上架资产
- 限制描述:实测插件 0.7.1 无任何创建自定义指标(
CUSTOM_INDEX)、创建派生指标、资产上架/注册的命令。 - 替代方案:技术指标的创建走
develop-metric的人工兜底路径,本 skill 只负责关联已存在的技术指标。
常见坑
[Agent 自主发现] update 整体覆盖 + --view-scope help 不展结构 = 改别人指标的高风险组合
- 现象:
--view-scope的--help只写string, Visibility scope,完全不展开嵌套结构;而出参是对象(实测{"ScopeType":"PART_USERS_CAN_NOT_VIEW","UserIds":["..."],"UserGroupIds":[],"UserNames":[...],"UserGroupNames":null})。叠上列表/对象字段整体覆盖语义,update 不传就会被清空。 - 结论:对已配了可见范围的存量指标做 update 前必须停下——不要凭出参反推入参 JSON(出入参 schema 未必一致,
UserIdsvsUserNames无法从 help 确认),猜错会静默改掉或清空权限。正解:向用户说明风险,让其在控制台改可见范围;或先用--cli-dry-run与用户确认 body 结构再提交。
[Agent 自主发现] 把技术指标自己的 AssetFullName 当表全名用
- 现象:技术指标资产的
AssetFullName实测是dim_quality_test.stat_count(表名.指标名,不含项目名),而表资产的是odps.dim_quality_test(项目名.表名)。直接用前者会缺项目名前缀,再接一次指标名则得到dim_quality_test.stat_count.stat_count。 - 结论:全名只能用表资产的
AssetFullName接指标名(本例 =odps.dim_quality_test.stat_count)。报「技术指标已被其他业务指标关联」反而说明全名拼对了(服务端已解析到),此时不要改格式重试。
[Agent 自主发现] 新建指标默认未上架,用资产目录反查会误判成失败
- 现象:
create-biz-metric返回Data.Success=true「资产保存成功」,但list-catalog-assets --query-mode EXACT_MATCH仍为TotalCount=0,get-biz-metric-by-name --draft false报ShelveObjectNotExists「资产已不在上架状态」;只有--draft true能查到完整详情。 - 结论:指标已创建但未上架。反查新建指标必须用
--draft true;看到TotalCount=0不要当创建失败去重建(会撞名称唯一约束)。
[Agent 自主发现] --catalog-ids 能挂目录,但挂目录 ≠ 上架
- 现象:
update-biz-metric --catalog-ids <DirectoryId>返回「资产保存成功」,--draft true反查Catalogs确已写入(带CatalogId/CatalogName/TopicName),但指标仍未上架(--draft false仍报ShelveObjectNotExists,资产目录仍查不到)。 - 结论:挂目录与上架是两个独立动作,上架无 OpenAPI。不要以为传了
--catalog-ids就上架了,也不要为此反复试参数;需上架时告知用户去控制台操作。
[Agent 自主发现] update 整体覆盖已实测:只改目录会把标签清空
- 现象:创建时
Labels=['客户域','月度'];之后只执行update-biz-metric --catalog-ids <id>(未传--labels),反查发现Labels=[]。 - 结论:列表型字段是整体覆盖而非增量合并,不传就被清空。改任何一个字段前先
get-biz-metric-by-name --draft true取全量,把不改的字段一并回传。
[Agent 自主发现] 写操作的嵌套假成功:Code: OK 但 Data.Success=false
- 现象:权限不足时
create-biz-metric返回顶层Code: "OK"+HttpStatusCode: 200+Success: true,而Data.Success=false、Data.Message="资产信息保存失败。失败原因:暂无权限...";资产目录反查TotalCount=0(确实没建)。 - 结论:只看顶层
Code会把失败汇报成成功——这比白跑一轮严重,因为用户会以为指标已建。判定必须以Data.Success为准,为 false 时原文转达Data.Message,并告知需要「资产维护人员或上架管理-管理权限」。
[Agent 自主发现] get-biz-metric-by-name 报无权限被误读成「指标不存在」
- 现象:同一个已上架指标,
list-catalog-assets能列出(TotalCount=1),但get-biz-metric-by-name返回DPN.Mdc.Shelve.ShelveObjectNoViewAuth「暂无资产详情查看权限」(HTTP 400);赋予资产维护人员/上架管理权限后,同一命令即返回OK。 - 结论:这是调用账号的角色权限不足,不是指标不存在、也不是指标自身的可见范围配置问题。此码下无法判定存在性,应先让用户赋权再查,而不是当「无重复」去创建。
[Agent 自主发现] --biz-metric-name 传中文直接被拒
- 现象:把「月活客户数」直接传给
--biz-metric-name,报名称不符合输入规范。 - 结论:
--biz-metric-name只接受英文字母、数字与-_/\·#$^&*()%+=;中文一律放--display-name,两个字段各司其职。
[Agent 自主发现] get-biz-metric-by-name 漏查草稿态导致误判「不存在」
- 现象:
--draft false查不到就认为指标不存在,实际它是草稿态。 - 结论:
--draft是必填且无默认值,查重时两个取值都要查。
[Agent 自主发现] 用 AssetFrom 拼技术指标全名必然失败
- 现象:手册写「资产来源.所属表名」,把
AssetFrom(dataworks-DataWorks2-...)当资产来源拼进全名,关联报找不到技术指标。 - 结论:全名前半段就是资产返回的
AssetFullName(实测形如dataphin.all_data_types),直接取用不要推导。
[人工注入] 技术指标已被占用时不要盲试
- 现象:关联报「一个技术指标只能被一个业务指标关联」,模型开始换字段名/换全名格式反复重试。
- 结论:这是业务唯一性约束不是参数格式问题,立刻停手并告知用户「该技术指标已被 X 关联」,让其选择换指标或先解除原关联。
Reference Links
- references/cli-installation-guide.md
- ../../ram-policies.md
- references/acceptance-criteria.md
- references/related-commands.md
- 关联 skill:
develop-metric(无可用技术指标时的指标开发链路)、query-asset-details(资产画像/目录层级)、configure-quality-rule(给指标配质量监控)