OpenMetadata ODCS 数据契约导入测试指南:v3.1.0 示例集与导入流程全解 📅 发布时间:2026/9/14 5:52:57 👁 浏览次数: OpenMetadata ODCS 数据契约导入测试指南v3.1.0 示例集与导入流程全解【免费下载链接】OpenMetadataThe Open Context Layer for Data and AI , OpenMetadata is the open platform for building trusted data context and business semantics for humans, AI assistants, and agents.项目地址: https://gitcode.com/GitHub_Trending/op/OpenMetadataODCSOpen Data Contract Standard开放数据契约标准是跨平台描述数据契约Data Contract的行业规范OpenMetadata 在后端通过 ODCSConverter.java 实现与 ODCS v3.1.0 格式的双向转换并在前端提供「Import from ODCS」导入能力。本文以仓库中openmetadata-ui/src/main/resources/ui/playwright/test-data/odcs-examples/目录下的官方测试样例为骨架系统讲解 ODCS 契约文件的字段语义、合法/非法样例设计、导入的三种模式新建 / 合并 / 替换、多对象契约处理以及质量规则与 SLA 的映射原理帮助开发者快速上手 ODCS 导入功能的手工验证与 Playwright 自动化测试。ODCS 测试示例目录总览odcs-examples目录存放了用于手工测试 ODCS 导入功能的示例文件全部位于 test-data/odcs-examples/ 下分为三类合法示例Valid Examples、与 sample_data 兼容的示例Sample Data Compatible Examples与非法示例Invalid Examples。它们同时被 Playwright 端到端测试 ODCSImportExport.spec.ts 直接引用测试注释明确写道Tests using actual test-data files from test-data/odcs-examples/因此既是手工验证的素材也是自动化测试的黄金数据集。合法示例Valid Examples文件说明覆盖测试点valid-basic.yaml最小合法契约基础解析仅包含必填字段valid-full.yaml包含所有 section 的完整契约Schema、SLA、Team、Roles、Qualityvalid-with-timestamps.yaml使用 v3.1.0 timestamp/time 类型的契约新增逻辑类型、时区选项valid-quality-rules.yaml含完整质量规则的契约库内置指标、自定义规则、调度valid-draft-status.yamldraft 状态的契约非 active 状态处理valid-basic.jsonJSON 格式的基础契约JSON 解析支持valid-full.jsonJSON 格式的完整契约含全部 section 的 JSONvalid-multi-object.yaml含多个 schema 对象的契约多对象选择此外目录中还提供了 README 表格之外但同样被测试引用的样例valid-quality-rules-between.yamlmustBeBetween/mustNotBeBetween断言、valid-with-team.yaml、valid-full-no-schema.yaml无 schema 的完整契约以及 invalid-schema-fields.yaml字段与目标表不匹配。与 sample_data 兼容的示例以下文件与 OpenMetadata 内置 sample_data 服务中的真实表结构一一对应用于在 sample_data 服务上进行端到端验证文件说明目标表sample-data-dim-address.yamldim_address 表的契约sample_data.ecommerce_db.shopify.dim_addresssample-data-dim-customer.yamldim_customer 表的契约sample_data.ecommerce_db.shopify.dim_customersample-data-multi-object.yaml多对象契约address、customer、location任意匹配的 sample_data 表以 sample-data-dim-address.yaml 为例它的schema.properties完整列出了address_id、shop_id、first_name、last_name、address1、address2、company、city、region、zip、country、phone共 12 个字段并标注了复合主键address_idshop_id通过primaryKeyPosition: 1/2表示次序因此导入时可以与真实表的列做逐字段校验。非法示例Invalid Examples文件说明预期错误invalid-missing-apiversion.yaml缺少 apiVersion 字段Invalid ODCS contract formatinvalid-missing-kind.yaml缺少 kind 字段Invalid ODCS contract formatinvalid-missing-status.yaml缺少 status 字段Invalid ODCS contract formatinvalid-wrong-apiversion.yaml非法的 apiVersion 值v99.0.0后端校验错误invalid-wrong-kind.yaml错误的 kind 值ServiceContract后端校验错误invalid-malformed-yaml.yaml非法的 YAML 语法YAML 解析错误invalid-malformed.json非法的 JSON 语法JSON 解析错误invalid-empty-file.yaml空文件 / 仅注释文件Invalid ODCS contract formatinvalid-not-yaml.txt纯文本文件文件类型拒绝这些非法样例被 ODCSImportExport.spec.ts 中的常量如ODCS_INVALID_MISSING_APIVERSION_YAML、ODCS_INVALID_MALFORMED_YAML等定义于 playwright/constant/dataContracts.ts逐一消费用于断言错误提示与导入按钮禁用态。ODCS v3.1.0 核心文件结构剖析在深入测试场景前先理解一个合法 ODCS 契约文件的最小结构。以下是最小合法契约 valid-basic.yaml 的完整内容Apache 2.0 许可证头已省略apiVersion: v3.1.0 kind: DataContract id: basic-contract name: Basic ODCS Contract version: 1.0.0 status: active五个字段缺一不可apiVersion声明标准版本当前仓库后端固定导出为V_3_1_0见ODCSConverter.toODCS()中odcs.setApiVersion(ODCSDataContract.OdcsApiVersion.V_3_1_0)kind固定为DataContractODCSDataContract.OdcsKind.DATA_CONTRACTid为契约唯一标识导入时被忽略由 OpenMetadata 自行生成 UUIDname映射为 OpenMetadata 契约的nameversion为语义化版本号映射为contractVersionstatus取值active或draft。完整契约description / slaProperties / rolesvalid-full.yaml 展示了包含全部核心 section 的写法apiVersion: v3.1.0 kind: DataContract id: full-contract name: Complete ODCS Contract version: 2.0.0 status: active description: purpose: Comprehensive data contract for customer analytics. limitations: Historical data only, no PII exposed. usage: For internal analytics dashboards and ML models. slaProperties: - property: freshness value: 12 unit: hour - property: latency value: 2 unit: hour - property: retention value: 365 unit: day roles: - name: data_admin description: Full access to all data access: readWrite - name: analyst description: Read-only access for analysis access: read其中description的三个子字段purpose、limitations、usage语义分别对应契约用途、限制与使用场景slaProperties是一个属性数组property取值如freshness新鲜度、latency延迟、retention保留期配合valueunit表达量化指标roles定义数据访问角色如readWrite/read。在 OpenMetadata 中description.purpose映射为契约的descriptionslaProperties映射为slaroles直接映射为roles详见下文「OpenMetadata 字段映射」小节。v3.1.0 新增特性时间类型与 SLA 时区ODCS v3.1.0 引入了两类关键增强valid-with-timestamps.yaml 专门用于覆盖logicalType: timestamp与logicalType: timeschema 字段可声明时间戳与时间逻辑类型并支持时区选项SLA 时区字段slaProperties条目可携带timezone例如slaProperties: - property: freshness value: 6 unit: hour timezone: GMT00:00 UTC - property: latency value: 15 unit: minute - property: availability value: 99.9 unit: percent timezone: GMT-05:00 America/New_York注意同一契约中不同 SLA 属性可指定不同时区如 UTC 与 America/New_York便于表达跨地域的数据承诺。此外 v3.1.0 还包括质量指标库rowCount、nullValues、invalidValues、duplicateValues、missingValues与质量调度schedulerschedule字段在下一节展开。质量规则Quality详解valid-quality-rules.yaml 是质量规则最完整的示例包含库内置指标、自定义 SQL 规则与定时调度三类schema: - name: products logicalType: object properties: - name: sku logicalType: string primaryKey: true - name: product_name logicalType: string required: true - name: price logicalType: decimal logicalTypeOptions: precision: 10 scale: 2 - name: stock_quantity logicalType: integer - name: last_updated logicalType: timestamp quality: # 库内置指标built-in library metrics - type: library rule: rowCount mustBeGreaterThan: 1000 description: Product catalog must have at least 1000 items - type: library rule: nullValues column: sku mustBe: 0 description: SKU cannot be null - type: library rule: duplicateValues column: sku mustBe: 0 description: SKU must be unique - type: library rule: invalidValues column: category mustBeLessThan: 5 - type: library rule: missingValues column: price mustBeLessThanOrEqualTo: 10 description: Allow up to 10 missing prices # 自定义 SQL 规则 - type: custom rule: price 0 column: price description: Price must be positive - type: custom rule: LENGTH(sku) BETWEEN 8 AND 12 column: sku # 定时质量检查 - type: library rule: nullValues column: last_updated scheduler: cron schedule: 0 6 * * * description: Daily check for update timestamps要点归纳type: library使用内置指标库rule支持rowCount、nullValues、invalidValues、duplicateValues、missingValues并可与column组合限定作用列断言关键字mustBe、mustBeGreaterThan、mustBeLessThan、mustBeLessThanOrEqualTo。目录中另有 valid-quality-rules-between.yaml 补充mustBeBetween与mustNotBeBetween区间断言以及同一指标多断言叠加如uniqueValues同时满足mustBeGreaterThan: 0与mustBeLessThan: 1000000type: custom直接书写 SQL 表达式作为自定义校验规则如price 0、LENGTH(sku) BETWEEN 8 AND 12调度scheduler: cronschedule: 0 6 * * *声明每日 6 点执行schema 字段的logicalTypeOptions可携带precision/scale等类型参数required/primaryKey表达约束。在 OpenMetadata 后端质量规则通过 ODCSConverter 转换为测试用例Test Case即 README 映射表中的quality → Mapped to test cases。导入后这些规则会落为可执行的数据质量测试而非仅停留在契约文档层面。多对象Multi-Object契约ODCS 契约的schema是一个数组可以同时描述多个表对象。valid-multi-object.yaml 定义了customers、orders、products三个对象而 sample-data-multi-object.yaml 则贴合 sample_data 定义dim_address、dim_customer、dim_location三个对象每个对象都声明logicalType: object、physicalType: table并各自携带独立的properties字段集合与description。导入多对象契约时UI 会提示This contract contains multiple schema objects并展示对象选择下拉框Import 按钮在用户选定对象前保持禁用选定后校验与导入都基于所选对象进行最终契约只保留选中对象的 schema——这保证了「一个契约对应一张表」的语义不会因多对象文件而破坏。OpenMetadata 字段映射表导入/导出时ODCS 字段与 OpenMetadata DataContract 字段的对应关系如下源自 README.md 并可由 ODCSConverter.java 的双向转换逻辑佐证ODCS FieldOpenMetadata Fieldid忽略由 OM 生成namenameversioncontractVersionstatusstatusdescription.purposedescriptionschemaschemaslaPropertiesslaquality映射为测试用例teamowners/stakeholdersrolesroles手工测试场景7 大场景逐步验证以下场景按 README 提供的手工测试脚本整理覆盖从无契约新建到错误处理的完整闭环。场景 1新建契约导入无既有契约进入一张尚无数据契约的表点击Add Contract Import from ODCS上传任意合法文件如valid-basic.yaml校验契约预览信息正确点击Import校验契约以正确数据创建。场景 2与既有契约合并Merge进入一张已有数据契约的表点击Manage Import ODCS上传合法文件校验出现Existing contract detected警告选择Merge with existing选项校验合并说明描述了将要发生的行为点击Import校验既有 ID 被保留、新字段被合并。合并语义在测试 ODCSImportExport.spec.ts 中被严格断言合并后原契约名称被保留original contract name is preserved (merge behavior)来自完整契约的 SLA 与 roles 被增量并入导出验证时能看到新增的slaProperties与roles。场景 3替换既有契约Replace进入一张已有数据契约的表点击Manage Import ODCS上传合法文件选择Replace existing选项校验替换警告展示数据丢失影响点击Import校验旧契约被删除、新契约被创建。替换模式的测试断言值得注意Replace mode preserves identity fields (ID, name, FQN) but replaces content—— 即身份字段ID、name、FQN保留内容整体替换。导入valid-basic.yaml无 SLA/roles后SLA 卡片不再显示导出文件包含slaProperties: []与roles: []空数组见 ODCSImportExport.spec.ts。场景 4错误处理逐个上传非法示例文件invalid-missing-apiversion.yaml、invalid-malformed-yaml.yaml等校验展示相应的错误提示校验非法文件下Import 按钮被禁用。场景 5文件类型校验尝试上传invalid-not-yaml.txt校验文件被拒绝仅接受.yaml/.yml扩展名。场景 6多对象契约导入进入一张表如 sample_data 的dim_address点击Add Contract Import from ODCS上传valid-multi-object.yaml或sample-data-multi-object.yaml校验出现This contract contains multiple schema objects提示校验对象选择下拉框展示全部 schema 对象如dim_address、dim_customer、dim_location校验未选择对象时 Import 按钮禁用选择与目标表匹配的 schema 对象如dim_address表选择dim_address校验基于所选对象执行校验点击Import校验契约仅使用所选对象的 schema 创建。场景 7基于 sample_data 的验证以 sample_data 数据启动 OpenMetadata进入sample_data.ecommerce_db.shopify.dim_address上传sample-data-dim-address.yaml校验 schema 校验通过所有列均匹配导入并校验契约拥有正确的 schema 定义。自动化测试从手工步骤到 Playwright 脚本上述手工步骤在仓库中已完全自动化。测试入口 ODCSImportExport.spec.ts共 2200 行通过import-exporttag 组织用例核心交互封装在 utils/odcsImportExport.ts 中navigateToContractTab进入实体页并点击[data-testidcontract]标签openODCSImportDropdown根据有无既有契约自适应点击add-contract-button或manage-contract-actionsimportODCSYaml(page, yamlContent, filename, options?)打开import-contract-modal通过file-upload-input注入文件内容mimeType: application/yaml如存在既有契约则选择import-mode-merge/import-mode-replace单选按钮随后监听接口响应并点击import-button。值得注意的是 importODCSYaml 中关于 API 端点的注释它揭示了前后端契约新建契约POST /api/v1/dataContracts/odcs/yaml合并 / 替换PUT /api/v1/dataContracts/odcs/yaml带 mode 参数。即导入过程实际是「前端解析文件 → 调用后端 ODCS 转换接口 → 落库」而转换与校验的核心逻辑位于后端 ODCSConverter.java1200 行提供toODCS()导出与对应的 ODCS→OpenMetadata 导入转换覆盖 ODCS 的 DataContract、Description、SlaProperty、QualityRule、SchemaElement、Role、TeamMember 等全部 v3.1.0 结构。验证导入成功的方式是等待toastNotification(page, ODCS Contract imported successfully)提示这与 UI 上真实的成功 Toast 一致。测试样本的组织建议从该目录的设计可以提炼出组织 ODCS 测试样本的三条实践原则供后续扩展参考按「合法 / 兼容 / 非法」三分类组织合法样本验证正常路径sample_data 兼容样本验证真实表结构匹配非法样本验证每条校验分支缺字段、错值、语法错误、空文件、类型拒绝用文件名表达意图valid-*、invalid-*、sample-data-*前缀让测试与手工验证都能快速定位README 中的表格同时充当「文件 → 覆盖点」的可追溯矩阵一个样例聚焦一个特性valid-with-timestamps.yaml专测时间类型与时区、valid-quality-rules.yaml专测质量规则、valid-multi-object.yaml专测多对象——特性隔离让失败用例能精准定位到具体功能分支。小结ODCS v3.1.0 导入是 OpenMetadata 数据契约能力对接行业标准的关键路径前端提供「新建 / 合并 / 替换」三种导入模式与多对象选择、文件类型校验等交互后端由ODCSConverter完成双向映射并把质量规则落地为测试用例。odcs-examples目录中成体系的合法、非法与 sample_data 兼容样例既是手工验收的即用素材也是 Playwright 自动化回归的测试数据源建议在接入或改造 ODCS 导入功能时直接复用这套样本与测试脚本ODCSImportExport.spec.ts、utils/odcsImportExport.ts快速获得完整覆盖。【免费下载链接】OpenMetadataThe Open Context Layer for Data and AI , OpenMetadata is the open platform for building trusted data context and business semantics for humans, AI assistants, and agents.项目地址: https://gitcode.com/GitHub_Trending/op/OpenMetadata创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考