From 9ef15cc5b2a7989c052b939527a2ade527864b1d Mon Sep 17 00:00:00 2001 From: Christian Senet Date: Wed, 13 Mar 2019 08:27:48 +0100 Subject: [PATCH] #5884 Avro Maps can't be flattened in Kafka Indexing --- .../druid/data/input/avro/GenericAvroJsonProvider.java | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/extensions-core/avro-extensions/src/main/java/io/druid/data/input/avro/GenericAvroJsonProvider.java b/extensions-core/avro-extensions/src/main/java/io/druid/data/input/avro/GenericAvroJsonProvider.java index db21a7a4935a..f0656a9ba2c4 100644 --- a/extensions-core/avro-extensions/src/main/java/io/druid/data/input/avro/GenericAvroJsonProvider.java +++ b/extensions-core/avro-extensions/src/main/java/io/druid/data/input/avro/GenericAvroJsonProvider.java @@ -23,6 +23,7 @@ import com.jayway.jsonpath.spi.json.JsonProvider; import org.apache.avro.Schema; import org.apache.avro.generic.GenericRecord; +import org.apache.avro.util.Utf8; import java.io.InputStream; import java.util.ArrayList; @@ -135,13 +136,20 @@ public void setArrayIndex(final Object o, final int i, final Object o1) } } + private Object transformAvroMapKey(String keyToTransform, Map avroMapObj) { + Object key = avroMapObj.keySet().iterator().next(); + if (key instanceof Utf8) { + return new Utf8(keyToTransform); + } + return keyToTransform; + } @Override public Object getMapValue(final Object o, final String s) { if (o instanceof GenericRecord) { return ((GenericRecord) o).get(s); } else if (o instanceof Map) { - return ((Map) o).get(s); + return ((Map) o).get(transformAvroMapKey(s,(Map) o)); } else { throw new UnsupportedOperationException(o.getClass().getName()); }