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

DCHECK in decimal-operators.cc while running an explain query with a lot of decimal exprs

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Resolved
    • Major
    • Resolution: Fixed
    • Impala 1.4
    • Impala 1.4
    • None

    Description

      Stack:

      F0506 11:30:19.679318  8757 decimal-operators.cc:457] Check failed: c1->type().type == TYPE_DECIMAL (1 vs. 14) 
      *** Check failure stack trace: ***
          @          0x1dad01d  google::LogMessage::Fail()
          @          0x1daf7bf  google::LogMessage::SendToLog()
          @          0x1dacc0b  google::LogMessage::Flush()
          @          0x1db004d  google::LogMessageFatal::~LogMessageFatal()
          @          0x10d162a  impala::DecimalOperators::Subtract_decimal_decimal()
          @           0xddeb8f  impala::Expr::GetValue()
          @          0x10d0fe1  impala::DecimalOperators::Add_decimal_decimal()
          @           0xddeb8f  impala::Expr::GetValue()
          @          0x108128f  impala::IsNullPredicate::ComputeFn()
          @           0xddeb8f  impala::Expr::GetValue()
          @          0x107120d  impala::Expr::GetValue()
          @           0xe965aa  Java_com_cloudera_impala_service_FeSupport_NativeEvalConstExpr
          @     0x7f10c9c7deee  (unknown)
      

      Log:

      I0506 11:30:19.670850  8757 InlineViewRef.java:130] inline view t2 smap: smap(t2.string_col_1:CAST(t1.boolean_col_2 AS STRING) (SlotRef{tblName=null, col=string_col_1, id=36}:SlotRef{tblName=null, col=null, id=6}) t2.string_col_2:CAST(t1.boolean_col_2 AS STRING) (SlotRef{tblName=null, col=string_col_2, id=37}:SlotRef{tblName=null, col=null, id=6}) t2.float_col_3:sum(t1.float_col_4 * t1.smallint_col_3) - count(t1.float_col_5 <= t1.float_col_4 AND t1.boolean_col_2) + sum(length(t1.string_col_1) - t1.float_col_5) (SlotRef{tblName=null, col=float_col_3, id=38}:ArithmeticExpr{op=+, (ArithmeticExpr{op=-, (SlotRef{tblName=null, col=null, id=7} CastExpr{isImplicit=true, target=DECIMAL(20,0), (SlotRef{tblName=null, col=null, id=8})})} SlotRef{tblName=null, col=null, id=9})}))
      I0506 11:30:19.671095  8757 InlineViewRef.java:131] inline view t2 baseTblSmap: smap(t2.string_col_1:CAST(t1.boolean_col_2 AS STRING) (SlotRef{tblName=null, col=string_col_1, id=36}:SlotRef{tblName=null, col=null, id=6}) t2.string_col_2:CAST(t1.boolean_col_2 AS STRING) (SlotRef{tblName=null, col=string_col_2, id=37}:SlotRef{tblName=null, col=null, id=6}) t2.float_col_3:sum(t1.float_col_4 * t1.smallint_col_3) - count(t1.float_col_5 <= t1.float_col_4 AND t1.boolean_col_2) + sum(length(t1.string_col_1) - t1.float_col_5) (SlotRef{tblName=null, col=float_col_3, id=38}:ArithmeticExpr{op=+, (ArithmeticExpr{op=-, (SlotRef{tblName=null, col=null, id=7} CastExpr{isImplicit=true, target=DECIMAL(20,0), (SlotRef{tblName=null, col=null, id=8})})} SlotRef{tblName=null, col=null, id=9})}))
      F0506 11:30:19.679318  8757 decimal-operators.cc:457] Check failed: c1->type().type == TYPE_DECIMAL (1 vs. 14)
      

      be/src/exprs/decimal-operators.cc

      340 #define DECIMAL_ARITHMETIC_OP(FN_NAME, OP_FN) \
      341   void* DecimalOperators::FN_NAME(Expr* e, TupleRow* row) {\
      342     DCHECK_EQ(e->GetNumChildren(), 2);\
      343     Expr* c1 = e->GetChild(0);\
      344     Expr* c2 = e->GetChild(1);\
      345     void* x = c1->GetValue(row);\
      346     void* y = c2->GetValue(row);\
      347     DCHECK_EQ(c1->type().type, TYPE_DECIMAL);\
      348     DCHECK_EQ(c2->type().type, TYPE_DECIMAL);\
      349     if (x == NULL || y == NULL) return NULL;\
      .
      .
      .
      457 DECIMAL_ARITHMETIC_OP(Subtract_decimal_decimal, Subtract)
      

      This query's technically illegal, since we don't have support for floor/ceil yet, but that wasn't why we hit the dcheck. One of these casts is messed up.
      Raw query (I'll try to find the minimal reproduction, but no luck yet):

      explain SELECT COUNT(t3.float_col_5 <= t2.float_col_3 * t1.float_col_5
                   AND t4.boolean_col_2) AS int_col_1
      FROM table_1 AS t1
      LEFT JOIN
        (SELECT CAST(t1.boolean_col_2 AS STRING) AS string_col_1,
                CAST(t1.boolean_col_2 AS STRING) AS string_col_2,
                SUM(t1.float_col_4 * t1.smallint_col_3) - COUNT(t1.float_col_5 <= t1.float_col_4
                                                                AND t1.boolean_col_2) + SUM(LENGTH(t1.string_col_1) - t1.float_col_5) AS float_col_3
         FROM table_1 AS t1
         GROUP BY CAST(t1.boolean_col_2 AS STRING),
                  CAST(t1.boolean_col_2 AS STRING) HAVING MIN(t1.double_col_6 + t1.double_col_6 - t1.float_col_5) IS NULL
         AND COUNT(t1.string_col_1) + SUM(t1.smallint_col_3) IS NULL
         AND COUNT(t1.float_col_4 * t1.smallint_col_3 + LENGTH(t1.string_col_1) - CAST(t1.boolean_col_2 AS DOUBLE)) + COUNT(t1.double_col_6 * t1.smallint_col_3 - CAST(t1.boolean_col_2 AS DOUBLE) + t1.float_col_5) - COUNT(t1.float_col_5) + COUNT(CAST(FLOOR(t1.double_col_6 + t1.float_col_5) AS STRING)) + COUNT(t1.boolean_col_2
      AND t1.float_col_4 IS NULL) - SUM(t1.smallint_col_3 - t1.float_col_4) + MAX(t1.double_col_6 - LENGTH(t1.string_col_1)) IS NULL
         AND COUNT(LENGTH(t1.string_col_1) + CAST(t1.boolean_col_2 AS INT) + t1.smallint_col_3) != COUNT(t1.double_col_6 * t1.double_col_6 * t1.double_col_6 + t1.float_col_4 + t1.smallint_col_3 - CAST(t1.boolean_col_2
      
                                                                  AND t1.boolean_col_2 AS INT))
         AND COUNT(t1.string_col_1) IS NOT NULL
         AND COUNT(t1.boolean_col_2) - MIN(CAST(t1.boolean_col_2 AS DOUBLE) + t1.double_col_6 * t1.double_col_6) + SUM(t1.double_col_6) != MIN(t1.float_col_4 + t1.float_col_4 * CAST(t1.boolean_col_2 AS DOUBLE)) * AVG(t1.double_col_6 * t1.float_col_5 - LENGTH(t1.string_col_1))
         AND COUNT(t1.boolean_col_2
                   AND t1.double_col_6 < t1.float_col_5) + AVG(t1.float_col_5) IS NULL
         AND COUNT(t1.string_col_1) + COUNT(t1.string_col_1) - COUNT(t1.boolean_col_2) - COUNT(t1.string_col_1) IS NOT NULL
         AND COUNT(t1.string_col_1) * MIN(t1.float_col_4) + MIN(t1.smallint_col_3 * CAST(t1.boolean_col_2 AS DOUBLE) - t1.float_col_5) - AVG(t1.float_col_5 + t1.smallint_col_3 - t1.double_col_6 * t1.float_col_5 + t1.float_col_5) >= COUNT(t1.boolean_col_2) - MIN(t1.smallint_col_3 - t1.double_col_6) * SUM(t1.float_col_4 + t1.double_col_6)) AS t2 ON t2.float_col_3 = t1.double_col_6
      AND t2.float_col_3 = t1.float_col_4
      INNER JOIN table_1 AS t3 ON t3.string_col_1 = t2.string_col_2
      LEFT JOIN table_1 AS t4 ON t4.float_col_5 = t3.float_col_4
      AND t4.boolean_col_2 = t1.boolean_col_2
      WHERE t1.string_col_1 IS NULL
      AND t4.string_col_1 IS NULL
      AND t2.string_col_1 IS NOT NULL
      AND t3.smallint_col_3 IS NULL
      AND t2.string_col_2 IS NOT NULL
      AND t4.smallint_col_3 + t3.smallint_col_3 > t3.smallint_col_3 * t3.smallint_col_3;
      

      Attachments

        Activity

          People

            nong_impala_60e1 Nong Li
            ishaan Ishaan Joshi
            Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: