groovyavrodivolte

Corresponding 'Groovy' mapping for required Avro Schema - divolte


I am trying to write a divolte - Groovy mapping for my required Avro Schema, but is throwing errors each time.

Can someone help me with the compatible groovy script mapping ?

Divolte - 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 }
  ]
}

Thank you.


Solution

    1. To map Avro 'array' in Groovy mapping DSL, below hack is used. See Groovy mapping for Avro 'array'
    map eventParameters().path('$.roleId.*') onto 'roleId'
    map eventParameters().path('$.roleName.*') onto 'roleName'
    
    1. There is no official support for Avro 'enum' field in Groovy mapping DSL. Extend Avro 'enum' field support in mapping DSL