trino: Query failure when IN compares indeterminate objects: VerifyException: result is null
CREATE TABLE memory.default.orders AS TABLE tpch.tiny.orders;
trino> SELECT * FROM memory.default.orders WHERE ARRAY[NULL,orderkey] IN ( ARRAY[0,0],ARRAY[0,1],ARRAY[0,2],ARRAY[0,3],ARRAY[0,4],ARRAY[0,5],ARRAY[0,6],ARRAY[0,7] );
Query 20220225_102124_00012_w9kv5, FAILED, 1 node
http://localhost:8080/ui/query.html?20220225_102124_00012_w9kv5
Splits: 24 total, 10 done (41.67%)
CPU Time: 0.0s total, 250K rows/s, 31MB/s, 55% active
Per Node: 0.1 parallelism, 28.2K rows/s, 3.5MB/s
Parallelism: 0.1
Peak Memory: 0B
0.27 [7.5K rows, 953KB] [28.2K rows/s, 3.5MB/s]
Query 20220225_102124_00012_w9kv5 failed: result is null
com.google.common.base.VerifyException: result is null
at com.google.common.base.Verify.verifyNotNull(Verify.java:503)
at io.trino.util.FastutilSetHelper$ObjectStrategy.equals(FastutilSetHelper.java:235)
at it.unimi.dsi.fastutil.objects.ObjectOpenCustomHashSet.contains(ObjectOpenCustomHashSet.java:442)
at io.trino.util.FastutilSetHelper.in(FastutilSetHelper.java:93)
at io.trino.$gen.PageFilter_20220225_102124_25.filter(Unknown Source)
at io.trino.$gen.PageFilter_20220225_102124_25.filter(Unknown Source)
at io.trino.operator.project.DictionaryAwarePageFilter.filter(DictionaryAwarePageFilter.java:83)
at io.trino.operator.project.PageProcessor.createWorkProcessor(PageProcessor.java:121)
at io.trino.operator.ScanFilterAndProjectOperator$SplitToPages.lambda$processPageSource$1(ScanFilterAndProjectOperator.java:295)
at io.trino.operator.WorkProcessorUtils.lambda$flatMap$5(WorkProcessorUtils.java:264)
at io.trino.operator.WorkProcessorUtils$3.process(WorkProcessorUtils.java:338)
at io.trino.operator.WorkProcessorUtils$ProcessWorkProcessor.process(WorkProcessorUtils.java:391)
at io.trino.operator.WorkProcessorUtils$3.process(WorkProcessorUtils.java:325)
at io.trino.operator.WorkProcessorUtils$ProcessWorkProcessor.process(WorkProcessorUtils.java:391)
at io.trino.operator.WorkProcessorUtils$3.process(WorkProcessorUtils.java:325)
at io.trino.operator.WorkProcessorUtils$ProcessWorkProcessor.process(WorkProcessorUtils.java:391)
at io.trino.operator.WorkProcessorUtils$3.process(WorkProcessorUtils.java:325)
at io.trino.operator.WorkProcessorUtils$ProcessWorkProcessor.process(WorkProcessorUtils.java:391)
at io.trino.operator.WorkProcessorUtils.lambda$flatten$7(WorkProcessorUtils.java:296)
at io.trino.operator.WorkProcessorUtils$3.process(WorkProcessorUtils.java:338)
at io.trino.operator.WorkProcessorUtils$ProcessWorkProcessor.process(WorkProcessorUtils.java:391)
at io.trino.operator.WorkProcessorUtils$3.process(WorkProcessorUtils.java:325)
at io.trino.operator.WorkProcessorUtils$ProcessWorkProcessor.process(WorkProcessorUtils.java:391)
at io.trino.operator.WorkProcessorUtils.getNextState(WorkProcessorUtils.java:240)
at io.trino.operator.WorkProcessorUtils.lambda$processStateMonitor$3(WorkProcessorUtils.java:219)
at io.trino.operator.WorkProcessorUtils$ProcessWorkProcessor.process(WorkProcessorUtils.java:391)
at io.trino.operator.WorkProcessorUtils.getNextState(WorkProcessorUtils.java:240)
at io.trino.operator.WorkProcessorUtils.lambda$finishWhen$4(WorkProcessorUtils.java:234)
at io.trino.operator.WorkProcessorUtils$ProcessWorkProcessor.process(WorkProcessorUtils.java:391)
at io.trino.operator.WorkProcessorSourceOperatorAdapter.getOutput(WorkProcessorSourceOperatorAdapter.java:150)
at io.trino.operator.Driver.processInternal(Driver.java:388)
at io.trino.operator.Driver.lambda$processFor$9(Driver.java:292)
at io.trino.operator.Driver.tryWithLock(Driver.java:693)
at io.trino.operator.Driver.processFor(Driver.java:285)
at io.trino.execution.SqlTaskExecution$DriverSplitRunner.processFor(SqlTaskExecution.java:1092)
at io.trino.execution.executor.PrioritizedSplitRunner.process(PrioritizedSplitRunner.java:163)
at io.trino.execution.executor.TaskExecutor$TaskRunner.run(TaskExecutor.java:488)
at io.trino.$gen.Trino_dev____20220225_101503_2.run(Unknown Source)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
at java.base/java.lang.Thread.run(Thread.java:829)
trino> SELECT DISTINCT ARRAY[NULL,orderkey] IN ( ARRAY[0,0],ARRAY[0,1],ARRAY[0,2],ARRAY[0,3],ARRAY[0,4],ARRAY[0,5],ARRAY[0,6],ARRAY[0,7] ) FROM memory.default.orders ;
Query 20220225_102405_00019_w9kv5, FAILED, 1 node
http://localhost:8080/ui/query.html?20220225_102405_00019_w9kv5
Splits: 40 total, 0 done (0.00%)
CPU Time: 0.0s total, 3.75M rows/s, 32.2MB/s, 40% active
Per Node: 0.0 parallelism, 56.4K rows/s, 496KB/s
Parallelism: 0.0
Peak Memory: 125KB
0.13 [7.5K rows, 66KB] [56.4K rows/s, 496KB/s]
Query 20220225_102405_00019_w9kv5 failed: result is null
com.google.common.base.VerifyException: result is null
at com.google.common.base.Verify.verifyNotNull(Verify.java:503)
at io.trino.util.FastutilSetHelper$ObjectStrategy.equals(FastutilSetHelper.java:235)
at it.unimi.dsi.fastutil.objects.ObjectOpenCustomHashSet.contains(ObjectOpenCustomHashSet.java:442)
at io.trino.util.FastutilSetHelper.in(FastutilSetHelper.java:93)
at io.trino.$gen.PageProjectionWork_20220225_102405_38.evaluate(Unknown Source)
at io.trino.$gen.PageProjectionWork_20220225_102405_38.process(Unknown Source)
at io.trino.operator.project.DictionaryAwarePageProjection$DictionaryAwarePageProjectionWork.processInternal(DictionaryAwarePageProjection.java:185)
at io.trino.operator.project.DictionaryAwarePageProjection$DictionaryAwarePageProjectionWork.process(DictionaryAwarePageProjection.java:121)
at io.trino.operator.project.PageProcessor$ProjectSelectedPositions.processBatch(PageProcessor.java:337)
at io.trino.operator.project.PageProcessor$ProjectSelectedPositions.process(PageProcessor.java:209)
at io.trino.operator.WorkProcessorUtils$ProcessWorkProcessor.process(WorkProcessorUtils.java:391)
at io.trino.operator.WorkProcessorUtils.lambda$flatten$7(WorkProcessorUtils.java:296)
at io.trino.operator.WorkProcessorUtils$3.process(WorkProcessorUtils.java:338)
at io.trino.operator.WorkProcessorUtils$ProcessWorkProcessor.process(WorkProcessorUtils.java:391)
at io.trino.operator.WorkProcessorUtils$3.process(WorkProcessorUtils.java:325)
at io.trino.operator.WorkProcessorUtils$ProcessWorkProcessor.process(WorkProcessorUtils.java:391)
at io.trino.operator.WorkProcessorUtils$3.process(WorkProcessorUtils.java:325)
at io.trino.operator.WorkProcessorUtils$ProcessWorkProcessor.process(WorkProcessorUtils.java:391)
at io.trino.operator.WorkProcessorUtils.lambda$flatten$7(WorkProcessorUtils.java:296)
at io.trino.operator.WorkProcessorUtils$3.process(WorkProcessorUtils.java:338)
at io.trino.operator.WorkProcessorUtils$ProcessWorkProcessor.process(WorkProcessorUtils.java:391)
at io.trino.operator.WorkProcessorUtils$3.process(WorkProcessorUtils.java:325)
at io.trino.operator.WorkProcessorUtils$ProcessWorkProcessor.process(WorkProcessorUtils.java:391)
at io.trino.operator.WorkProcessorUtils.getNextState(WorkProcessorUtils.java:240)
at io.trino.operator.WorkProcessorUtils.lambda$processStateMonitor$3(WorkProcessorUtils.java:219)
at io.trino.operator.WorkProcessorUtils$ProcessWorkProcessor.process(WorkProcessorUtils.java:391)
at io.trino.operator.WorkProcessorUtils.getNextState(WorkProcessorUtils.java:240)
at io.trino.operator.WorkProcessorUtils.lambda$finishWhen$4(WorkProcessorUtils.java:234)
at io.trino.operator.WorkProcessorUtils$ProcessWorkProcessor.process(WorkProcessorUtils.java:391)
at io.trino.operator.WorkProcessorSourceOperatorAdapter.getOutput(WorkProcessorSourceOperatorAdapter.java:150)
at io.trino.operator.Driver.processInternal(Driver.java:388)
at io.trino.operator.Driver.lambda$processFor$9(Driver.java:292)
at io.trino.operator.Driver.tryWithLock(Driver.java:693)
at io.trino.operator.Driver.processFor(Driver.java:285)
at io.trino.execution.SqlTaskExecution$DriverSplitRunner.processFor(SqlTaskExecution.java:1092)
at io.trino.execution.executor.PrioritizedSplitRunner.process(PrioritizedSplitRunner.java:163)
at io.trino.execution.executor.TaskExecutor$TaskRunner.run(TaskExecutor.java:488)
at io.trino.$gen.Trino_dev____20220225_101503_2.run(Unknown Source)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
at java.base/java.lang.Thread.run(Thread.java:829)
Triggering conditions
- source is pages (so not tpch, but eg hive or memory connector)
- filter uses IN with a list of 8+ values so that SwitchGenerationCase.SET_CONTAINS is used
- compared values are indeterminate (eg ARRAY with NULL elements)
- but they still have hash collisions, so that equals is invoked
About this issue
- Original URL
- State: open
- Created 2 years ago
- Comments: 17 (17 by maintainers)
projection:
filter:
You mean at runtime or during planning?
In any case, query should not fail because of IN predicate
comparisons against
NULLshould always yieldNULLresults until you can for sure deduce that results is false. E.g:sure, go ahead
This is not related to those changes - yet before those you needed long IN list to reproduce (>32 constants). On Trino 356 it still reproduces but with: