[ 
https://issues.apache.org/jira/browse/HIVE-24343?focusedWorklogId=510183&page=com.atlassian.jira.plugin.system.issuetabpanels:worklog-tabpanel#worklog-510183
 ]

ASF GitHub Bot logged work on HIVE-24343:
-----------------------------------------

                Author: ASF GitHub Bot
            Created on: 11/Nov/20 10:50
            Start Date: 11/Nov/20 10:50
    Worklog Time Spent: 10m 
      Work Description: vnhive commented on a change in pull request #1640:
URL: https://github.com/apache/hive/pull/1640#discussion_r521273558



##########
File path: 
standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/MetaStoreDirectSql.java
##########
@@ -870,44 +870,88 @@ private boolean isViewTable(String catName, String 
dbName, String tblName) throw
       List<? extends Object> paramsForFilter, List<String> joinsForFilter, 
Integer max)
       throws MetaException {
     boolean doTrace = LOG.isDebugEnabled();
+
+    // The JDBC client driver implementations of Derby, PostgreSQL, MySQL, 
MariaDB and Oracle send the number of
+    // parameters being set in a executed statement as a 2 byte signed integer 
to the servers. This indirectly
+    // sets s limit on the number of parameters that can be set to 32767. This 
is also the number of parameters
+    // that can be passed to the JDO executeArray call.
+    final int JDBC_STMT_PARAM_LIMIT = 32767;
+
     final String dbNameLcase = dbName.toLowerCase();
     final String tblNameLcase = tblName.toLowerCase();
     final String catNameLcase = normalizeSpace(catName).toLowerCase();
 
     // We have to be mindful of order during filtering if we are not returning 
all partitions.
+    // If the number of parameters is larger than 32767 and the query is split 
into multiple
+    // parts, the order by would work within each query part.
     String orderForFilter = (max != null) ? " order by \"PART_NAME\" asc" : "";
 
     String queryText =
-        "select " + PARTITIONS + ".\"PART_ID\" from " + PARTITIONS + ""
-      + "  inner join " + TBLS + " on " + PARTITIONS + ".\"TBL_ID\" = " + TBLS 
+ ".\"TBL_ID\" "
-      + "    and " + TBLS + ".\"TBL_NAME\" = ? "
-      + "  inner join " + DBS + " on " + TBLS + ".\"DB_ID\" = " + DBS + 
".\"DB_ID\" "
-      + "     and " + DBS + ".\"NAME\" = ? "
-      + join(joinsForFilter, ' ')
-      + " where " + DBS + ".\"CTLG_NAME\" = ? "
-      + (StringUtils.isBlank(sqlFilter) ? "" : (" and " + sqlFilter)) + 
orderForFilter;
-    Object[] params = new Object[paramsForFilter.size() + 3];
-    params[0] = tblNameLcase;
-    params[1] = dbNameLcase;
-    params[2] = catNameLcase;
-    for (int i = 0; i < paramsForFilter.size(); ++i) {
-      params[i + 3] = paramsForFilter.get(i);
-    }
+            "select " + PARTITIONS + ".\"PART_ID\" from " + PARTITIONS + ""

Review comment:
       Will do ! Will make the change and resubmit.




----------------------------------------------------------------
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.

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


Issue Time Tracking
-------------------

    Worklog Id:     (was: 510183)
    Time Spent: 40m  (was: 0.5h)

> Table partition operations (create, drop, select) fail when the number of 
> partitions is greater than 32767 (signed int)
> -----------------------------------------------------------------------------------------------------------------------
>
>                 Key: HIVE-24343
>                 URL: https://issues.apache.org/jira/browse/HIVE-24343
>             Project: Hive
>          Issue Type: Bug
>          Components: Metastore
>            Reporter: Narayanan Venkateswaran
>            Assignee: Narayanan Venkateswaran
>            Priority: Minor
>              Labels: pull-request-available
>          Time Spent: 40m
>  Remaining Estimate: 0h
>
> The table partition operations - create, drop, select access the underlying 
> relation database using JDO, which internally routes the operations through 
> the JDBC driver. Most of the underlying JDBC driver implementations place a 
> limit on the number of parameters that can be passed through a statement 
> implementation. The limitations are as follows,
> postgreSQL - 32767
> (https://www.postgresql.org/message-id/16832734.post%40talk.nabble.com)
> MySQL - 32767 - 2 Byte Integer - num of params
> (https://dev.mysql.com/doc/internals/en/com-stmt-prepare-response.html#packet-COM_STMT_PREPARE_OK)
> Oracle - 32767 -
> https://www.jooq.org/doc/3.12/manual/sql-building/dsl-context/custom-settings/settings-inline-threshold/
> Derby - 32767 - stored in an unsinged integer - Note the Prepared
> Statement implementation here -
> [https://svn.apache.org/repos/asf/db/derby/code/branches/10.1/java/client/org/apache/derby/client/am/PreparedStatement.java]
>  
> These limits should be taken into account when querying the underlying 
> metastore.



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to