Uploaded image for project: 'IMPALA'
  1. IMPALA
  2. IMPALA-8719

SELECT from view fails with "AnalysisException: Column/field reference is ambiguous" after expression rewite

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Open
    • Major
    • Resolution: Unresolved
    • Impala 3.3.0
    • None
    • Frontend
    • None
    • ghx-label-9

    Description

      Minimal repro:

      CREATE DATABASE tmp;
      CREATE TABLE tmp.a_tbl (col1 BIGINT, col2 INT);
      CREATE TABLE tmp.b_tbl (col1 BIGINT);
      
      CREATE VIEW tmp.c_view
      AS SELECT a.col1 as c1, a.col2 as c2
      FROM tmp.a_tbl a INNER JOIN tmp.b_tbl b ON a.col1 = b.col1;
      
      SELECT * FROM tmp.c_view WHERE ((c1 = 1 AND c2 = 2) OR (c1 = 11 AND c2 = 12)) AND c2 = 22;
      

      This should return 0 rows, but instead the query fails with "ERROR: IllegalStateException: null" and the impalad log shows the following:

      W0627 15:38:07.103969 31182 Expr.java:1201] a94d3fb39954fe29:ef89dd2300000000] Not able to analyze after rewrite: org.apache.impala.common.AnalysisException: Column/field reference is ambiguous: 'col1' conjuncts: CompoundPredicate{op=OR, CompoundPredicate{op=AND, BoolLiteral{value=false} BinaryPredicate{op==, SlotRef{label=a.col1, path=col1, type=BIGINT, id=0} NumericLiteral{value=1, type=TINYINT}}} CompoundPredicate{op=AND, BoolLiteral{value=false} BinaryPredicate{op==, SlotRef{label=a.col1, path=col1, type=BIGINT, id=0} NumericLiteral{value=11, type=TINYINT}}}} BinaryPredicate{op==, SlotRef{label=a.col2, path=col2, type=INT, id=2} NumericLiteral{value=22, type=INT}, isInferred=true}
      I0627 15:38:07.104437 31182 jni-util.cc:288] a94d3fb39954fe29:ef89dd2300000000] java.lang.IllegalStateException
              at com.google.common.base.Preconditions.checkState(Preconditions.java:133)
              at org.apache.impala.analysis.SlotRef.isBoundBySlotIds(SlotRef.java:222)
              at org.apache.impala.analysis.Expr.isBoundBySlotIds(Expr.java:1230)
              at org.apache.impala.analysis.Expr.isBoundBySlotIds(Expr.java:1230)
              at org.apache.impala.analysis.Expr.isBoundBySlotIds(Expr.java:1230)
              at org.apache.impala.planner.HdfsPartitionPruner.prunePartitions(HdfsPartitionPruner.java:124)
              at org.apache.impala.planner.SingleNodePlanner.createHdfsScanPlan(SingleNodePlanner.java:1265)
              at org.apache.impala.planner.SingleNodePlanner.createScanNode(SingleNodePlanner.java:1391)
              at org.apache.impala.planner.SingleNodePlanner.createTableRefNode(SingleNodePlanner.java:1578)
              at org.apache.impala.planner.SingleNodePlanner.createTableRefsPlan(SingleNodePlanner.java:822)
              at org.apache.impala.planner.SingleNodePlanner.createSelectPlan(SingleNodePlanner.java:658)
              at org.apache.impala.planner.SingleNodePlanner.createQueryPlan(SingleNodePlanner.java:261)
              at org.apache.impala.planner.SingleNodePlanner.createInlineViewPlan(SingleNodePlanner.java:1096)
              at org.apache.impala.planner.SingleNodePlanner.createTableRefNode(SingleNodePlanner.java:1589)
              at org.apache.impala.planner.SingleNodePlanner.createTableRefsPlan(SingleNodePlanner.java:822)
              at org.apache.impala.planner.SingleNodePlanner.createSelectPlan(SingleNodePlanner.java:658)
              at org.apache.impala.planner.SingleNodePlanner.createQueryPlan(SingleNodePlanner.java:261)
              at org.apache.impala.planner.SingleNodePlanner.createSingleNodePlan(SingleNodePlanner.java:151)
              at org.apache.impala.planner.Planner.createPlan(Planner.java:105)
              at org.apache.impala.service.Frontend.createExecRequest(Frontend.java:1136)
              at org.apache.impala.service.Frontend.getPlannedExecRequest(Frontend.java:1430)
              at org.apache.impala.service.Frontend.doCreateExecRequest(Frontend.java:1309)
              at org.apache.impala.service.Frontend.getTExecRequest(Frontend.java:1217)
              at org.apache.impala.service.Frontend.createExecRequest(Frontend.java:1187)
              at org.apache.impala.service.JniFrontend.createExecRequest(JniFrontend.java:153)
      I0627 15:38:07.302868 31182 status.cc:124] a94d3fb39954fe29:ef89dd2300000000] IllegalStateException: null
          @          0x1b0b92c  impala::Status::Status()
          @          0x22c3ba4  impala::JniUtil::GetJniExceptionMsg()
          @          0x2101acf  impala::JniCall::Call<>()
          @          0x20fec9d  impala::JniUtil::CallJniMethod<>()
          @          0x20fd0e6  impala::Frontend::GetExecRequest()
          @          0x212acb2  impala::ImpalaServer::ExecuteInternal()
          @          0x212a79a  impala::ImpalaServer::Execute()
          @          0x21acf82  impala::ImpalaServer::query()
          @          0x26fdcf1  beeswax::BeeswaxServiceProcessor::process_query()
          @          0x26fda3f  beeswax::BeeswaxServiceProcessor::dispatchCall()
          @          0x26cc05c  impala::ImpalaServiceProcessor::dispatchCall()
          @          0x1abad1d  apache::thrift::TDispatchProcessor::process()
          @          0x1f09cc9  apache::thrift::server::TAcceptQueueServer::Task::run()
          @          0x1f002f8  impala::ThriftThread::RunRunnable()
          @          0x1f01a1e  boost::_mfi::mf2<>::operator()()
          @          0x1f018b4  boost::_bi::list3<>::operator()<>()
          @          0x1f01600  boost::_bi::bind_t<>::operator()()
          @          0x1f01513  boost::detail::function::void_function_obj_invoker0<>::invoke()
          @          0x1e26249  boost::function0<>::operator()()
          @          0x2339ea8  impala::Thread::SuperviseThread()
          @          0x234222c  boost::_bi::list5<>::operator()<>()
          @          0x2342150  boost::_bi::bind_t<>::operator()()
          @          0x2342113  boost::detail::thread_data<>::run()
          @          0x3a0cd09  thread_proxy
          @     0x7f3a31cf66da  start_thread
          @     0x7f3a2e34488e  clone
      

      Workarounds:
      Disabling expression rewrites (SET enable_expr_rewrites=false) fixes the issue.

      Renaming 'col1' column to something else in one of the tables and then recreating the view is another workaround.

      Attachments

        Activity

          People

            Unassigned Unassigned
            attilaj Attila Jeges
            Votes:
            0 Vote for this issue
            Watchers:
            4 Start watching this issue

            Dates

              Created:
              Updated: