keepmeup opened a new issue, #14278:
URL: https://github.com/apache/druid/issues/14278
Please provide a detailed title (e.g. "Broker crashes when using TopN query
with Bound filter" instead of just "Broker crashes").
### Affected Version
V0.21.0 - latest
### Description
join query sql like this:
`select tb1.integer_01 from query_data tb1 join query_data tb2 on
tb1.integer_01=tb2.integer_01 `
query_data is not inline type.
integer_01 column is long type.
when a dimension column (long type) in a datasource does not contain
duplicate data rows, failed to run a join query on this column, and reported
error msg like UnsupportedOperationException.
the deatil error info as following :
`[org.apache.druid.server.QueryResource] Exception handling request:
{class=org.apache.druid.server.QueryResource, exceptionType=class
java.lang.UnsupportedOperationException, exceptionMessage=null,
query={\"queryType\":\"scan\",\"dataSource\":{\"type\":\"join\",\"left\":{\"type\":\"table\",\"name\":\"query_data\"},\"right\":{\"type\":\"inline\",\"columnNames\":[\"integer_02\"],\"rows\":[[1011321636],[798149180],[1967276246],[981851454],[1131930886],[678057399],[531974338],[910870059],[1354189192],[1852874318],[1423135749],[476052090],[1629345290],[1221025604],[1456168797],[174256503],[2136167612],[939121801],[1311193105],[1041611754],[2042602974],[1811871238],[1567640210],[1812339899],[201732894],[1917945034],[348649510],[1952933797],[656763133],[1570766473],[761034030],[783297435],[900938133],[2008310329],[683880388],[632070346],[265266758],[559246409],[140623286],[1121379007],[1283871449],[1526862571],[1294881462],[283504463],[1014505150],[210258446],[1345371845],[1789161393],
[465946570],[9965594],[1213002863],[473974926],[1867814161],[747880882],[2046826281],[845410732],[195430351],[1140766264],[433656069],[1804244762],[1906022077],[1108026388],[1519759817],[2099249276],[2141155270],[48778464],[1944933484],[522011220],[1808483027],[965865845],[657591721],[368260435],[365302572],[100798112],[1662083764],[1001633540],[2100433580],[717611262],[668829244],[1451930205],[195265403],[1612132668],[837296122],[1538780976],[1731830280],[96135375],[932682338],[324709142],[756193325],[2080763299],[889190595],[1786771821],[1089697379],[931743425],[1323840991],[503638979],[1369257728],[839288835],[1262823817],[1241350637]]},\"rightPrefix\":\"j0.\",\"condition\":\"(\\\"integer_02\\\"
==
\\\"j0.integer_02\\\")\",\"joinType\":\"INNER\"},\"intervals\":{\"type\":\"segments\",\"segments\":[{\"itvl\":\"2023-05-09T03:05:00.000Z/2023-05-09T03:10:00.000Z\",\"ver\":\"2023-05-09T03:11:22.477Z\",\"part\":0}]},\"virtualColumns\":[],\"resultFormat\":\"compactedList\",\"batchSize\":
20480,\"order\":\"none\",\"filter\":null,\"columns\":[\"integer_02\"],\"legacy\":false,\"context\":{\"defaultTimeout\":300000,\"finalize\":false,\"maxQueuedBytes\":0,\"maxScatterGatherBytes\":2147483648,\"queryFailTime\":1683804840252,\"queryId\":\"f2439d55-d633-4798-8de7-4eae42be7832\",\"sqlQueryId\":\"2e5eca7f-0574-468c-91f5-ed31dda2627f\",\"timeout\":299999},\"descending\":false,\"granularity\":{\"type\":\"all\"}},
peer=8.7.173.27} (java.lang.UnsupportedOperationException)
`
the error stack info in historical log:
`[ROOT][org.apache.druid.server.QueryResource] xxx:test
java.lang.UnsupportedOperationException: null
at
org.apache.druid.segment.join.table.MapIndex.findUniqueLong(MapIndex.java:95)
~[druid-processing-0.21.1-h0.gdd.sop.r50.jar:?]
at
org.apache.druid.segment.join.table.IndexedTableJoinMatcher$ConditionMatcherFactory$1.matchSingleRow(IndexedTableJoinMatcher.java:465)
~[druid-processing-0.21.1-h0.gdd.sop.r50.jar:?]
at
org.apache.druid.segment.join.table.IndexedTableJoinMatcher.matchCondition(IndexedTableJoinMatcher.java:193)
~[druid-processing-0.21.1-h0.gdd.sop.r50.jar:?]
at
org.apache.druid.segment.join.HashJoinEngine$1JoinCursor.matchCurrentPosition(HashJoinEngine.java:167)
~[druid-processing-0.21.1-h0.gdd.sop.r50.jar:?]
at
org.apache.druid.segment.join.HashJoinEngine$1JoinCursor.initialize(HashJoinEngine.java:127)
~[druid-processing-0.21.1-h0.gdd.sop.r50.jar:?]
at
org.apache.druid.segment.join.HashJoinEngine.makeJoinCursor(HashJoinEngine.java:219)
~[druid-processing-0.21.1-h0.gdd.sop.r50.jar:?]
at
org.apache.druid.segment.join.HashJoinSegmentStorageAdapter.lambda$makeCursors$0(HashJoinSegmentStorageAdapter.java:267)
~[druid-processing-0.21.1-h0.gdd.sop.r50.jar:?]
at
org.apache.druid.java.util.common.guava.MappingYieldingAccumulator.accumulate(MappingYieldingAccumulator.java:61)
~[druid-core-0.21.1-h0.gdd.sop.r50.jar:?]
at
org.apache.druid.java.util.common.guava.FilteringYieldingAccumulator.accumulate(FilteringYieldingAccumulator.java:70)
~[druid-core-0.21.1-h0.gdd.sop.r50.jar:?]
at
org.apache.druid.java.util.common.guava.MappingYieldingAccumulator.accumulate(MappingYieldingAccumulator.java:61)
~[druid-core-0.21.1-h0.gdd.sop.r50.jar:?]
at
org.apache.druid.java.util.common.guava.BaseSequence.makeYielder(BaseSequence.java:90)
~[druid-core-0.21.1-h0.gdd.sop.r50.jar:?]
at
org.apache.druid.java.util.common.guava.BaseSequence.toYielder(BaseSequence.java:69)
~[druid-core-0.21.1-h0.gdd.sop.r50.jar:?]
at
org.apache.druid.java.util.common.guava.MappedSequence.toYielder(MappedSequence.java:49)
~[druid-core-0.21.1-h0.gdd.sop.r50.jar:?]
at
org.apache.druid.java.util.common.guava.WrappingSequence$2.get(WrappingSequence.java:88)
~[druid-core-0.21.1-h0.gdd.sop.r50.jar:?]
at
org.apache.druid.java.util.common.guava.WrappingSequence$2.get(WrappingSequence.java:84)
~[druid-core-0.21.1-h0.gdd.sop.r50.jar:?]
at
org.apache.druid.java.util.common.guava.SequenceWrapper.wrap(SequenceWrapper.java:55)
~[druid-core-0.21.1-h0.gdd.sop.r50.jar:?]
at
org.apache.druid.java.util.common.guava.WrappingSequence.toYielder(WrappingSequence.java:83)
~[druid-core-0.21.1-h0.gdd.sop.r50.jar:?]
at
org.apache.druid.java.util.common.guava.FilteredSequence.toYielder(FilteredSequence.java:54)
~[druid-core-0.21.1-h0.gdd.sop.r50.jar:?]
at
org.apache.druid.java.util.common.guava.MappedSequence.toYielder(MappedSequence.java:49)
~[druid-core-0.21.1-h0.gdd.sop.r50.jar:?]
at
org.apache.druid.java.util.common.guava.WrappingSequence$2.get(WrappingSequence.java:88)
~[druid-core-0.21.1-h0.gdd.sop.r50.jar:?]
at
org.apache.druid.java.util.common.guava.WrappingSequence$2.get(WrappingSequence.java:84)
~[druid-core-0.21.1-h0.gdd.sop.r50.jar:?]
at
org.apache.druid.java.util.common.guava.SequenceWrapper.wrap(SequenceWrapper.java:55)
~[druid-core-0.21.1-h0.gdd.sop.r50.jar:?]
at
org.apache.druid.java.util.common.guava.WrappingSequence.toYielder(WrappingSequence.java:83)
~[druid-core-0.21.1-h0.gdd.sop.r50.jar:?]
at
org.apache.druid.java.util.common.guava.WrappingSequence$2.get(WrappingSequence.java:88)
~[druid-core-0.21.1-h0.gdd.sop.r50.jar:?]
at
org.apache.druid.java.util.common.guava.WrappingSequence$2.get(WrappingSequence.java:84)
~[druid-core-0.21.1-h0.gdd.sop.r50.jar:?]
at
org.apache.druid.java.util.common.guava.SequenceWrapper.wrap(SequenceWrapper.java:55)
~[druid-core-0.21.1-h0.gdd.sop.r50.jar:?]
at
org.apache.druid.java.util.common.guava.WrappingSequence$2.get(WrappingSequence.java:88)
~[druid-core-0.21.1-h0.gdd.sop.r50.jar:?]
at
org.apache.druid.java.util.common.guava.WrappingSequence$2.get(WrappingSequence.java:84)
~[druid-core-0.21.1-h0.gdd.sop.r50.jar:?]
at
org.apache.druid.java.util.common.guava.SequenceWrapper.wrap(SequenceWrapper.java:55)
~[druid-core-0.21.1-h0.gdd.sop.r50.jar:?]
at
org.apache.druid.java.util.common.guava.WrappingSequence.toYielder(WrappingSequence.java:83)
~[druid-core-0.21.1-h0.gdd.sop.r50.jar:?]
at
org.apache.druid.java.util.common.guava.LazySequence.toYielder(LazySequence.java:46)
~[druid-core-0.21.1-h0.gdd.sop.r50.jar:?]
at
org.apache.druid.java.util.common.guava.WrappingSequence$2.get(WrappingSequence.java:88)
~[druid-core-0.21.1-h0.gdd.sop.r50.jar:?]
at
org.apache.druid.java.util.common.guava.WrappingSequence$2.get(WrappingSequence.java:84)
~[druid-core-0.21.1-h0.gdd.sop.r50.jar:?]
at
org.apache.druid.java.util.common.guava.SequenceWrapper.wrap(SequenceWrapper.java:55)
~[druid-core-0.21.1-h0.gdd.sop.r50.jar:?]
at
org.apache.druid.java.util.common.guava.WrappingSequence.toYielder(WrappingSequence.java:83)
~[druid-core-0.21.1-h0.gdd.sop.r50.jar:?]
at
org.apache.druid.query.spec.SpecificSegmentQueryRunner$1.toYielder(SpecificSegmentQueryRunner.java:102)
~[druid-processing-0.21.1-h0.gdd.sop.r50.jar:?]
at
org.apache.druid.java.util.common.guava.WrappingSequence$2.get(WrappingSequence.java:88)
~[druid-core-0.21.1-h0.gdd.sop.r50.jar:?]
at
org.apache.druid.java.util.common.guava.WrappingSequence$2.get(WrappingSequence.java:84)
~[druid-core-0.21.1-h0.gdd.sop.r50.jar:?]
at
org.apache.druid.query.spec.SpecificSegmentQueryRunner.doNamed(SpecificSegmentQueryRunner.java:171)
~[druid-processing-0.21.1-h0.gdd.sop.r50.jar:?]
at
org.apache.druid.query.spec.SpecificSegmentQueryRunner.access$100(SpecificSegmentQueryRunner.java:44)
~[druid-processing-0.21.1-h0.gdd.sop.r50.jar:?]
at
org.apache.druid.query.spec.SpecificSegmentQueryRunner$2.wrap(SpecificSegmentQueryRunner.java:153)
~[druid-processing-0.21.1-h0.gdd.sop.r50.jar:?]
at
org.apache.druid.java.util.common.guava.WrappingSequence.toYielder(WrappingSequence.java:83)
~[druid-core-0.21.1-h0.gdd.sop.r50.jar:?]
at
org.apache.druid.java.util.common.guava.WrappingSequence$2.get(WrappingSequence.java:88)
~[druid-core-0.21.1-h0.gdd.sop.r50.jar:?]
at
org.apache.druid.java.util.common.guava.WrappingSequence$2.get(WrappingSequence.java:84)
~[druid-core-0.21.1-h0.gdd.sop.r50.jar:?]
at
org.apache.druid.query.CPUTimeMetricQueryRunner$1.wrap(CPUTimeMetricQueryRunner.java:78)
~[druid-processing-0.21.1-h0.gdd.sop.r50.jar:?]
at
org.apache.druid.java.util.common.guava.WrappingSequence.toYielder(WrappingSequence.java:83)
~[druid-core-0.21.1-h0.gdd.sop.r50.jar:?]
at
org.apache.druid.java.util.common.guava.ConcatSequence.makeYielder(ConcatSequence.java:84)
~[druid-core-0.21.1-h0.gdd.sop.r50.jar:?]
at
org.apache.druid.java.util.common.guava.ConcatSequence.toYielder(ConcatSequence.java:64)
~[druid-core-0.21.1-h0.gdd.sop.r50.jar:?]
at
org.apache.druid.java.util.common.guava.MappedSequence.toYielder(MappedSequence.java:49)
~[druid-core-0.21.1-h0.gdd.sop.r50.jar:?]
at
org.apache.druid.java.util.common.guava.WrappingSequence$2.get(WrappingSequence.java:88)
~[druid-core-0.21.1-h0.gdd.sop.r50.jar:?]
at
org.apache.druid.java.util.common.guava.WrappingSequence$2.get(WrappingSequence.java:84)
~[druid-core-0.21.1-h0.gdd.sop.r50.jar:?]
at
org.apache.druid.query.CPUTimeMetricQueryRunner$1.wrap(CPUTimeMetricQueryRunner.java:78)
~[druid-processing-0.21.1-h0.gdd.sop.r50.jar:?]
at
org.apache.druid.java.util.common.guava.WrappingSequence.toYielder(WrappingSequence.java:83)
~[druid-core-0.21.1-h0.gdd.sop.r50.jar:?]
at
org.apache.druid.java.util.common.guava.Yielders.each(Yielders.java:32)
~[druid-core-0.21.1-h0.gdd.sop.r50.jar:?]
at
org.apache.druid.server.QueryResource.doPost(QueryResource.java:235)
~[druid-server-0.21.1-h0.gdd.sop.r50.jar:?]
at sun.reflect.GeneratedMethodAccessor61.invoke(Unknown Source)
~[?:?]
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
~[?:1.8.0_372]
at java.lang.reflect.Method.invoke(Method.java:498) ~[?:1.8.0_372]
at
com.sun.jersey.spi.container.JavaMethodInvokerFactory$1.invoke(JavaMethodInvokerFactory.java:60)
~[jersey-server-1.19.3.jar:1.19.3]
at
com.sun.jersey.server.impl.model.method.dispatch.ResourceJavaMethodDispatcher.dispatch(ResourceJavaMethodDispatcher.java:75)
~[jersey-server-1.19.3.jar:1.19.3]
at
com.sun.jersey.server.impl.uri.rules.HttpMethodRule.accept(HttpMethodRule.java:302)
~[jersey-server-1.19.3.jar:1.19.3]
at
com.sun.jersey.server.impl.uri.rules.ResourceClassRule.accept(ResourceClassRule.java:108)
~[jersey-server-1.19.3.jar:1.19.3]
at
com.sun.jersey.server.impl.uri.rules.RightHandPathRule.accept(RightHandPathRule.java:147)
~[jersey-server-1.19.3.jar:1.19.3]
at
com.sun.jersey.server.impl.uri.rules.RootResourceClassesRule.accept(RootResourceClassesRule.java:84)
~[jersey-server-1.19.3.jar:1.19.3]
at
com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:1542)
~[jersey-server-1.19.3.jar:1.19.3]
at
com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:1473)
~[jersey-server-1.19.3.jar:1.19.3]
at
com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1419)
~[jersey-server-1.19.3.jar:1.19.3]
at
com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1409)
~[jersey-server-1.19.3.jar:1.19.3]
at
com.sun.jersey.spi.container.servlet.WebComponent.service(WebComponent.java:409)
~[jersey-servlet-1.19.3.jar:1.19.3]
at
com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:558)
~[jersey-servlet-1.19.3.jar:1.19.3]
at
com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:733)
~[jersey-servlet-1.19.3.jar:1.19.3]
at javax.servlet.http.HttpServlet.service(HttpServlet.java:790)
~[javax.servlet-api-3.1.0.jar:3.1.0]
at
com.google.inject.servlet.ServletDefinition.doServiceImpl(ServletDefinition.java:286)
~[guice-servlet-4.1.0.jar:?]
at
com.google.inject.servlet.ServletDefinition.doService(ServletDefinition.java:276)
~[guice-servlet-4.1.0.jar:?]
at
com.google.inject.servlet.ServletDefinition.service(ServletDefinition.java:181)
~[guice-servlet-4.1.0.jar:?]
at
com.google.inject.servlet.ManagedServletPipeline.service(ManagedServletPipeline.java:91)
~[guice-servlet-4.1.0.jar:?]
at
com.google.inject.servlet.FilterChainInvocation.doFilter(FilterChainInvocation.java:85)
~[guice-servlet-4.1.0.jar:?]
at
com.google.inject.servlet.ManagedFilterPipeline.dispatch(ManagedFilterPipeline.java:120)
~[guice-servlet-4.1.0.jar:?]
at
com.google.inject.servlet.GuiceFilter.doFilter(GuiceFilter.java:135)
~[guice-servlet-4.1.0.jar:?]
at
org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193)
~[jetty-servlet-9.4.51.v20230217.jar:9.4.51.v20230217]
at
org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1626)
~[jetty-servlet-9.4.51.v20230217.jar:9.4.51.v20230217]
at
org.apache.druid.server.security.PreResponseAuthorizationCheckFilter.doFilter(PreResponseAuthorizationCheckFilter.java:82)
~[druid-server-0.21.1-h0.gdd.sop.r50.jar:?]
at
org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193)
~[jetty-servlet-9.4.51.v20230217.jar:9.4.51.v20230217]
at
org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1626)
~[jetty-servlet-9.4.51.v20230217.jar:9.4.51.v20230217]
at
org.apache.druid.server.security.AllowHttpMethodsResourceFilter.doFilter(AllowHttpMethodsResourceFilter.java:78)
~[druid-server-0.21.1-h0.gdd.sop.r50.jar:?]
at
org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193)
~[jetty-servlet-9.4.51.v20230217.jar:9.4.51.v20230217]
at
org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1626)
~[jetty-servlet-9.4.51.v20230217.jar:9.4.51.v20230217]
at
org.apache.druid.server.security.AllowOptionsResourceFilter.doFilter(AllowOptionsResourceFilter.java:75)
~[druid-server-0.21.1-h0.gdd.sop.r50.jar:?]
at
org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193)
~[jetty-servlet-9.4.51.v20230217.jar:9.4.51.v20230217]
at
org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1626)
~[jetty-servlet-9.4.51.v20230217.jar:9.4.51.v20230217]
at
org.apache.druid.server.security.AllowAllAuthenticator$1.doFilter(AllowAllAuthenticator.java:84)
~[druid-server-0.21.1-h0.gdd.sop.r50.jar:?]
at
org.apache.druid.server.security.AuthenticationWrappingFilter.doFilter(AuthenticationWrappingFilter.java:59)
~[druid-server-0.21.1-h0.gdd.sop.r50.jar:?]
2023-05-11 11:29:00,469 ERROR
[qtp1684887757-142[scan_[query_data_olap]_f2439d55-d633-4798-8de7-4eae42be7832]][ROOT][org.apache.druid.server.QueryResource]
java.lang.UnsupportedOperationException: null
at
org.apache.druid.segment.join.table.MapIndex.findUniqueLong(MapIndex.java:95)
~[druid-processing-0.21.1-h0.gdd.sop.r50.jar:?]
at
org.apache.druid.segment.join.table.IndexedTableJoinMatcher$ConditionMatcherFactory$1.matchSingleRow(IndexedTableJoinMatcher.java:465)
~[druid-processing-0.21.1-h0.gdd.sop.r50.jar:?]
at
org.apache.druid.segment.join.table.IndexedTableJoinMatcher.matchCondition(IndexedTableJoinMatcher.java:193)
~[druid-processing-0.21.1-h0.gdd.sop.r50.jar:?]
at
org.apache.druid.segment.join.HashJoinEngine$1JoinCursor.matchCurrentPosition(HashJoinEngine.java:167)
~[druid-processing-0.21.1-h0.gdd.sop.r50.jar:?]
at
org.apache.druid.segment.join.HashJoinEngine$1JoinCursor.initialize(HashJoinEngine.java:127)
~[druid-processing-0.21.1-h0.gdd.sop.r50.jar:?]
at
org.apache.druid.segment.join.HashJoinEngine.makeJoinCursor(HashJoinEngine.java:219)
~[druid-processing-0.21.1-h0.gdd.sop.r50.jar:?]
at
org.apache.druid.segment.join.HashJoinSegmentStorageAdapter.lambda$makeCursors$0(HashJoinSegmentStorageAdapter.java:267)
~[druid-processing-0.21.1-h0.gdd.sop.r50.jar:?]
at
org.apache.druid.java.util.common.guava.MappingYieldingAccumulator.accumulate(MappingYieldingAccumulator.java:61)
~[druid-core-0.21.1-h0.gdd.sop.r50.jar:?]
at
org.apache.druid.java.util.common.guava.FilteringYieldingAccumulator.accumulate(FilteringYieldingAccumulator.java:70)
~[druid-core-0.21.1-h0.gdd.sop.r50.jar:?]
at
org.apache.druid.java.util.common.guava.MappingYieldingAccumulator.accumulate(MappingYieldingAccumulator.java:61)
~[druid-core-0.21.1-h0.gdd.sop.r50.jar:?]
at
org.apache.druid.java.util.common.guava.BaseSequence.makeYielder(BaseSequence.java:90)
~[druid-core-0.21.1-h0.gdd.sop.r50.jar:?]
at
org.apache.druid.java.util.common.guava.BaseSequence.toYielder(BaseSequence.java:69)
~[druid-core-0.21.1-h0.gdd.sop.r50.jar:?]
at
org.apache.druid.java.util.common.guava.MappedSequence.toYielder(MappedSequence.java:49)
~[druid-core-0.21.1-h0.gdd.sop.r50.jar:?]
at
org.apache.druid.java.util.common.guava.WrappingSequence$2.get(WrappingSequence.java:88)
~[druid-core-0.21.1-h0.gdd.sop.r50.jar:?]
at
org.apache.druid.java.util.common.guava.WrappingSequence$2.get(WrappingSequence.java:84)
~[druid-core-0.21.1-h0.gdd.sop.r50.jar:?]
at
org.apache.druid.java.util.common.guava.SequenceWrapper.wrap(SequenceWrapper.java:55)
~[druid-core-0.21.1-h0.gdd.sop.r50.jar:?]
at
org.apache.druid.java.util.common.guava.WrappingSequence.toYielder(WrappingSequence.java:83)
~[druid-core-0.21.1-h0.gdd.sop.r50.jar:?]
at
org.apache.druid.java.util.common.guava.FilteredSequence.toYielder(FilteredSequence.java:54)
~[druid-core-0.21.1-h0.gdd.sop.r50.jar:?]
at
org.apache.druid.java.util.common.guava.MappedSequence.toYielder(MappedSequence.java:49)
~[druid-core-0.21.1-h0.gdd.sop.r50.jar:?]
at
org.apache.druid.java.util.common.guava.WrappingSequence$2.get(WrappingSequence.java:88)
~[druid-core-0.21.1-h0.gdd.sop.r50.jar:?]
at
org.apache.druid.java.util.common.guava.WrappingSequence$2.get(WrappingSequence.java:84)
~[druid-core-0.21.1-h0.gdd.sop.r50.jar:?]
at
org.apache.druid.java.util.common.guava.SequenceWrapper.wrap(SequenceWrapper.java:55)
~[druid-core-0.21.1-h0.gdd.sop.r50.jar:?]
at
org.apache.druid.java.util.common.guava.WrappingSequence.toYielder(WrappingSequence.java:83)
~[druid-core-0.21.1-h0.gdd.sop.r50.jar:?]
at
org.apache.druid.java.util.common.guava.WrappingSequence$2.get(WrappingSequence.java:88)
~[druid-core-0.21.1-h0.gdd.sop.r50.jar:?]
at
org.apache.druid.java.util.common.guava.WrappingSequence$2.get(WrappingSequence.java:84)
~[druid-core-0.21.1-h0.gdd.sop.r50.jar:?]
at
org.apache.druid.java.util.common.guava.SequenceWrapper.wrap(SequenceWrapper.java:55)
~[druid-core-0.21.1-h0.gdd.sop.r50.jar:?]
at
org.apache.druid.java.util.common.guava.WrappingSequence$2.get(WrappingSequence.java:88)
~[druid-core-0.21.1-h0.gdd.sop.r50.jar:?]
at
org.apache.druid.java.util.common.guava.WrappingSequence$2.get(WrappingSequence.java:84)
~[druid-core-0.21.1-h0.gdd.sop.r50.jar:?]
at
org.apache.druid.java.util.common.guava.SequenceWrapper.wrap(SequenceWrapper.java:55)
~[druid-core-0.21.1-h0.gdd.sop.r50.jar:?]
at
org.apache.druid.java.util.common.guava.WrappingSequence.toYielder(WrappingSequence.java:83)
~[druid-core-0.21.1-h0.gdd.sop.r50.jar:?]
at
org.apache.druid.java.util.common.guava.LazySequence.toYielder(LazySequence.java:46)
~[druid-core-0.21.1-h0.gdd.sop.r50.jar:?]
at
org.apache.druid.java.util.common.guava.WrappingSequence$2.get(WrappingSequence.java:88)
~[druid-core-0.21.1-h0.gdd.sop.r50.jar:?]
at
org.apache.druid.java.util.common.guava.WrappingSequence$2.get(WrappingSequence.java:84)
~[druid-core-0.21.1-h0.gdd.sop.r50.jar:?]
at
org.apache.druid.java.util.common.guava.SequenceWrapper.wrap(SequenceWrapper.java:55)
~[druid-core-0.21.1-h0.gdd.sop.r50.jar:?]
at
org.apache.druid.java.util.common.guava.WrappingSequence.toYielder(WrappingSequence.java:83)
~[druid-core-0.21.1-h0.gdd.sop.r50.jar:?]
at
org.apache.druid.query.spec.SpecificSegmentQueryRunner$1.toYielder(SpecificSegmentQueryRunner.java:102)
~[druid-processing-0.21.1-h0.gdd.sop.r50.jar:?]
at
org.apache.druid.java.util.common.guava.WrappingSequence$2.get(WrappingSequence.java:88)
~[druid-core-0.21.1-h0.gdd.sop.r50.jar:?]
at
org.apache.druid.java.util.common.guava.WrappingSequence$2.get(WrappingSequence.java:84)
~[druid-core-0.21.1-h0.gdd.sop.r50.jar:?]
at
org.apache.druid.query.spec.SpecificSegmentQueryRunner.doNamed(SpecificSegmentQueryRunner.java:171)
~[druid-processing-0.21.1-h0.gdd.sop.r50.jar:?]
at
org.apache.druid.query.spec.SpecificSegmentQueryRunner.access$100(SpecificSegmentQueryRunner.java:44)
~[druid-processing-0.21.1-h0.gdd.sop.r50.jar:?]
at
org.apache.druid.query.spec.SpecificSegmentQueryRunner$2.wrap(SpecificSegmentQueryRunner.java:153)
~[druid-processing-0.21.1-h0.gdd.sop.r50.jar:?]
at
org.apache.druid.java.util.common.guava.WrappingSequence.toYielder(WrappingSequence.java:83)
~[druid-core-0.21.1-h0.gdd.sop.r50.jar:?]
at
org.apache.druid.java.util.common.guava.WrappingSequence$2.get(WrappingSequence.java:88)
~[druid-core-0.21.1-h0.gdd.sop.r50.jar:?]
at
org.apache.druid.java.util.common.guava.WrappingSequence$2.get(WrappingSequence.java:84)
~[druid-core-0.21.1-h0.gdd.sop.r50.jar:?]
at
org.apache.druid.query.CPUTimeMetricQueryRunner$1.wrap(CPUTimeMetricQueryRunner.java:78)
~[druid-processing-0.21.1-h0.gdd.sop.r50.jar:?]
at
org.apache.druid.java.util.common.guava.WrappingSequence.toYielder(WrappingSequence.java:83)
~[druid-core-0.21.1-h0.gdd.sop.r50.jar:?]
at
org.apache.druid.java.util.common.guava.ConcatSequence.makeYielder(ConcatSequence.java:84)
~[druid-core-0.21.1-h0.gdd.sop.r50.jar:?]
at
org.apache.druid.java.util.common.guava.ConcatSequence.toYielder(ConcatSequence.java:64)
~[druid-core-0.21.1-h0.gdd.sop.r50.jar:?]
at
org.apache.druid.java.util.common.guava.MappedSequence.toYielder(MappedSequence.java:49)
~[druid-core-0.21.1-h0.gdd.sop.r50.jar:?]
at
org.apache.druid.java.util.common.guava.WrappingSequence$2.get(WrappingSequence.java:88)
~[druid-core-0.21.1-h0.gdd.sop.r50.jar:?]
at
org.apache.druid.java.util.common.guava.WrappingSequence$2.get(WrappingSequence.java:84)
~[druid-core-0.21.1-h0.gdd.sop.r50.jar:?]
at
org.apache.druid.query.CPUTimeMetricQueryRunner$1.wrap(CPUTimeMetricQueryRunner.java:78)
~[druid-processing-0.21.1-h0.gdd.sop.r50.jar:?]
at
org.apache.druid.java.util.common.guava.WrappingSequence.toYielder(WrappingSequence.java:83)
~[druid-core-0.21.1-h0.gdd.sop.r50.jar:?]
at
org.apache.druid.java.util.common.guava.Yielders.each(Yielders.java:32)
~[druid-core-0.21.1-h0.gdd.sop.r50.jar:?]
at
org.apache.druid.server.QueryResource.doPost(QueryResource.java:235)
~[druid-server-0.21.1-h0.gdd.sop.r50.jar:?]
at sun.reflect.GeneratedMethodAccessor61.invoke(Unknown Source)
~[?:?]
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
~[?:1.8.0_372]
at java.lang.reflect.Method.invoke(Method.java:498) ~[?:1.8.0_372]
at
com.sun.jersey.spi.container.JavaMethodInvokerFactory$1.invoke(JavaMethodInvokerFactory.java:60)
~[jersey-server-1.19.3.jar:1.19.3]
at
com.sun.jersey.server.impl.model.method.dispatch.ResourceJavaMethodDispatcher.dispatch(ResourceJavaMethodDispatcher.java:75)
~[jersey-server-1.19.3.jar:1.19.3]
at
com.sun.jersey.server.impl.uri.rules.HttpMethodRule.accept(HttpMethodRule.java:302)
~[jersey-server-1.19.3.jar:1.19.3]
at
com.sun.jersey.server.impl.uri.rules.ResourceClassRule.accept(ResourceClassRule.java:108)
~[jersey-server-1.19.3.jar:1.19.3]
at
com.sun.jersey.server.impl.uri.rules.RightHandPathRule.accept(RightHandPathRule.java:147)
~[jersey-server-1.19.3.jar:1.19.3]
at
com.sun.jersey.server.impl.uri.rules.RootResourceClassesRule.accept(RootResourceClassesRule.java:84)
~[jersey-server-1.19.3.jar:1.19.3]
at
com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:1542)
~[jersey-server-1.19.3.jar:1.19.3]
at
com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:1473)
~[jersey-server-1.19.3.jar:1.19.3]
at
com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1419)
~[jersey-server-1.19.3.jar:1.19.3]
at
com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1409)
~[jersey-server-1.19.3.jar:1.19.3]
at
com.sun.jersey.spi.container.servlet.WebComponent.service(WebComponent.java:409)
~[jersey-servlet-1.19.3.jar:1.19.3]
at
com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:558)
~[jersey-servlet-1.19.3.jar:1.19.3]
at
com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:733)
~[jersey-servlet-1.19.3.jar:1.19.3]
at javax.servlet.http.HttpServlet.service(HttpServlet.java:790)
~[javax.servlet-api-3.1.0.jar:3.1.0]
at
com.google.inject.servlet.ServletDefinition.doServiceImpl(ServletDefinition.java:286)
~[guice-servlet-4.1.0.jar:?]
at
com.google.inject.servlet.ServletDefinition.doService(ServletDefinition.java:276)
~[guice-servlet-4.1.0.jar:?]
at
com.google.inject.servlet.ServletDefinition.service(ServletDefinition.java:181)
~[guice-servlet-4.1.0.jar:?]
at
com.google.inject.servlet.ManagedServletPipeline.service(ManagedServletPipeline.java:91)
~[guice-servlet-4.1.0.jar:?]
at
com.google.inject.servlet.FilterChainInvocation.doFilter(FilterChainInvocation.java:85)
~[guice-servlet-4.1.0.jar:?]
at
com.google.inject.servlet.ManagedFilterPipeline.dispatch(ManagedFilterPipeline.java:120)
~[guice-servlet-4.1.0.jar:?]
at
com.google.inject.servlet.GuiceFilter.doFilter(GuiceFilter.java:135)
~[guice-servlet-4.1.0.jar:?]
at
org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193)
~[jetty-servlet-9.4.51.v20230217.jar:9.4.51.v20230217]
at
org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1626)
~[jetty-servlet-9.4.51.v20230217.jar:9.4.51.v20230217]
at
org.apache.druid.server.security.PreResponseAuthorizationCheckFilter.doFilter(PreResponseAuthorizationCheckFilter.java:82)
~[druid-server-0.21.1-h0.gdd.sop.r50.jar:?]
at
org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193)
~[jetty-servlet-9.4.51.v20230217.jar:9.4.51.v20230217]
at
org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1626)
~[jetty-servlet-9.4.51.v20230217.jar:9.4.51.v20230217]
at
org.apache.druid.server.security.AllowHttpMethodsResourceFilter.doFilter(AllowHttpMethodsResourceFilter.java:78)
~[druid-server-0.21.1-h0.gdd.sop.r50.jar:?]
at
org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193)
~[jetty-servlet-9.4.51.v20230217.jar:9.4.51.v20230217]
at
org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1626)
~[jetty-servlet-9.4.51.v20230217.jar:9.4.51.v20230217]
at
org.apache.druid.server.security.AllowOptionsResourceFilter.doFilter(AllowOptionsResourceFilter.java:75)
~[druid-server-0.21.1-h0.gdd.sop.r50.jar:?]
at
org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193)
~[jetty-servlet-9.4.51.v20230217.jar:9.4.51.v20230217]
at
org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1626)
~[jetty-servlet-9.4.51.v20230217.jar:9.4.51.v20230217]
at
org.apache.druid.server.security.AllowAllAuthenticator$1.doFilter(AllowAllAuthenticator.java:84)
~[druid-server-0.21.1-h0.gdd.sop.r50.jar:?]
at
org.apache.druid.server.security.AuthenticationWrappingFilter.doFilter(AuthenticationWrappingFilter.java:59)
~[druid-server-0.21.1-h0.gdd.sop.r50.jar:?]
at
org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:277)
~[jetty-server-9.4.51.v20230217.jar:9.4.51.v20230217]
at
org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:311)
~[jetty-io-9.4.51.v20230217.jar:9.4.51.v20230217]
at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:105)
~[jetty-io-9.4.51.v20230217.jar:9.4.51.v20230217]
at
org.eclipse.jetty.io.ssl.SslConnection$DecryptedEndPoint.onFillable(SslConnection.java:555)
~[jetty-io-9.4.51.v20230217.jar:9.4.51.v20230217]
at
org.eclipse.jetty.io.ssl.SslConnection.onFillable(SslConnection.java:410)
~[jetty-io-9.4.51.v20230217.jar:9.4.51.v20230217]
at
org.eclipse.jetty.io.ssl.SslConnection$2.succeeded(SslConnection.java:164)
~[jetty-io-9.4.51.v20230217.jar:9.4.51.v20230217]
at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:105)
~[jetty-io-9.4.51.v20230217.jar:9.4.51.v20230217]
at
org.eclipse.jetty.io.ChannelEndPoint$1.run(ChannelEndPoint.java:104)
~[jetty-io-9.4.51.v20230217.jar:9.4.51.v20230217]
at
org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.runTask(EatWhatYouKill.java:338)
~[jetty-util-9.4.51.v20230217.jar:9.4.51.v20230217]
at
org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.doProduce(EatWhatYouKill.java:315)
~[jetty-util-9.4.51.v20230217.jar:9.4.51.v20230217]
at
org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.tryProduce(EatWhatYouKill.java:173)
~[jetty-util-9.4.51.v20230217.jar:9.4.51.v20230217]
at
org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.run(EatWhatYouKill.java:131)
~[jetty-util-9.4.51.v20230217.jar:9.4.51.v20230217]
at
org.eclipse.jetty.util.thread.ReservedThreadExecutor$ReservedThread.run(ReservedThreadExecutor.java:409)
~[jetty-util-9.4.51.v20230217.jar:9.4.51.v20230217]
at
org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:883)
~[jetty-util-9.4.51.v20230217.jar:9.4.51.v20230217]
at
org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:1034)
~[jetty-util-9.4.51.v20230217.jar:9.4.51.v20230217]
at java.lang.Thread.run(Thread.java:750) ~[?:1.8.0_372]`
**this should be a bug when join query on a long type column and the column
has duplicated row value, the reason maybe this:**
1.missing columnTypes in packets:
join query packets:
`{
'queryType' : 'scan',
'dataSource' : {
'type' : 'join',
'left' : {
'type' : 'table',
'name' : 'ODAEDATASET__DEFAULT_query_data_olap__DEFAULT'
},
'right' : {
'type' : 'inline',
'columnNames' : ['integer_02'], **### // missing columnTypes**
'rows' : [[1011321636], [798149180], [1967276246], [981851454],
[1131930886], [678057399], [531974338], [910870059], [1354189192],
[1852874318], [1423135749], [476052090], [1629345290], [1221025604],
[1456168797], [174256503], [2136167612], [939121801], [1311193105],
[1041611754], [2042602974], [1811871238], [1567640210], [1812339899],
[201732894], [1917945034], [348649510], [1952933797], [656763133],
[1570766473], [761034030], [783297435], [900938133], [2008310329], [683880388],
[632070346], [265266758], [559246409], [140623286], [1121379007], [1283871449],
[1526862571], [1294881462], [283504463], [1014505150], [210258446],
[1345371845], [1789161393], [465946570], [9965594], [1213002863], [473974926],
[1867814161], [747880882], [2046826281], [845410732], [195430351],
[1140766264], [433656069], [1804244762], [1906022077], [1108026388],
[1519759817], [2099249276], [2141155270], [48778464], [1944933484],
[522011220], [1808483027], [965865845], [657591721], [368260435], [
365302572], [100798112], [1662083764], [1001633540], [2100433580],
[717611262], [668829244], [1451930205], [195265403], [1612132668], [837296122],
[1538780976], [1731830280], [96135375], [932682338], [324709142], [756193325],
[2080763299], [889190595], [1786771821], [1089697379], [931743425],
[1323840991], [503638979], [1369257728], [839288835], [1262823817],
[1241350637]]
},
'rightPrefix' : 'j0.',
'condition' : '("integer_02" == "j0.integer_02")',
'joinType' : 'INNER'
},
'intervals' : {
'type' : 'segments',
'segments' : [{
'itvl' : '2023-05-09T03:05:00.000Z/2023-05-09T03:10:00.000Z',
'ver' : '2023-05-09T03:11:22.477Z',
'part' : 0
}
]
},
'virtualColumns' : [],
'resultFormat' : 'compactedList',
'batchSize' : 20480,
'order' : 'none',
'filter' : None,
'columns' : ['__time', 'integer_02'],
'legacy' : False,
'context' : {
'defaultTimeout' : 300000,
'finalize' : False,
'maxQueuedBytes' : 0,
'maxScatterGatherBytes' : 2147483648,
'queryFailTime' : 1683860555990,
'queryId' : 'ca1704f3-6400-4d99-aad0-48edc57e50e6',
'sqlQueryId' : '6c55077b-cf1f-410f-80df-7932d21866e5',
'timeout' : 299999
},
'descending' : False,
'granularity' : {
'type' : 'all'
}
}
`
2.use default string type ,not long type
`org.apache.druid.segment.join.table.RowBasedIndexedTable#RowBasedIndexedTable(java.util.List<RowType>,
org.apache.druid.segment.RowAdapter<RowType>,
org.apache.druid.segment.column.RowSignature, java.util.Set<java.lang.String>,
java.lang.String, byte[])
public RowBasedIndexedTable(
final List<RowType> table,
final RowAdapter<RowType> rowAdapter,
final RowSignature rowSignature,
final Set<String> keyColumns,
final String version,
@Nullable
final byte[] cacheKey
)
{
this.table = table;
this.rowSignature = rowSignature;
this.columnFunctions =
rowSignature.getColumnNames().stream().map(rowAdapter::columnFunction).collect(Collectors.toList());
this.keyColumns = keyColumns;
this.version = version;
this.cacheKey = cacheKey;
if
(!ImmutableSet.copyOf(rowSignature.getColumnNames()).containsAll(keyColumns)) {
throw new ISE(
"keyColumns[%s] must all be contained in rowSignature[%s]",
String.join(", ", keyColumns),
rowSignature
);
}
indexes = new ArrayList<>(rowSignature.size());
for (int i = 0; i < rowSignature.size(); i++) {
final String column = rowSignature.getColumnName(i);
final Index m;
if (keyColumns.contains(column)) {
final ValueType keyType =
rowSignature.getColumnType(column).orElse(IndexedTableJoinMatcher.DEFAULT_KEY_TYPE);
//**### The rowSignature does not contain the key type. The default string
type is used.**
final RowBasedIndexBuilder builder = new
RowBasedIndexBuilder(keyType);
final Function<RowType, Object> columnFunction =
columnFunctions.get(i);
for (final RowType row : table) {
builder.add(columnFunction.apply(row));
}
m = builder.build();
} else {
m = null;
}
indexes.add(m);
}
}
`
3. build normal hashmap not Long2ObjectOpenHashMap
` public RowBasedIndexBuilder(ValueType keyType)
{
this.keyType = keyType;
if (keyType == ValueType.LONG) {
// We're specializing the type even though we don't specialize usage
in this class, for two reasons:
// (1) It's still useful to reduce overall memory footprint.
// (2) MapIndex specifically checks for Long2ObjectMap instances and
*does* specialize usage.
final Long2ObjectOpenHashMap<IntList> theMap = new
Long2ObjectOpenHashMap<>();
index = (Map) theMap;
} else {
index = new HashMap<>(); **### // return normal hashMap**
}
}
`
4. when singleRowMatch, return unsupportedOpertaionException
`org.apache.druid.segment.join.table.IndexedTableJoinMatcher.ConditionMatcherFactory#makeLongProcessor`
->
`org.apache.druid.segment.join.table.MapIndex#findUniqueLong`
` @Override
public int findUniqueLong(long key)
{
if (isLong2ObjectMap && keysUnique) {
final IntList rows = ((Long2ObjectMap<IntList>) (Map) index).get(key);
assert rows == null || rows.size() == 1;
return rows != null ? rows.getInt(0) : NOT_FOUND;
} else {
throw new UnsupportedOperationException();
}
}`
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]