所需 Avro 模式的对应 'Groovy' 映射 - divolte

Corresponding 'Groovy' mapping for required Avro Schema - divolte

我正在尝试为我所需的 Avro 架构编写一个 divolte - Groovy 映射,但每次都抛出错误。

有人可以帮我处理兼容的 groovy 脚本映射吗?

迪沃尔特 - 0.9.0

{
  "namespace": "io.divolte.record",
  "type": "record",
  "name": "ClickStreamEvent",
  "fields": [
    { "name": "timestamp",               "type": "long" },
    { "name": "clientTimestamp",         "type": "long" },
    { "name": "detectedDuplicate",       "type": "boolean" },
    { "name": "detectedCorruption",      "type": "boolean" },
    { "name": "firstInSession",          "type": "boolean" },
    { "name": "viewportPixelWidth",      "type": ["null", "int"],    "default": null },
    { "name": "viewportPixelHeight",     "type": ["null", "int"],    "default": null },
    { "name": "screenPixelWidth",        "type": ["null", "int"],    "default": null },
    { "name": "screenPixelHeight",       "type": ["null", "int"],    "default": null },
    { "name": "remoteHost",              "type": "string" },
    { "name": "referer",                 "type": ["null", "string"], "default": null },
    { "name": "location",                "type": ["null", "string"], "default": null },
    { "name": "partyId",                 "type": ["null", "string"], "default": null },
    { "name": "sessionId",               "type": ["null", "string"], "default": null },
    { "name": "pageViewId",              "type": ["null", "string"], "default": null },
    { "name": "userAgentString",         "type": ["null", "string"], "default": null },
    { "name": "userAgentName",           "type": ["null", "string"], "default": null },
    { "name": "userAgentFamily",         "type": ["null", "string"], "default": null },
    { "name": "userAgentVendor",         "type": ["null", "string"], "default": null },
    { "name": "userAgentType",           "type": ["null", "string"], "default": null },
    { "name": "userAgentVersion",        "type": ["null", "string"], "default": null },
    { "name": "userAgentDeviceCategory", "type": ["null", "string"], "default": null },
    { "name": "userAgentOsFamily",       "type": ["null", "string"], "default": null },
    { "name": "userAgentOsVersion",      "type": ["null", "string"], "default": null },
    { "name": "userAgentOsVendor",       "type": ["null", "string"], "default": null },                
    { "name": "userId",                 "type": ["null", "string"],  "default":null },
    { "name": "userName",               "type": ["null", "string"],  "default":null },
    { "name": "roleId",                 "type": ["null", {"type":"array", "items": "string"}],  "default":null },
    { "name": "roleName",               "type": ["null", {"type":"array", "items": "string"}],  "default":null },
    { "name": "inputEventType",         "type": {"type": "enum", "name": "eventType", "symbols": ["buttonClick", "pageLoad", "inputChange"]} },
    { "name": "eventName",              "type": "string",           "default":"unknown" },
    { "name": "eventValue",             "type": ["null", "string"], "default":null }
  ]
}

谢谢。

  1. 要在 Groovy 映射 DSL 中映射 Avro 'array',使用以下 hack。 参见 Groovy mapping for Avro 'array'
map eventParameters().path('$.roleId.*') onto 'roleId'
map eventParameters().path('$.roleName.*') onto 'roleName'
  1. Groovy 映射 DSL 中没有对 Avro 'enum' 字段的官方支持。 Extend Avro 'enum' field support in mapping DSL