[ https://issues.apache.org/jira/browse/HIVE-10811?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14566366#comment-14566366 ]
Jesus Camacho Rodriguez commented on HIVE-10811: ------------------------------------------------ Follow-up in HIVE-10874. > RelFieldTrimmer throws NoSuchElementException in some cases > ----------------------------------------------------------- > > Key: HIVE-10811 > URL: https://issues.apache.org/jira/browse/HIVE-10811 > Project: Hive > Issue Type: Bug > Components: CBO > Reporter: Jesus Camacho Rodriguez > Assignee: Jesus Camacho Rodriguez > Fix For: 1.2.1 > > Attachments: HIVE-10811.01.patch, HIVE-10811.02.patch, > HIVE-10811.patch > > > RelFieldTrimmer runs into NoSuchElementException in some cases. > Stack trace: > {noformat} > Exception in thread "main" java.lang.AssertionError: Internal error: While > invoking method 'public org.apache.calcite.sql2rel.RelFieldTrimmer$TrimResult > org.apache.calcite.sql2rel.RelFieldTrimmer.trimFields(org.apache.calcite.rel.core.Sort,org.apache.calcite.util.ImmutableBitSet,java.util.Set)' > at org.apache.calcite.util.Util.newInternal(Util.java:743) > at org.apache.calcite.util.ReflectUtil$2.invoke(ReflectUtil.java:543) > at > org.apache.calcite.sql2rel.RelFieldTrimmer.dispatchTrimFields(RelFieldTrimmer.java:269) > at > org.apache.calcite.sql2rel.RelFieldTrimmer.trim(RelFieldTrimmer.java:175) > at > org.apache.hadoop.hive.ql.parse.CalcitePlanner$CalcitePlannerAction.applyPreJoinOrderingTransforms(CalcitePlanner.java:947) > at > org.apache.hadoop.hive.ql.parse.CalcitePlanner$CalcitePlannerAction.apply(CalcitePlanner.java:820) > at > org.apache.hadoop.hive.ql.parse.CalcitePlanner$CalcitePlannerAction.apply(CalcitePlanner.java:768) > at org.apache.calcite.tools.Frameworks$1.apply(Frameworks.java:109) > at > org.apache.calcite.prepare.CalcitePrepareImpl.perform(CalcitePrepareImpl.java:730) > at org.apache.calcite.tools.Frameworks.withPrepare(Frameworks.java:145) > at org.apache.calcite.tools.Frameworks.withPlanner(Frameworks.java:105) > at > org.apache.hadoop.hive.ql.parse.CalcitePlanner.getOptimizedAST(CalcitePlanner.java:607) > at > org.apache.hadoop.hive.ql.parse.CalcitePlanner.genOPTree(CalcitePlanner.java:244) > at > org.apache.hadoop.hive.ql.parse.SemanticAnalyzer.analyzeInternal(SemanticAnalyzer.java:10048) > at > org.apache.hadoop.hive.ql.parse.CalcitePlanner.analyzeInternal(CalcitePlanner.java:207) > at > org.apache.hadoop.hive.ql.parse.BaseSemanticAnalyzer.analyze(BaseSemanticAnalyzer.java:227) > at org.apache.hadoop.hive.ql.Driver.compile(Driver.java:424) > at org.apache.hadoop.hive.ql.Driver.compile(Driver.java:308) > at org.apache.hadoop.hive.ql.Driver.compileInternal(Driver.java:1122) > at org.apache.hadoop.hive.ql.Driver.runInternal(Driver.java:1170) > at org.apache.hadoop.hive.ql.Driver.run(Driver.java:1059) > at org.apache.hadoop.hive.ql.Driver.run(Driver.java:1049) > at > org.apache.hadoop.hive.cli.CliDriver.processLocalCmd(CliDriver.java:213) > at org.apache.hadoop.hive.cli.CliDriver.processCmd(CliDriver.java:165) > at org.apache.hadoop.hive.cli.CliDriver.processLine(CliDriver.java:376) > at > org.apache.hadoop.hive.cli.CliDriver.executeDriver(CliDriver.java:736) > at org.apache.hadoop.hive.cli.CliDriver.run(CliDriver.java:681) > at org.apache.hadoop.hive.cli.CliDriver.main(CliDriver.java:621) > at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) > at > sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) > at > sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) > at java.lang.reflect.Method.invoke(Method.java:606) > at org.apache.hadoop.util.RunJar.run(RunJar.java:221) > at org.apache.hadoop.util.RunJar.main(RunJar.java:136) > Caused by: java.lang.reflect.InvocationTargetException > at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) > at > sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) > at > sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) > at java.lang.reflect.Method.invoke(Method.java:606) > at org.apache.calcite.util.ReflectUtil$2.invoke(ReflectUtil.java:536) > ... 32 more > Caused by: java.lang.AssertionError: Internal error: While invoking method > 'public org.apache.calcite.sql2rel.RelFieldTrimmer$TrimResult > org.apache.calcite.sql2rel.RelFieldTrimmer.trimFields(org.apache.calcite.rel.core.Sort,org.apache.calcite.util.ImmutableBitSet,java.util.Set)' > at org.apache.calcite.util.Util.newInternal(Util.java:743) > at org.apache.calcite.util.ReflectUtil$2.invoke(ReflectUtil.java:543) > at > org.apache.calcite.sql2rel.RelFieldTrimmer.dispatchTrimFields(RelFieldTrimmer.java:269) > at > org.apache.calcite.sql2rel.RelFieldTrimmer.trimChild(RelFieldTrimmer.java:210) > at > org.apache.calcite.sql2rel.RelFieldTrimmer.trimFields(RelFieldTrimmer.java:499) > ... 37 more > Caused by: java.lang.reflect.InvocationTargetException > at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) > at > sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) > at > sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) > at java.lang.reflect.Method.invoke(Method.java:606) > at org.apache.calcite.util.ReflectUtil$2.invoke(ReflectUtil.java:536) > ... 40 more > Caused by: java.lang.AssertionError: Internal error: While invoking method > 'public org.apache.calcite.sql2rel.RelFieldTrimmer$TrimResult > org.apache.calcite.sql2rel.RelFieldTrimmer.trimFields(org.apache.calcite.rel.core.Project,org.apache.calcite.util.ImmutableBitSet,java.util.Set)' > at org.apache.calcite.util.Util.newInternal(Util.java:743) > at org.apache.calcite.util.ReflectUtil$2.invoke(ReflectUtil.java:543) > at > org.apache.calcite.sql2rel.RelFieldTrimmer.dispatchTrimFields(RelFieldTrimmer.java:269) > at > org.apache.calcite.sql2rel.RelFieldTrimmer.trimChild(RelFieldTrimmer.java:210) > at > org.apache.calcite.sql2rel.RelFieldTrimmer.trimFields(RelFieldTrimmer.java:499) > ... 45 more > Caused by: java.lang.reflect.InvocationTargetException > at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) > at > sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) > at > sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) > at java.lang.reflect.Method.invoke(Method.java:606) > at org.apache.calcite.util.ReflectUtil$2.invoke(ReflectUtil.java:536) > ... 48 more > Caused by: java.lang.AssertionError: Internal error: While invoking method > 'public org.apache.calcite.sql2rel.RelFieldTrimmer$TrimResult > org.apache.calcite.sql2rel.RelFieldTrimmer.trimFields(org.apache.calcite.rel.core.Aggregate,org.apache.calcite.util.ImmutableBitSet,java.util.Set)' > at org.apache.calcite.util.Util.newInternal(Util.java:743) > at org.apache.calcite.util.ReflectUtil$2.invoke(ReflectUtil.java:543) > at > org.apache.calcite.sql2rel.RelFieldTrimmer.dispatchTrimFields(RelFieldTrimmer.java:269) > at > org.apache.calcite.sql2rel.RelFieldTrimmer.trimChild(RelFieldTrimmer.java:210) > at > org.apache.calcite.sql2rel.RelFieldTrimmer.trimFields(RelFieldTrimmer.java:345) > ... 53 more > Caused by: java.lang.reflect.InvocationTargetException > at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) > at > sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) > at > sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) > at java.lang.reflect.Method.invoke(Method.java:606) > at org.apache.calcite.util.ReflectUtil$2.invoke(ReflectUtil.java:536) > ... 56 more > Caused by: java.lang.AssertionError: Internal error: While invoking method > 'public org.apache.calcite.sql2rel.RelFieldTrimmer$TrimResult > org.apache.calcite.sql2rel.RelFieldTrimmer.trimFields(org.apache.calcite.rel.core.Project,org.apache.calcite.util.ImmutableBitSet,java.util.Set)' > at org.apache.calcite.util.Util.newInternal(Util.java:743) > at org.apache.calcite.util.ReflectUtil$2.invoke(ReflectUtil.java:543) > at > org.apache.calcite.sql2rel.RelFieldTrimmer.dispatchTrimFields(RelFieldTrimmer.java:269) > at > org.apache.calcite.sql2rel.RelFieldTrimmer.trimChild(RelFieldTrimmer.java:210) > at > org.apache.calcite.sql2rel.RelFieldTrimmer.trimFields(RelFieldTrimmer.java:772) > ... 61 more > Caused by: java.lang.reflect.InvocationTargetException > at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) > at > sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) > at > sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) > at java.lang.reflect.Method.invoke(Method.java:606) > at org.apache.calcite.util.ReflectUtil$2.invoke(ReflectUtil.java:536) > ... 64 more > Caused by: java.lang.AssertionError: Internal error: While invoking method > 'public org.apache.calcite.sql2rel.RelFieldTrimmer$TrimResult > org.apache.calcite.sql2rel.RelFieldTrimmer.trimFields(org.apache.calcite.rel.core.Project,org.apache.calcite.util.ImmutableBitSet,java.util.Set)' > at org.apache.calcite.util.Util.newInternal(Util.java:743) > at org.apache.calcite.util.ReflectUtil$2.invoke(ReflectUtil.java:543) > at > org.apache.calcite.sql2rel.RelFieldTrimmer.dispatchTrimFields(RelFieldTrimmer.java:269) > at > org.apache.calcite.sql2rel.RelFieldTrimmer.trimChild(RelFieldTrimmer.java:210) > at > org.apache.calcite.sql2rel.RelFieldTrimmer.trimFields(RelFieldTrimmer.java:345) > ... 69 more > Caused by: java.lang.reflect.InvocationTargetException > at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) > at > sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) > at > sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) > at java.lang.reflect.Method.invoke(Method.java:606) > at org.apache.calcite.util.ReflectUtil$2.invoke(ReflectUtil.java:536) > ... 72 more > Caused by: java.util.NoSuchElementException > at java.util.AbstractList$Itr.next(AbstractList.java:364) > at java.util.AbstractList.hashCode(AbstractList.java:540) > at org.apache.calcite.util.Util.hash(Util.java:230) > at org.apache.calcite.util.Pair.hashCode(Pair.java:87) > at > com.google.common.base.Equivalences$Equals.doHash(Equivalences.java:70) > at com.google.common.base.Equivalence.hash(Equivalence.java:105) > at com.google.common.cache.LocalCache.hash(LocalCache.java:1888) > at com.google.common.cache.LocalCache.getIfPresent(LocalCache.java:3953) > at > com.google.common.cache.LocalCache$LocalManualCache.getIfPresent(LocalCache.java:4758) > at > org.apache.calcite.rel.type.RelDataTypeFactoryImpl.canonize(RelDataTypeFactoryImpl.java:352) > at > org.apache.calcite.rel.type.RelDataTypeFactoryImpl.createStructType(RelDataTypeFactoryImpl.java:148) > at > org.apache.calcite.rel.type.RelDataTypeFactoryImpl.createStructType(RelDataTypeFactoryImpl.java:172) > at org.apache.calcite.plan.RelOptUtil.permute(RelOptUtil.java:2589) > at > org.apache.calcite.sql2rel.RelFieldTrimmer.trimFields(RelFieldTrimmer.java:383) > ... 77 more > {noformat} > query: > {noformat} > SELECT w_warehouse_name, > w_warehouse_sq_ft, > w_city, > w_county, > w_state, > w_country, > ship_carriers, > year, > Sum(jan_sales) AS jan_sales, > Sum(feb_sales) AS feb_sales, > Sum(jan_sales / w_warehouse_sq_ft) AS jan_sales_per_sq_foot, > Sum(feb_sales / w_warehouse_sq_ft) AS feb_sales_per_sq_foot, > Sum(jan_net) AS jan_net, > Sum(feb_net) AS feb_net > FROM (SELECT w_warehouse_name, > w_warehouse_sq_ft, > w_city, > w_county, > w_state, > w_country, > Concat('DHL', ',', 'BARIAN') AS ship_carriers, > d_year AS year, > Sum(CASE > WHEN d_moy = 1 THEN ws_ext_sales_price * ws_quantity > ELSE Cast(0 AS DECIMAL(7, 2)) > end) AS jan_sales, > Sum(CASE > WHEN d_moy = 2 THEN ws_ext_sales_price * ws_quantity > ELSE Cast(0 AS DECIMAL(7, 2)) > end) AS feb_sales, > Sum(CASE > WHEN d_moy = 1 THEN ws_net_paid * ws_quantity > ELSE Cast(0 AS DECIMAL(7, 2)) > end) AS jan_net, > Sum(CASE > WHEN d_moy = 2 THEN ws_net_paid * ws_quantity > ELSE Cast(0 AS DECIMAL(7, 2)) > end) AS feb_net > FROM web_sales > JOIN warehouse > ON web_sales.ws_warehouse_sk = warehouse.w_warehouse_sk > JOIN date_dim > ON web_sales.ws_sold_date_sk = date_dim.d_date_sk > JOIN time_dim > ON web_sales.ws_sold_time_sk = time_dim.t_time_sk > JOIN ship_mode > ON web_sales.ws_ship_mode_sk = ship_mode.sm_ship_mode_sk > WHERE d_year = 2001 > AND t_time BETWEEN 30838 AND 30838 + 28800 > AND sm_carrier IN ( 'DHL', 'BARIAN' ) > GROUP BY w_warehouse_name, > w_warehouse_sq_ft, > w_city, > w_county, > w_state, > w_country, > d_year > UNION DISTINCT > SELECT w_warehouse_name, > w_warehouse_sq_ft, > w_city, > w_county, > w_state, > w_country, > Concat('DHL', ',', 'BARIAN') AS ship_carriers, > d_year AS year, > Sum(CASE > WHEN d_moy = 1 THEN cs_sales_price * cs_quantity > ELSE Cast(0 AS DECIMAL(7, 2)) > end) AS jan_sales, > Sum(CASE > WHEN d_moy = 2 THEN cs_sales_price * cs_quantity > ELSE Cast(0 AS DECIMAL(7, 2)) > end) AS feb_sales, > Sum(CASE > WHEN d_moy = 1 THEN cs_net_paid_inc_tax * cs_quantity > ELSE Cast(0 AS DECIMAL(7, 2)) > end) AS jan_net, > Sum(CASE > WHEN d_moy = 2 THEN cs_net_paid_inc_tax * cs_quantity > ELSE Cast(0 AS DECIMAL(7, 2)) > end) AS feb_net > FROM catalog_sales > JOIN warehouse > ON catalog_sales.cs_warehouse_sk = warehouse.w_warehouse_sk > JOIN date_dim > ON catalog_sales.cs_sold_date_sk = date_dim.d_date_sk > JOIN time_dim > ON catalog_sales.cs_sold_time_sk = time_dim.t_time_sk > JOIN ship_mode > ON catalog_sales.cs_ship_mode_sk = ship_mode.sm_ship_mode_sk > WHERE d_year = 2001 > AND t_time BETWEEN 30838 AND 30838 + 28800 > AND sm_carrier IN ( 'DHL', 'BARIAN' ) > GROUP BY w_warehouse_name, > w_warehouse_sq_ft, > w_city, > w_county, > w_state, > w_country, > d_year) x > GROUP BY w_warehouse_name, > w_warehouse_sq_ft, > w_city, > w_county, > w_state, > w_country, > ship_carriers, > year > ORDER BY w_warehouse_name > LIMIT 100; > {noformat} > Seems like use of Sum(jan_sales / w_warehouse_sq_ft) AS > jan_sales_per_sq_foot, > Sum(feb_sales / w_warehouse_sq_ft) AS feb_sales_per_sq_foot in the select > clause causing the error. > Query works fine if I turn off cbo or remove these two columns from select > clause. -- This message was sent by Atlassian JIRA (v6.3.4#6332)