diff --git a/benchmarks/src/test/java/org/apache/druid/benchmark/FlattenJSONBenchmark.java b/benchmarks/src/test/java/org/apache/druid/benchmark/FlattenJSONBenchmark.java index ee2b39bc941a..dae20d4402da 100644 --- a/benchmarks/src/test/java/org/apache/druid/benchmark/FlattenJSONBenchmark.java +++ b/benchmarks/src/test/java/org/apache/druid/benchmark/FlattenJSONBenchmark.java @@ -19,7 +19,15 @@ package org.apache.druid.benchmark; -import org.apache.druid.java.util.common.parsers.Parser; +import org.apache.druid.data.input.ColumnsFilter; +import org.apache.druid.data.input.InputRow; +import org.apache.druid.data.input.InputRowSchema; +import org.apache.druid.data.input.impl.ByteEntity; +import org.apache.druid.data.input.impl.DimensionsSpec; +import org.apache.druid.data.input.impl.JsonInputFormat; +import org.apache.druid.data.input.impl.TimestampSpec; +import org.apache.druid.java.util.common.StringUtils; +import org.apache.druid.java.util.common.parsers.CloseableIterator; import org.openjdk.jmh.annotations.Benchmark; import org.openjdk.jmh.annotations.BenchmarkMode; import org.openjdk.jmh.annotations.Fork; @@ -38,7 +46,6 @@ import java.util.ArrayList; import java.util.List; -import java.util.Map; import java.util.concurrent.TimeUnit; @State(Scope.Benchmark) @@ -50,16 +57,22 @@ public class FlattenJSONBenchmark { private static final int NUM_EVENTS = 100000; - List flatInputs; - List nestedInputs; - List jqInputs; - Parser flatParser; - Parser nestedParser; - Parser jqParser; - Parser treeJqParser; - Parser treeTreeParser; - Parser fieldDiscoveryParser; - Parser forcedPathParser; + private static final InputRowSchema INPUT_ROW_SCHEMA = new InputRowSchema( + new TimestampSpec("ts", "iso", null), + DimensionsSpec.EMPTY, + ColumnsFilter.all() + ); + + List flatInputBytes; + List nestedInputBytes; + List jqInputBytes; + JsonInputFormat flatFormat; + JsonInputFormat nestedFormat; + JsonInputFormat jqFormat; + JsonInputFormat treeJqFormat; + JsonInputFormat treeTreeFormat; + JsonInputFormat fieldDiscoveryFormat; + JsonInputFormat forcedPathFormat; int flatCounter = 0; int nestedCounter = 0; int jqCounter = 0; @@ -68,117 +81,159 @@ public class FlattenJSONBenchmark public void prepare() throws Exception { FlattenJSONBenchmarkUtil gen = new FlattenJSONBenchmarkUtil(); - flatInputs = new ArrayList<>(); + flatInputBytes = new ArrayList<>(); for (int i = 0; i < NUM_EVENTS; i++) { - flatInputs.add(gen.generateFlatEvent()); + flatInputBytes.add(StringUtils.toUtf8(gen.generateFlatEvent())); } - nestedInputs = new ArrayList<>(); + nestedInputBytes = new ArrayList<>(); for (int i = 0; i < NUM_EVENTS; i++) { - nestedInputs.add(gen.generateNestedEvent()); + nestedInputBytes.add(StringUtils.toUtf8(gen.generateNestedEvent())); } - jqInputs = new ArrayList<>(); + jqInputBytes = new ArrayList<>(); for (int i = 0; i < NUM_EVENTS; i++) { - jqInputs.add(gen.generateNestedEvent()); // reuse the same event as "nested" + jqInputBytes.add(StringUtils.toUtf8(gen.generateNestedEvent())); // reuse the same event as "nested" } - flatParser = gen.getFlatParser(); - nestedParser = gen.getNestedParser(); - jqParser = gen.getJqParser(); - treeJqParser = gen.getTreeJqParser(); - treeTreeParser = gen.getTreeTreeParser(); - fieldDiscoveryParser = gen.getFieldDiscoveryParser(); - forcedPathParser = gen.getForcedPathParser(); + flatFormat = gen.getFlatFormat(); + nestedFormat = gen.getNestedFormat(); + jqFormat = gen.getJqFormat(); + treeJqFormat = gen.getTreeJqFormat(); + treeTreeFormat = gen.getTreeTreeFormat(); + fieldDiscoveryFormat = gen.getFieldDiscoveryFormat(); + forcedPathFormat = gen.getForcedPathFormat(); } @Benchmark @BenchmarkMode(Mode.AverageTime) @OutputTimeUnit(TimeUnit.MICROSECONDS) - public Map baseline(final Blackhole blackhole) + public InputRow baseline(final Blackhole blackhole) throws Exception { - Map parsed = flatParser.parseToMap(flatInputs.get(flatCounter)); - for (String s : parsed.keySet()) { - blackhole.consume(parsed.get(s)); + try (CloseableIterator iterator = flatFormat.createReader( + INPUT_ROW_SCHEMA, + new ByteEntity(flatInputBytes.get(flatCounter)), + null + ).read()) { + InputRow row = iterator.next(); + for (String dim : row.getDimensions()) { + blackhole.consume(row.getRaw(dim)); + } + flatCounter = (flatCounter + 1) % NUM_EVENTS; + return row; } - flatCounter = (flatCounter + 1) % NUM_EVENTS; - return parsed; } @Benchmark @BenchmarkMode(Mode.AverageTime) @OutputTimeUnit(TimeUnit.MICROSECONDS) - public Map flatten(final Blackhole blackhole) + public InputRow flatten(final Blackhole blackhole) throws Exception { - Map parsed = nestedParser.parseToMap(nestedInputs.get(nestedCounter)); - for (String s : parsed.keySet()) { - blackhole.consume(parsed.get(s)); + try (CloseableIterator iterator = nestedFormat.createReader( + INPUT_ROW_SCHEMA, + new ByteEntity(nestedInputBytes.get(nestedCounter)), + null + ).read()) { + InputRow row = iterator.next(); + for (String dim : row.getDimensions()) { + blackhole.consume(row.getRaw(dim)); + } + nestedCounter = (nestedCounter + 1) % NUM_EVENTS; + return row; } - nestedCounter = (nestedCounter + 1) % NUM_EVENTS; - return parsed; } @Benchmark @BenchmarkMode(Mode.AverageTime) @OutputTimeUnit(TimeUnit.MICROSECONDS) - public Map treejqflatten(final Blackhole blackhole) + public InputRow treejqflatten(final Blackhole blackhole) throws Exception { - Map parsed = treeJqParser.parseToMap(nestedInputs.get(jqCounter)); - for (String s : parsed.keySet()) { - blackhole.consume(parsed.get(s)); + try (CloseableIterator iterator = treeJqFormat.createReader( + INPUT_ROW_SCHEMA, + new ByteEntity(nestedInputBytes.get(jqCounter)), + null + ).read()) { + InputRow row = iterator.next(); + for (String dim : row.getDimensions()) { + blackhole.consume(row.getRaw(dim)); + } + jqCounter = (jqCounter + 1) % NUM_EVENTS; + return row; } - jqCounter = (jqCounter + 1) % NUM_EVENTS; - return parsed; } @Benchmark @BenchmarkMode(Mode.AverageTime) @OutputTimeUnit(TimeUnit.MICROSECONDS) - public Map treetreeflatten(final Blackhole blackhole) + public InputRow treetreeflatten(final Blackhole blackhole) throws Exception { - Map parsed = treeTreeParser.parseToMap(nestedInputs.get(jqCounter)); - for (String s : parsed.keySet()) { - blackhole.consume(parsed.get(s)); + try (CloseableIterator iterator = treeTreeFormat.createReader( + INPUT_ROW_SCHEMA, + new ByteEntity(nestedInputBytes.get(jqCounter)), + null + ).read()) { + InputRow row = iterator.next(); + for (String dim : row.getDimensions()) { + blackhole.consume(row.getRaw(dim)); + } + jqCounter = (jqCounter + 1) % NUM_EVENTS; + return row; } - jqCounter = (jqCounter + 1) % NUM_EVENTS; - return parsed; } @Benchmark @BenchmarkMode(Mode.AverageTime) @OutputTimeUnit(TimeUnit.MICROSECONDS) - public Map jqflatten(final Blackhole blackhole) + public InputRow jqflatten(final Blackhole blackhole) throws Exception { - Map parsed = jqParser.parseToMap(jqInputs.get(jqCounter)); - for (String s : parsed.keySet()) { - blackhole.consume(parsed.get(s)); + try (CloseableIterator iterator = jqFormat.createReader( + INPUT_ROW_SCHEMA, + new ByteEntity(jqInputBytes.get(jqCounter)), + null + ).read()) { + InputRow row = iterator.next(); + for (String dim : row.getDimensions()) { + blackhole.consume(row.getRaw(dim)); + } + jqCounter = (jqCounter + 1) % NUM_EVENTS; + return row; } - jqCounter = (jqCounter + 1) % NUM_EVENTS; - return parsed; } @Benchmark @BenchmarkMode(Mode.AverageTime) @OutputTimeUnit(TimeUnit.MICROSECONDS) - public Map preflattenNestedParser(final Blackhole blackhole) + public InputRow preflattenNestedParser(final Blackhole blackhole) throws Exception { - Map parsed = fieldDiscoveryParser.parseToMap(flatInputs.get(nestedCounter)); - for (String s : parsed.keySet()) { - blackhole.consume(parsed.get(s)); + try (CloseableIterator iterator = fieldDiscoveryFormat.createReader( + INPUT_ROW_SCHEMA, + new ByteEntity(flatInputBytes.get(nestedCounter)), + null + ).read()) { + InputRow row = iterator.next(); + for (String dim : row.getDimensions()) { + blackhole.consume(row.getRaw(dim)); + } + nestedCounter = (nestedCounter + 1) % NUM_EVENTS; + return row; } - nestedCounter = (nestedCounter + 1) % NUM_EVENTS; - return parsed; } @Benchmark @BenchmarkMode(Mode.AverageTime) @OutputTimeUnit(TimeUnit.MICROSECONDS) - public Map forcedRootPaths(final Blackhole blackhole) + public InputRow forcedRootPaths(final Blackhole blackhole) throws Exception { - Map parsed = forcedPathParser.parseToMap(flatInputs.get(nestedCounter)); - for (String s : parsed.keySet()) { - blackhole.consume(parsed.get(s)); + try (CloseableIterator iterator = forcedPathFormat.createReader( + INPUT_ROW_SCHEMA, + new ByteEntity(flatInputBytes.get(nestedCounter)), + null + ).read()) { + InputRow row = iterator.next(); + for (String dim : row.getDimensions()) { + blackhole.consume(row.getRaw(dim)); + } + nestedCounter = (nestedCounter + 1) % NUM_EVENTS; + return row; } - nestedCounter = (nestedCounter + 1) % NUM_EVENTS; - return parsed; } public static void main(String[] args) throws RunnerException diff --git a/benchmarks/src/test/java/org/apache/druid/benchmark/FlattenJSONBenchmarkUtil.java b/benchmarks/src/test/java/org/apache/druid/benchmark/FlattenJSONBenchmarkUtil.java index 754f98f59b49..034bed09254e 100644 --- a/benchmarks/src/test/java/org/apache/druid/benchmark/FlattenJSONBenchmarkUtil.java +++ b/benchmarks/src/test/java/org/apache/druid/benchmark/FlattenJSONBenchmarkUtil.java @@ -26,13 +26,10 @@ import com.fasterxml.jackson.annotation.PropertyAccessor; import com.fasterxml.jackson.databind.ObjectMapper; import com.github.wnameless.json.flattener.JsonFlattener; -import org.apache.druid.data.input.impl.DimensionsSpec; -import org.apache.druid.data.input.impl.JSONParseSpec; -import org.apache.druid.data.input.impl.TimestampSpec; +import org.apache.druid.data.input.impl.JsonInputFormat; import org.apache.druid.jackson.DefaultObjectMapper; import org.apache.druid.java.util.common.parsers.JSONPathFieldSpec; import org.apache.druid.java.util.common.parsers.JSONPathSpec; -import org.apache.druid.java.util.common.parsers.Parser; import java.util.ArrayList; import java.util.Arrays; @@ -52,35 +49,19 @@ public FlattenJSONBenchmarkUtil() mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL); } - public Parser getFlatParser() + public JsonInputFormat getFlatFormat() { - JSONParseSpec spec = new JSONParseSpec( - new TimestampSpec("ts", "iso", null), - DimensionsSpec.EMPTY, - null, - null, - null - ); - return spec.makeParser(); + return new JsonInputFormat(null, null, null, null, null); } - public Parser getFieldDiscoveryParser() + public JsonInputFormat getFieldDiscoveryFormat() { List fields = new ArrayList<>(); JSONPathSpec flattenSpec = new JSONPathSpec(true, fields); - - JSONParseSpec spec = new JSONParseSpec( - new TimestampSpec("ts", "iso", null), - DimensionsSpec.EMPTY, - flattenSpec, - null, - null - ); - - return spec.makeParser(); + return new JsonInputFormat(flattenSpec, null, null, null, null); } - public Parser getNestedParser() + public JsonInputFormat getNestedFormat() { List fields = new ArrayList<>(); fields.add(JSONPathFieldSpec.createRootField("ts")); @@ -113,18 +94,10 @@ public Parser getNestedParser() fields.add(JSONPathFieldSpec.createNestedField("e4.e4.m4", "$.e4.e4.m4")); JSONPathSpec flattenSpec = new JSONPathSpec(true, fields); - JSONParseSpec spec = new JSONParseSpec( - new TimestampSpec("ts", "iso", null), - DimensionsSpec.EMPTY, - flattenSpec, - null, - null - ); - - return spec.makeParser(); + return new JsonInputFormat(flattenSpec, null, null, null, null); } - public Parser getForcedPathParser() + public JsonInputFormat getForcedPathFormat() { List fields = new ArrayList<>(); fields.add(JSONPathFieldSpec.createNestedField("ts", "$['ts']")); @@ -157,18 +130,10 @@ public Parser getForcedPathParser() fields.add(JSONPathFieldSpec.createNestedField("e4.e4.m4", "$['e4.e4.m4']")); JSONPathSpec flattenSpec = new JSONPathSpec(false, fields); - JSONParseSpec spec = new JSONParseSpec( - new TimestampSpec("ts", "iso", null), - DimensionsSpec.EMPTY, - flattenSpec, - null, - null - ); - - return spec.makeParser(); + return new JsonInputFormat(flattenSpec, null, null, null, null); } - public Parser getJqParser() + public JsonInputFormat getJqFormat() { List fields = new ArrayList<>(); fields.add(JSONPathFieldSpec.createRootField("ts")); @@ -199,18 +164,10 @@ public Parser getJqParser() fields.add(JSONPathFieldSpec.createJqField("e4.e4.m4", ".e4.e4.m4")); JSONPathSpec flattenSpec = new JSONPathSpec(true, fields); - JSONParseSpec spec = new JSONParseSpec( - new TimestampSpec("ts", "iso", null), - DimensionsSpec.EMPTY, - flattenSpec, - null, - null - ); - - return spec.makeParser(); + return new JsonInputFormat(flattenSpec, null, null, null, null); } - public Parser getTreeJqParser() + public JsonInputFormat getTreeJqFormat() { List fields = new ArrayList<>(); fields.add(JSONPathFieldSpec.createRootField("ts")); @@ -230,19 +187,10 @@ public Parser getTreeJqParser() fields.add(JSONPathFieldSpec.createJqField("e3.m4", ".e3.m4")); JSONPathSpec flattenSpec = new JSONPathSpec(false, fields); - JSONParseSpec spec = new JSONParseSpec( - new TimestampSpec("ts", "iso", null), - DimensionsSpec.EMPTY, - flattenSpec, - null, - null - ); - - return spec.makeParser(); + return new JsonInputFormat(flattenSpec, null, null, null, null); } - - public Parser getTreeTreeParser() + public JsonInputFormat getTreeTreeFormat() { List fields = new ArrayList<>(); fields.add(JSONPathFieldSpec.createRootField("ts")); @@ -262,15 +210,7 @@ public Parser getTreeTreeParser() fields.add(JSONPathFieldSpec.createTreeField("e3.m4", Arrays.asList("e3", "m4"))); JSONPathSpec flattenSpec = new JSONPathSpec(false, fields); - JSONParseSpec spec = new JSONParseSpec( - new TimestampSpec("ts", "iso", null), - DimensionsSpec.EMPTY, - flattenSpec, - null, - null - ); - - return spec.makeParser(); + return new JsonInputFormat(flattenSpec, null, null, null, null); } public String generateFlatEvent() throws Exception diff --git a/benchmarks/src/test/java/org/apache/druid/benchmark/FlattenJSONBenchmarkUtilTest.java b/benchmarks/src/test/java/org/apache/druid/benchmark/FlattenJSONBenchmarkUtilTest.java index f4b79108f407..c356885b444c 100644 --- a/benchmarks/src/test/java/org/apache/druid/benchmark/FlattenJSONBenchmarkUtilTest.java +++ b/benchmarks/src/test/java/org/apache/druid/benchmark/FlattenJSONBenchmarkUtilTest.java @@ -19,109 +19,145 @@ package org.apache.druid.benchmark; -import org.apache.druid.java.util.common.parsers.Parser; +import org.apache.druid.data.input.ColumnsFilter; +import org.apache.druid.data.input.InputRow; +import org.apache.druid.data.input.InputRowSchema; +import org.apache.druid.data.input.impl.ByteEntity; +import org.apache.druid.data.input.impl.DimensionsSpec; +import org.apache.druid.data.input.impl.JsonInputFormat; +import org.apache.druid.data.input.impl.TimestampSpec; +import org.apache.druid.java.util.common.StringUtils; +import org.apache.druid.java.util.common.parsers.CloseableIterator; import org.apache.druid.utils.JvmUtils; import org.junit.Assert; import org.junit.Test; -import java.util.Map; - public class FlattenJSONBenchmarkUtilTest { + private static final InputRowSchema INPUT_ROW_SCHEMA = new InputRowSchema( + new TimestampSpec("ts", "iso", null), + DimensionsSpec.EMPTY, + ColumnsFilter.all() + ); + @Test public void testOne() throws Exception { FlattenJSONBenchmarkUtil eventGen = new FlattenJSONBenchmarkUtil(); - String newEvent = eventGen.generateFlatEvent(); - String newEvent2 = eventGen.generateNestedEvent(); + byte[] flatEventBytes = StringUtils.toUtf8(eventGen.generateFlatEvent()); + byte[] nestedEventBytes = StringUtils.toUtf8(eventGen.generateNestedEvent()); + + JsonInputFormat flatFormat = eventGen.getFlatFormat(); + JsonInputFormat nestedFormat = eventGen.getNestedFormat(); + JsonInputFormat jqFormat = eventGen.getJqFormat(); + + InputRow event; + InputRow event2; + InputRow event3; - Parser flatParser = eventGen.getFlatParser(); - Parser nestedParser = eventGen.getNestedParser(); - Parser jqParser = eventGen.getJqParser(); + try (CloseableIterator iterator = flatFormat.createReader( + INPUT_ROW_SCHEMA, + new ByteEntity(flatEventBytes), + null + ).read()) { + event = iterator.next(); + } + + try (CloseableIterator iterator = nestedFormat.createReader( + INPUT_ROW_SCHEMA, + new ByteEntity(nestedEventBytes), + null + ).read()) { + event2 = iterator.next(); + } - Map event = flatParser.parseToMap(newEvent); - Map event2 = nestedParser.parseToMap(newEvent2); - Map event3 = jqParser.parseToMap(newEvent2); // reuse the same event as "nested" + try (CloseableIterator iterator = jqFormat.createReader( + INPUT_ROW_SCHEMA, + new ByteEntity(nestedEventBytes), + null + ).read()) { + event3 = iterator.next(); // reuse the same event as "nested" + } checkEvent1(event); checkEvent2(event2); - checkEvent2(event3); // make sure JQ parser output matches with JSONPath parser output + checkEvent2(event3); // make sure JQ format output matches with JSONPath format output } - public void checkEvent1(Map event) + public void checkEvent1(InputRow event) { - Assert.assertEquals("2015-09-12T12:10:53.155Z", event.get("ts").toString()); - Assert.assertEquals("-1170723877", event.get("d1").toString()); - Assert.assertEquals("238976084", event.get("d2").toString()); - Assert.assertEquals("0.9818780016507468", event.get("m3").toString()); - Assert.assertEquals("-3.8218837693501747E18", event.get("m4").toString()); - Assert.assertEquals("-509091100", event.get("e1.d1").toString()); - Assert.assertEquals("274706327", event.get("e1.d2").toString()); - Assert.assertEquals("870378185", event.get("e2.d3").toString()); - Assert.assertEquals("-377775321", event.get("e2.d4").toString()); - Assert.assertEquals("-1797988763", event.get("e2.d5").toString()); - Assert.assertEquals("1309474524", event.get("e2.d6").toString()); - Assert.assertEquals("129047958", event.get("e2.ad1[0]").toString()); - Assert.assertEquals("1658972185", event.get("e2.ad1[1]").toString()); - Assert.assertEquals("-997010830", event.get("e2.ad1[2]").toString()); + Assert.assertEquals("2015-09-12T12:10:53.155Z", event.getRaw("ts").toString()); + Assert.assertEquals("-1170723877", event.getRaw("d1").toString()); + Assert.assertEquals("238976084", event.getRaw("d2").toString()); + Assert.assertEquals("0.9818780016507468", event.getRaw("m3").toString()); + Assert.assertEquals("-3.8218837693501747E18", event.getRaw("m4").toString()); + Assert.assertEquals("-509091100", event.getRaw("e1.d1").toString()); + Assert.assertEquals("274706327", event.getRaw("e1.d2").toString()); + Assert.assertEquals("870378185", event.getRaw("e2.d3").toString()); + Assert.assertEquals("-377775321", event.getRaw("e2.d4").toString()); + Assert.assertEquals("-1797988763", event.getRaw("e2.d5").toString()); + Assert.assertEquals("1309474524", event.getRaw("e2.d6").toString()); + Assert.assertEquals("129047958", event.getRaw("e2.ad1[0]").toString()); + Assert.assertEquals("1658972185", event.getRaw("e2.ad1[1]").toString()); + Assert.assertEquals("-997010830", event.getRaw("e2.ad1[2]").toString()); // Java 19 changes some floating point string representation // https://bugs.openjdk.org/browse/JDK-8291475 if (JvmUtils.majorVersion() < 19) { - Assert.assertEquals("-5.8772014847368817E18", event.get("e3.m1").toString()); + Assert.assertEquals("-5.8772014847368817E18", event.getRaw("e3.m1").toString()); } else { - Assert.assertEquals("-5.877201484736882E18", event.get("e3.m1").toString()); + Assert.assertEquals("-5.877201484736882E18", event.getRaw("e3.m1").toString()); } - Assert.assertEquals("0.4375433369079904", event.get("e3.m2").toString()); - Assert.assertEquals("0.8510482953607659", event.get("e3.m3").toString()); - Assert.assertEquals("-2.3832626488759337E18", event.get("e3.m4").toString()); + Assert.assertEquals("0.4375433369079904", event.getRaw("e3.m2").toString()); + Assert.assertEquals("0.8510482953607659", event.getRaw("e3.m3").toString()); + Assert.assertEquals("-2.3832626488759337E18", event.getRaw("e3.m4").toString()); if (JvmUtils.majorVersion() < 19) { - Assert.assertEquals("7.9789762132607068E18", event.get("e3.am1[0]").toString()); - Assert.assertEquals("-7.8634787235005573E18", event.get("e3.am1[1]").toString()); - Assert.assertEquals("8.7372945568982446E18", event.get("e3.am1[2]").toString()); - Assert.assertEquals("3.1928124802414899E18", event.get("e3.am1[3]").toString()); - Assert.assertEquals("-3.9806631713718011E18", event.get("e4.e4.m4").toString()); + Assert.assertEquals("7.9789762132607068E18", event.getRaw("e3.am1[0]").toString()); + Assert.assertEquals("-7.8634787235005573E18", event.getRaw("e3.am1[1]").toString()); + Assert.assertEquals("8.7372945568982446E18", event.getRaw("e3.am1[2]").toString()); + Assert.assertEquals("3.1928124802414899E18", event.getRaw("e3.am1[3]").toString()); + Assert.assertEquals("-3.9806631713718011E18", event.getRaw("e4.e4.m4").toString()); } else { - Assert.assertEquals("7.978976213260707E18", event.get("e3.am1[0]").toString()); - Assert.assertEquals("-7.863478723500557E18", event.get("e3.am1[1]").toString()); - Assert.assertEquals("8.737294556898245E18", event.get("e3.am1[2]").toString()); - Assert.assertEquals("3.19281248024149E18", event.get("e3.am1[3]").toString()); - Assert.assertEquals("-3.980663171371801E18", event.get("e4.e4.m4").toString()); + Assert.assertEquals("7.978976213260707E18", event.getRaw("e3.am1[0]").toString()); + Assert.assertEquals("-7.863478723500557E18", event.getRaw("e3.am1[1]").toString()); + Assert.assertEquals("8.737294556898245E18", event.getRaw("e3.am1[2]").toString()); + Assert.assertEquals("3.19281248024149E18", event.getRaw("e3.am1[3]").toString()); + Assert.assertEquals("-3.980663171371801E18", event.getRaw("e4.e4.m4").toString()); } - Assert.assertEquals("-1915243040", event.get("ae1[0].d1").toString()); - Assert.assertEquals("-2020543641", event.get("ae1[1].d1").toString()); - Assert.assertEquals("1414285347", event.get("ae1[2].e1.d2").toString()); + Assert.assertEquals("-1915243040", event.getRaw("ae1[0].d1").toString()); + Assert.assertEquals("-2020543641", event.getRaw("ae1[1].d1").toString()); + Assert.assertEquals("1414285347", event.getRaw("ae1[2].e1.d2").toString()); } - public void checkEvent2(Map event2) + public void checkEvent2(InputRow event2) { - Assert.assertEquals("728062074", event2.get("ae1[0].d1").toString()); - Assert.assertEquals("1701675101", event2.get("ae1[1].d1").toString()); - Assert.assertEquals("1887775139", event2.get("ae1[2].e1.d2").toString()); - Assert.assertEquals("1375814994", event2.get("e1.d1").toString()); - Assert.assertEquals("-1747933975", event2.get("e1.d2").toString()); - Assert.assertEquals("1616761116", event2.get("e2.ad1[0]").toString()); - Assert.assertEquals("7645432", event2.get("e2.ad1[1]").toString()); - Assert.assertEquals("679897970", event2.get("e2.ad1[2]").toString()); - Assert.assertEquals("-1797792200", event2.get("e2.d3").toString()); - Assert.assertEquals("142582995", event2.get("e2.d4").toString()); - Assert.assertEquals("-1341994709", event2.get("e2.d5").toString()); - Assert.assertEquals("-889954295", event2.get("e2.d6").toString()); - Assert.assertEquals("678995794", event2.get("d1").toString()); - Assert.assertEquals("-1744549866", event2.get("d2").toString()); - Assert.assertEquals("2015-09-12T12:10:53.155Z", event2.get("ts").toString()); - Assert.assertEquals("0.7279915615037622", event2.get("m3").toString()); - Assert.assertEquals("977083178034247050", event2.get("m4").toString()); - Assert.assertEquals("1940993614184952155", event2.get("e3.m1").toString()); - Assert.assertEquals("0.55936084127688", event2.get("e3.m2").toString()); - Assert.assertEquals("0.22821798320943232", event2.get("e3.m3").toString()); - Assert.assertEquals("8176144126231114468", event2.get("e3.m4").toString()); - Assert.assertEquals("-7405674050450245158", event2.get("e3.am1[0]").toString()); - Assert.assertEquals("150970357863018887", event2.get("e3.am1[1]").toString()); - Assert.assertEquals("3261802881806411610", event2.get("e3.am1[2]").toString()); - Assert.assertEquals("8492292414932401114", event2.get("e3.am1[3]").toString()); - Assert.assertEquals("-1192952196729165097", event2.get("e4.e4.m4").toString()); + Assert.assertEquals("728062074", event2.getRaw("ae1[0].d1").toString()); + Assert.assertEquals("1701675101", event2.getRaw("ae1[1].d1").toString()); + Assert.assertEquals("1887775139", event2.getRaw("ae1[2].e1.d2").toString()); + Assert.assertEquals("1375814994", event2.getRaw("e1.d1").toString()); + Assert.assertEquals("-1747933975", event2.getRaw("e1.d2").toString()); + Assert.assertEquals("1616761116", event2.getRaw("e2.ad1[0]").toString()); + Assert.assertEquals("7645432", event2.getRaw("e2.ad1[1]").toString()); + Assert.assertEquals("679897970", event2.getRaw("e2.ad1[2]").toString()); + Assert.assertEquals("-1797792200", event2.getRaw("e2.d3").toString()); + Assert.assertEquals("142582995", event2.getRaw("e2.d4").toString()); + Assert.assertEquals("-1341994709", event2.getRaw("e2.d5").toString()); + Assert.assertEquals("-889954295", event2.getRaw("e2.d6").toString()); + Assert.assertEquals("678995794", event2.getRaw("d1").toString()); + Assert.assertEquals("-1744549866", event2.getRaw("d2").toString()); + Assert.assertEquals("2015-09-12T12:10:53.155Z", event2.getRaw("ts").toString()); + Assert.assertEquals("0.7279915615037622", event2.getRaw("m3").toString()); + Assert.assertEquals("977083178034247050", event2.getRaw("m4").toString()); + Assert.assertEquals("1940993614184952155", event2.getRaw("e3.m1").toString()); + Assert.assertEquals("0.55936084127688", event2.getRaw("e3.m2").toString()); + Assert.assertEquals("0.22821798320943232", event2.getRaw("e3.m3").toString()); + Assert.assertEquals("8176144126231114468", event2.getRaw("e3.m4").toString()); + Assert.assertEquals("-7405674050450245158", event2.getRaw("e3.am1[0]").toString()); + Assert.assertEquals("150970357863018887", event2.getRaw("e3.am1[1]").toString()); + Assert.assertEquals("3261802881806411610", event2.getRaw("e3.am1[2]").toString()); + Assert.assertEquals("8492292414932401114", event2.getRaw("e3.am1[3]").toString()); + Assert.assertEquals("-1192952196729165097", event2.getRaw("e4.e4.m4").toString()); } } diff --git a/docs/configuration/index.md b/docs/configuration/index.md index 851db47e3a61..15d05d00b9c4 100644 --- a/docs/configuration/index.md +++ b/docs/configuration/index.md @@ -676,7 +676,7 @@ the following properties. |Property|Description|Default| |--------|-----------|-------| -|`druid.javascript.enabled`|Set to "true" to enable JavaScript functionality. This affects the JavaScript parser, filter, extractionFn, aggregator, post-aggregator, router strategy, and worker selection strategy.|false| +|`druid.javascript.enabled`|Set to "true" to enable JavaScript functionality. This affects the JavaScript filter, extractionFn, aggregator, post-aggregator, router strategy, and worker selection strategy.|false| :::info JavaScript-based functionality is disabled by default. Please refer to the Druid [JavaScript programming guide](../development/javascript.md) for guidelines about using Druid's JavaScript functionality, including instructions on how to enable it. diff --git a/docs/development/extensions-contrib/influx.md b/docs/development/extensions-contrib/influx.md index f40db9973fb5..4286d187f471 100644 --- a/docs/development/extensions-contrib/influx.md +++ b/docs/development/extensions-contrib/influx.md @@ -1,6 +1,6 @@ --- id: influx -title: "InfluxDB Line Protocol Parser" +title: "InfluxDB Line Protocol Input Format" ---