Uploaded image for project: 'Apache Drill'
  1. Apache Drill
  2. DRILL-2107

Hash Join throw IOBE for a query with exists subquery.

    XMLWordPrintableJSON

Details

    Description

      I hit an IOBE for TestTpchDistributed Q4, when I tried to enable an optimizer rule. Then, I simplified Q4 to the following, and still re-produce the same IOBE.

      select
        o.o_orderpriority
      from
        cp.`tpch/orders.parquet` o
      where
        exists (
          select
            *
          from
            cp.`tpch/lineitem.parquet` l
          where
            l.l_orderkey = o.o_orderkey
        )
      ;
      

      Stack trace of the exception:

      java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
           at java.util.ArrayList.rangeCheck(ArrayList.java:635) ~[na:1.7.0_45]
           at java.util.ArrayList.get(ArrayList.java:411) ~[na:1.7.0_45]
           at org.apache.drill.exec.record.VectorContainer.getValueAccessorById(VectorContainer.java:232) ~[drill-java-exec-0.8.0-SNAPSHOT-rebuffed.jar:0.8.0-SNAPSHOT]
           at org.apache.drill.exec.record.RecordBatchLoader.getValueAccessorById(RecordBatchLoader.java:149) ~[drill-java-exec-0.8.0-SNAPSHOT-rebuffed.jar:0.8.0-SNAPSHOT]
           at org.apache.drill.exec.physical.impl.unorderedreceiver.UnorderedReceiverBatch.getValueAccessorById(UnorderedReceiverBatch.java:132) ~[drill-java-exec-0.8.0-SNAPSHOT-rebuffed.jar:0.8.0-SNAPSHOT]
           at org.apache.drill.exec.test.generated.HashTableGen307.doSetup(HashTableTemplate.java:71) ~[na:na]
           at org.apache.drill.exec.test.generated.HashTableGen307.updateBatches(HashTableTemplate.java:473) ~[na:na]
           at org.apache.drill.exec.test.generated.HashJoinProbeGen313.executeProbePhase(HashJoinProbeTemplate.java:139) ~[na:na]
           at org.apache.drill.exec.test.generated.HashJoinProbeGen313.probeAndProject(HashJoinProbeTemplate.java:223) ~[na:na]
           at org.apache.drill.exec.physical.impl.join.HashJoinBatch.innerNext(HashJoinBatch.java:227) ~[drill-java-exec-0.8.0-SNAPSHOT-rebuffed.jar:0.8.0-SNAPSHOT]
      ....
      

      The physical plan seems to be correct, after enabling the new rule. Actually, if I disable HashJoin, and use merge join for the query, it works fine. So, seems the IOBE exposes some bug in HashJoin.

      To re-produce this issue, two options:
      1 ) - Modify DrillRuleSets.java, remove the comment before SwapJoinRule

      • alter session set `planner.slice_target` = 10;
      • run the query

      2) use the attached physical plan in json file, and use "submitplan" to submit the physical plan.

      For comparison, I also attached the physical plan when disabling hashjoin (use merge join), and the explain plan at physical operator level.

      Attachments

        1. DRILL-2107.patch
          6 kB
          Mehant Baid
        2. q4_1_mj.json
          8 kB
          Jinfeng Ni
        3. q4_1_mj_phy.txt
          6 kB
          Jinfeng Ni
        4. q4_1_hj.json
          7 kB
          Jinfeng Ni
        5. q4_1_hj_phy.txt
          5 kB
          Jinfeng Ni

        Activity

          People

            mehant Mehant Baid
            jni Jinfeng Ni
            Votes:
            0 Vote for this issue
            Watchers:
            3 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: