【问题标题】:Validating JSON payload with AVRO schema particularly for "fixed" datatype使用 AVRO 模式验证 JSON 有效负载,特别是对于“固定”数据类型
【发布时间】:2020-03-23 12:13:19
【问题描述】:

JSON 负载:

{
"BILLING_EVENT_RULE_MET_DT": "lsks",
"PlanType":"hhh"
}

AVRO 架构:

{
  "name": "Subscription",
  "type":"record",
  "doc": "Subscription details",
  "fields": 
    [
    { "name": "BILLING_EVENT_RULE_MET_DT",  "type":[ "null","string"],"default": null },

    {"name": "PlanType",
    "type":
         {
         "name":"PlanType",
         "type": "fixed",
            "size": 4
         }
    }
    ]
}

ERROR:
The value [hhh] for field [PlanType] should be [FixedType <size: 4, name: PlanType, namespace: None, aliases: None>].

在验证它给我以下错误时,我应该在 PlanType 字段的 json 有效负载中写什么? 实际上这就是我正在探索的所有内容,因为我想为类似于 XML 模式的 AVRO 模式中的字段定义 maxlength 和 minlength。

【问题讨论】:

    标签: json schema avro avro-tools


    【解决方案1】:

    如果“PlanType”的字段大小不是常数,则不能使用“固定”类型。

    如果数据是字符串,你可以使用'string'类型;如果数据类型是任何字节序列,你可以使用'bytes'类型。

    请注意,使用“字符串”或“字节”意味着它不能没有字符/零字节。

    要启用空值,您应该使用联合类型(即“null”和“字符串”的联合或“空”和“字节”的联合)。

    没有办法将最小尺寸或最大尺寸作为 avro 架构的一部分。请参阅avro specification

    【讨论】:

    • 那么你能给我一个固定类型的 json 示例,以便我可以运行 AVRO 验证吗?
    • 如果字段的大小不固定,则不应使用'fixed'类型。改用“字符串”或“字节”。在 json 模式中,只需将单词 'fixed' 替换为 'string'。
    • 并删除“大小”字段
    • 不,我的主要目标是知道如何在 AVRO 中使用固定类型。所以我需要一个 JSON 有效负载,它将验证到定义了固定类型的 AVRO 模式。那么你能根据我在 AVRO 中定义的固定类型模式给我一个固定类型 JSON 有效负载的示例吗??
    • 我不完全理解这个问题。固定类型意味着字段的大小是固定的。如果大小为 4 字节,则数据 json 应在字段“PlanType”处包含 4 个字符
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-24
    • 2015-05-05
    • 2019-04-21
    • 2021-05-14
    相关资源
    最近更新 更多