You are viewing a plain text version of this content. The canonical link for it is here.
Posted to gitbox@hive.apache.org by GitBox <gi...@apache.org> on 2022/08/02 09:09:19 UTC

[GitHub] [hive] zabetak commented on a diff in pull request #3470: HIVE-26350: IndexOutOfBoundsException when generating splits for external JDBC table with partition column

zabetak commented on code in PR #3470:
URL: https://github.com/apache/hive/pull/3470#discussion_r935307984


##########
jdbc-handler/src/main/java/org/apache/hive/storage/jdbc/dao/GenericJdbcDatabaseAccessor.java:
##########
@@ -89,23 +92,76 @@ public List<String> getColumnNames(Configuration conf) throws HiveJdbcDatabaseAc
 
       ResultSetMetaData metadata = rs.getMetaData();
       int numColumns = metadata.getColumnCount();
-      List<String> columnNames = new ArrayList<String>(numColumns);
+      List<T> columnMeta = new ArrayList<>(numColumns);
       for (int i = 0; i < numColumns; i++) {
-        columnNames.add(metadata.getColumnName(i + 1));
+        columnMeta.add(colAccessor.get(metadata, i + 1));
       }
 
-      return columnNames;
+      return columnMeta;
     }
     catch (Exception e) {
-      LOGGER.error("Error while trying to get column names.", e);
-      throw new HiveJdbcDatabaseAccessException("Error while trying to get column names: " + e.getMessage(), e);
+      throw new HiveJdbcDatabaseAccessException("", e);

Review Comment:
   The choice boils down to which stacktrace we prefer to see when a problem occurs. Below, we have the three alternatives mentioned here:
   **Alternative 1**
   ```java
   throw new HiveJdbcDatabaseAccessException("", e);
   
   org.apache.hive.storage.jdbc.exception.HiveJdbcDatabaseAccessException: 
   	at org.apache.hive.storage.jdbc.dao.GenericJdbcDatabaseAccessor.getColumnMetadata(GenericJdbcDatabaseAccessor.java:103)
   	at org.apache.hive.storage.jdbc.dao.GenericJdbcDatabaseAccessor.getColumnTypes(GenericJdbcDatabaseAccessor.java:118)
   	at org.apache.hive.storage.jdbc.dao.TestGenericJdbcDatabaseAccessor.testGetColumnTypes_fieldListQuery(TestGenericJdbcDatabaseAccessor.java:113)
   Caused by: org.h2.jdbc.JdbcSQLSyntaxErrorException: Table "T_STRATEGY" not found; SQL statement:
   select name,referrer from t_strategy  LIMIT 1  [42102-210]
   	at org.h2.message.DbException.getJdbcSQLException(DbException.java:521)
   	at org.h2.message.DbException.getJdbcSQLException(DbException.java:496)
   	at org.h2.message.DbException.get(DbException.java:227)
   	at org.h2.message.DbException.get(DbException.java:203)
   	at org.h2.command.Parser.getTableOrViewNotFoundDbException(Parser.java:8410)
   	at org.h2.command.Parser.getTableOrViewNotFoundDbException(Parser.java:8381)
   	at org.h2.command.Parser.readTableOrView(Parser.java:8370)
   	at org.h2.command.Parser.readTablePrimary(Parser.java:1866)
   	at org.h2.command.Parser.readTableReference(Parser.java:2342)
   	at org.h2.command.Parser.parseSelectFromPart(Parser.java:2793)
   	at org.h2.command.Parser.parseSelect(Parser.java:2900)
   	at org.h2.command.Parser.parseQueryPrimary(Parser.java:2783)
   	at org.h2.command.Parser.parseQueryTerm(Parser.java:2650)
   	at org.h2.command.Parser.parseQueryExpressionBody(Parser.java:2629)
   	at org.h2.command.Parser.parseQueryExpressionBodyAndEndOfQuery(Parser.java:2622)
   	at org.h2.command.Parser.parseQueryExpression(Parser.java:2615)
   	at org.h2.command.Parser.parseQuery(Parser.java:2576)
   	at org.h2.command.Parser.parsePrepared(Parser.java:707)
   	at org.h2.command.Parser.parse(Parser.java:674)
   	at org.h2.command.Parser.parse(Parser.java:644)
   	at org.h2.command.Parser.prepareCommand(Parser.java:551)
   	at org.h2.engine.SessionLocal.prepareLocal(SessionLocal.java:615)
   	at org.h2.engine.SessionLocal.prepareCommand(SessionLocal.java:553)
   	at org.h2.jdbc.JdbcConnection.prepareCommand(JdbcConnection.java:1116)
   	at org.h2.jdbc.JdbcPreparedStatement.<init>(JdbcPreparedStatement.java:92)
   	at org.h2.jdbc.JdbcConnection.prepareStatement(JdbcConnection.java:288)
   	at org.apache.commons.dbcp2.DelegatingConnection.prepareStatement(DelegatingConnection.java:303)
   	at org.apache.commons.dbcp2.DelegatingConnection.prepareStatement(DelegatingConnection.java:303)
   	at org.apache.hive.storage.jdbc.dao.GenericJdbcDatabaseAccessor.getColumnMetadata(GenericJdbcDatabaseAccessor.java:90)
   	... 46 more
   ```
   
   **Alternative 2**
   ```java
   throw new HiveJdbcDatabaseAccessException(e);
   
   org.apache.hive.storage.jdbc.exception.HiveJdbcDatabaseAccessException: org.h2.jdbc.JdbcSQLSyntaxErrorException: Table "T_STRATEGY" not found; SQL statement:
   select name,referrer from t_strategy  LIMIT 1  [42102-210]
   
   	at org.apache.hive.storage.jdbc.dao.GenericJdbcDatabaseAccessor.getColumnMetadata(GenericJdbcDatabaseAccessor.java:103)
   	at org.apache.hive.storage.jdbc.dao.GenericJdbcDatabaseAccessor.getColumnTypes(GenericJdbcDatabaseAccessor.java:118)
   	at org.apache.hive.storage.jdbc.dao.TestGenericJdbcDatabaseAccessor.testGetColumnTypes_fieldListQuery(TestGenericJdbcDatabaseAccessor.java:113)
   Caused by: org.h2.jdbc.JdbcSQLSyntaxErrorException: Table "T_STRATEGY" not found; SQL statement:
   select name,referrer from t_strategy  LIMIT 1  [42102-210]
   	at org.h2.message.DbException.getJdbcSQLException(DbException.java:521)
   	at org.h2.message.DbException.getJdbcSQLException(DbException.java:496)
   	at org.h2.message.DbException.get(DbException.java:227)
   	at org.h2.message.DbException.get(DbException.java:203)
   	at org.h2.command.Parser.getTableOrViewNotFoundDbException(Parser.java:8410)
   	at org.h2.command.Parser.getTableOrViewNotFoundDbException(Parser.java:8381)
   	at org.h2.command.Parser.readTableOrView(Parser.java:8370)
   	at org.h2.command.Parser.readTablePrimary(Parser.java:1866)
   	at org.h2.command.Parser.readTableReference(Parser.java:2342)
   	at org.h2.command.Parser.parseSelectFromPart(Parser.java:2793)
   	at org.h2.command.Parser.parseSelect(Parser.java:2900)
   	at org.h2.command.Parser.parseQueryPrimary(Parser.java:2783)
   	at org.h2.command.Parser.parseQueryTerm(Parser.java:2650)
   	at org.h2.command.Parser.parseQueryExpressionBody(Parser.java:2629)
   	at org.h2.command.Parser.parseQueryExpressionBodyAndEndOfQuery(Parser.java:2622)
   	at org.h2.command.Parser.parseQueryExpression(Parser.java:2615)
   	at org.h2.command.Parser.parseQuery(Parser.java:2576)
   	at org.h2.command.Parser.parsePrepared(Parser.java:707)
   	at org.h2.command.Parser.parse(Parser.java:674)
   	at org.h2.command.Parser.parse(Parser.java:644)
   	at org.h2.command.Parser.prepareCommand(Parser.java:551)
   	at org.h2.engine.SessionLocal.prepareLocal(SessionLocal.java:615)
   	at org.h2.engine.SessionLocal.prepareCommand(SessionLocal.java:553)
   	at org.h2.jdbc.JdbcConnection.prepareCommand(JdbcConnection.java:1116)
   	at org.h2.jdbc.JdbcPreparedStatement.<init>(JdbcPreparedStatement.java:92)
   	at org.h2.jdbc.JdbcConnection.prepareStatement(JdbcConnection.java:288)
   	at org.apache.commons.dbcp2.DelegatingConnection.prepareStatement(DelegatingConnection.java:303)
   	at org.apache.commons.dbcp2.DelegatingConnection.prepareStatement(DelegatingConnection.java:303)
   	at org.apache.hive.storage.jdbc.dao.GenericJdbcDatabaseAccessor.getColumnMetadata(GenericJdbcDatabaseAccessor.java:90)
   	... 27 more
   ```
   **Alternative 3**
   ```java
   throw new HiveJdbcDatabaseAccessException("Error while trying to get column metadata", e);
   
   org.apache.hive.storage.jdbc.exception.HiveJdbcDatabaseAccessException: Error while trying to get column metadata
   
   	at org.apache.hive.storage.jdbc.dao.GenericJdbcDatabaseAccessor.getColumnMetadata(GenericJdbcDatabaseAccessor.java:103)
   	at org.apache.hive.storage.jdbc.dao.GenericJdbcDatabaseAccessor.getColumnTypes(GenericJdbcDatabaseAccessor.java:118)
   	at org.apache.hive.storage.jdbc.dao.TestGenericJdbcDatabaseAccessor.testGetColumnTypes_fieldListQuery(TestGenericJdbcDatabaseAccessor.java:113)
   Caused by: org.h2.jdbc.JdbcSQLSyntaxErrorException: Table "T_STRATEGY" not found; SQL statement:
   select name,referrer from t_strategy  LIMIT 1  [42102-210]
   	at org.h2.message.DbException.getJdbcSQLException(DbException.java:521)
   	at org.h2.message.DbException.getJdbcSQLException(DbException.java:496)
   	at org.h2.message.DbException.get(DbException.java:227)
   	at org.h2.message.DbException.get(DbException.java:203)
   	at org.h2.command.Parser.getTableOrViewNotFoundDbException(Parser.java:8410)
   	at org.h2.command.Parser.getTableOrViewNotFoundDbException(Parser.java:8381)
   	at org.h2.command.Parser.readTableOrView(Parser.java:8370)
   	at org.h2.command.Parser.readTablePrimary(Parser.java:1866)
   	at org.h2.command.Parser.readTableReference(Parser.java:2342)
   	at org.h2.command.Parser.parseSelectFromPart(Parser.java:2793)
   	at org.h2.command.Parser.parseSelect(Parser.java:2900)
   	at org.h2.command.Parser.parseQueryPrimary(Parser.java:2783)
   	at org.h2.command.Parser.parseQueryTerm(Parser.java:2650)
   	at org.h2.command.Parser.parseQueryExpressionBody(Parser.java:2629)
   	at org.h2.command.Parser.parseQueryExpressionBodyAndEndOfQuery(Parser.java:2622)
   	at org.h2.command.Parser.parseQueryExpression(Parser.java:2615)
   	at org.h2.command.Parser.parseQuery(Parser.java:2576)
   	at org.h2.command.Parser.parsePrepared(Parser.java:707)
   	at org.h2.command.Parser.parse(Parser.java:674)
   	at org.h2.command.Parser.parse(Parser.java:644)
   	at org.h2.command.Parser.prepareCommand(Parser.java:551)
   	at org.h2.engine.SessionLocal.prepareLocal(SessionLocal.java:615)
   	at org.h2.engine.SessionLocal.prepareCommand(SessionLocal.java:553)
   	at org.h2.jdbc.JdbcConnection.prepareCommand(JdbcConnection.java:1116)
   	at org.h2.jdbc.JdbcPreparedStatement.<init>(JdbcPreparedStatement.java:92)
   	at org.h2.jdbc.JdbcConnection.prepareStatement(JdbcConnection.java:288)
   	at org.apache.commons.dbcp2.DelegatingConnection.prepareStatement(DelegatingConnection.java:303)
   	at org.apache.commons.dbcp2.DelegatingConnection.prepareStatement(DelegatingConnection.java:303)
   	at org.apache.hive.storage.jdbc.dao.GenericJdbcDatabaseAccessor.getColumnMetadata(GenericJdbcDatabaseAccessor.java:90)
   	... 27 more
   ```
   Personally, I prefer _Alt1_ since it conveys the problem without redundant information. Next in the list is _Alt3_ and last goes _Alt2_ which makes the exception quite verbose.
   
   @kasakrisz let me know which one you prefer and I will apply the changes.



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: gitbox-unsubscribe@hive.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


---------------------------------------------------------------------
To unsubscribe, e-mail: gitbox-unsubscribe@hive.apache.org
For additional commands, e-mail: gitbox-help@hive.apache.org