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

Using filter and offset could lead to an assertion error in Calcite

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Open
    • Major
    • Resolution: Unresolved
    • 1.10.0
    • None
    • None

    Description

      git.commit.id.abbrev=2af709f

      Based on the filter selectivity, the planner might think that the number of records from upstream in lesser than the "OFFSET" value and can fail with an assertion error. Though in reality the estimate based on filter selectivity could be wrong

      Below is one such example where I am hitting this issue

      select * from (
        select * from (
          select d.*, concat(d.c_first_name, d.c_last_name) as name from (
            SELECT 
                  *
            FROM   catalog_sales,
                 customer
            WHERE  cs_bill_customer_sk = c_customer_sk
          ) as d 
          order by d.c_email_address nulls first 
        ) as d1 
        where d1.name is not null
      ) d2
      OFFSET 1434510;
      

      Exception from the logs

      2017-02-08 11:42:39,925 [27648b4f-98e5-22a9-f7d7-eccb587854a6:foreman] ERROR o.a.drill.exec.work.foreman.Foreman - SYSTEM ERROR: AssertionError
      
      
      [Error Id: d026ab7f-9e11-4854-b39c-66a7846b6a3a on qa-node190.qa.lab:31010]
      org.apache.drill.common.exceptions.UserException: SYSTEM ERROR: AssertionError
      
      
      [Error Id: d026ab7f-9e11-4854-b39c-66a7846b6a3a on qa-node190.qa.lab:31010]
              at org.apache.drill.common.exceptions.UserException$Builder.build(UserException.java:544) ~[drill-common-1.10.0-SNAPSHOT.jar:1.10.0-SNAPSHOT]
              at org.apache.drill.exec.work.foreman.Foreman$ForemanResult.close(Foreman.java:825) [drill-java-exec-1.10.0-SNAPSHOT.jar:1.10.0-SNAPSHOT]
              at org.apache.drill.exec.work.foreman.Foreman.moveToState(Foreman.java:945) [drill-java-exec-1.10.0-SNAPSHOT.jar:1.10.0-SNAPSHOT]
              at org.apache.drill.exec.work.foreman.Foreman.run(Foreman.java:281) [drill-java-exec-1.10.0-SNAPSHOT.jar:1.10.0-SNAPSHOT]
              at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) [na:1.7.0_111]
              at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) [na:1.7.0_111]
              at java.lang.Thread.run(Thread.java:745) [na:1.7.0_111]
      Caused by: org.apache.drill.exec.work.foreman.ForemanException: Unexpected exception during fragment initialization: null
              ... 4 common frames omitted
      Caused by: java.lang.AssertionError: null
              at org.apache.calcite.rel.metadata.RelMetadataQuery.isNonNegative(RelMetadataQuery.java:524) ~[calcite-core-1.4.0-drill-r19.jar:1.4.0-drill-r19]
              at org.apache.calcite.rel.metadata.RelMetadataQuery.validateResult(RelMetadataQuery.java:543) ~[calcite-core-1.4.0-drill-r19.jar:1.4.0-drill-r19]
              at org.apache.calcite.rel.metadata.RelMetadataQuery.getRowCount(RelMetadataQuery.java:87) ~[calcite-core-1.4.0-drill-r19.jar:1.4.0-drill-r19]
              at org.apache.calcite.rel.externalize.RelWriterImpl.explain_(RelWriterImpl.java:103) ~[calcite-core-1.4.0-drill-r19.jar:1.4.0-drill-r19]
              at org.apache.calcite.rel.externalize.RelWriterImpl.done(RelWriterImpl.java:160) ~[calcite-core-1.4.0-drill-r19.jar:1.4.0-drill-r19]
              at org.apache.calcite.rel.AbstractRelNode.explain(AbstractRelNode.java:283) ~[calcite-core-1.4.0-drill-r19.jar:1.4.0-drill-r19]
              at org.apache.calcite.plan.RelOptUtil.toString(RelOptUtil.java:1927) ~[calcite-core-1.4.0-drill-r19.jar:1.4.0-drill-r19]
              at org.apache.drill.exec.planner.sql.handlers.DefaultSqlHandler.log(DefaultSqlHandler.java:138) ~[drill-java-exec-1.10.0-SNAPSHOT.jar:1.10.0-SNAPSHOT]
              at org.apache.drill.exec.planner.sql.handlers.DefaultSqlHandler.log(DefaultSqlHandler.java:132) ~[drill-java-exec-1.10.0-SNAPSHOT.jar:1.10.0-SNAPSHOT]
              at org.apache.drill.exec.planner.sql.handlers.DefaultSqlHandler.transform(DefaultSqlHandler.java:411) ~[drill-java-exec-1.10.0-SNAPSHOT.jar:1.10.0-SNAPSHOT]
              at org.apache.drill.exec.planner.sql.handlers.DefaultSqlHandler.transform(DefaultSqlHandler.java:343) ~[drill-java-exec-1.10.0-SNAPSHOT.jar:1.10.0-SNAPSHOT]
              at org.apache.drill.exec.planner.sql.handlers.DefaultSqlHandler.convertToDrel(DefaultSqlHandler.java:240) ~[drill-java-exec-1.10.0-SNAPSHOT.jar:1.10.0-SNAPSHOT]
              at org.apache.drill.exec.planner.sql.handlers.DefaultSqlHandler.convertToDrel(DefaultSqlHandler.java:290) ~[drill-java-exec-1.10.0-SNAPSHOT.jar:1.10.0-SNAPSHOT]
              at org.apache.drill.exec.planner.sql.handlers.DefaultSqlHandler.getPlan(DefaultSqlHandler.java:168) ~[drill-java-exec-1.10.0-SNAPSHOT.jar:1.10.0-SNAPSHOT]
              at org.apache.drill.exec.planner.sql.DrillSqlWorker.getPhysicalPlan(DrillSqlWorker.java:117) ~[drill-java-exec-1.10.0-SNAPSHOT.jar:1.10.0-SNAPSHOT]
              at org.apache.drill.exec.planner.sql.DrillSqlWorker.getPlan(DrillSqlWorker.java:91) ~[drill-java-exec-1.10.0-SNAPSHOT.jar:1.10.0-SNAPSHOT]
              at org.apache.drill.exec.work.foreman.Foreman.runSQL(Foreman.java:1018) [drill-java-exec-1.10.0-SNAPSHOT.jar:1.10.0-SNAPSHOT]
              at org.apache.drill.exec.work.foreman.Foreman.run(Foreman.java:264) [drill-java-exec-1.10.0-SNAPSHOT.jar:1.10.0-SNAPSHOT]
              ... 3 common frames omitted
      

      Attachments

        Activity

          People

            Unassigned Unassigned
            rkins Rahul Kumar Challapalli
            Votes:
            0 Vote for this issue
            Watchers:
            1 Start watching this issue

            Dates

              Created:
              Updated: