Avro写入与读取Schema兼容检查
检查两份本地Avro JSON Schema的双向读取兼容性,区分类型提升、别名、默认值与不兼容原因。
- 1添加输入
- 2调整设置
- 3获取结果
工具输入和文件在当前浏览器处理,不会上传。
开始之前
明确谁写数据、谁读取,再检查两种方向。合法但不兼容的Schema会生成完整报告,帮助确认字段新增、改名与类型变化的影响。
如何使用
- 提供原始写入Schema和目标读取Schema。
- 先检查写入→读取,再检查反向;查看false结果的底层解析原因。
- 确认本工具支持边界与业务的数据值约束,再下载JSON或CSV报告。
支持范围与限制
写入Schema可粘贴或选择一份UTF-8文件,读取Schema填在第二输入区;每份最多1 MiB、10000个JSON值与32层。选中文件优先于主文本。重复键、非有限数与不安全整数拒绝,不静默舍入默认值。
支持primitive、record、enum、fixed、array、map、union和具名递归引用,检查写入→读取与读取→写入。完整名称包含namespace;读取方alias、字段默认值和数值提升按Avro解析规则处理。fixed size为1至1048576,结构遍历最多10000节点/32层。
固定avsc5.7.9解析器:union字段默认值必须属于第一分支,暂不接受较新规范中其他匹配分支的默认值。任何logicalType明确拒绝。名称、namespace、alias、字段名或enum symbol出现__proto__、constructor、prototype片段均明确不支持。
只比较Schema解析兼容性,不执行数据、IDL、Schema Registry策略、脚本或服务,也不请求网络。库内部受控resolver代码只在同源独立HTTP Worker执行;Blob Worker和页面内运行受生产CSP限制。底层错误文字不被伪装成精确字段路径。报告含完整双向结果与CSV。
操作示例
示例输入
{
"type": "record",
"name": "Contact",
"fields": [
{
"name": "id",
"type": "int"
}
]
}示例参数
{"secondary":"{\n \"type\": \"record\",\n \"name\": \"Contact\",\n \"fields\": [\n {\n \"name\": \"id\",\n \"type\": \"long\"\n },\n {\n \"name\": \"label\",\n \"type\": \"string\",\n \"default\": \"\"\n }\n ]\n}"}示例输出
{
"writerName": "Contact",
"readerName": "Contact",
"writerToReader": {
"direction": "supplied writer → supplied reader",
"compatible": true,
"resolutionError": null
},
"readerToWriter": {
"direction": "supplied reader → supplied writer",
"compatible": false,
"resolutionError": "cannot read \"long\" as \"int\""
},
"policy": "schema-resolution-only; no registry policy or datum execution"
}出现问题时
修复JSON、Schema名称或默认值,明确处理不支持的logicalType,再运行示例确认可恢复。合法false无需修改输入才能下载;只代表该方向不兼容。
常见问题
false代表输入无效吗?
不一定。两份Schema都合法但无法按该方向解析时,报告会明确false;语法错误或不支持的Schema会直接失败。
这是Schema Registry的兼容策略吗?
不是。这里只检查指定写入/读取Schema的解析关系,不替代Registry的历史版本或策略检查。
支持logicalType或新union默认值吗?
目前明确拒绝logicalType;union默认值必须匹配首分支。请不要删除语义后把结果当作原Schema结论。