[ 
https://issues.apache.org/jira/browse/HIVE-29498?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=18064373#comment-18064373
 ] 

lei w commented on HIVE-29498:
------------------------------

[~alexdesiqueira] [~gsaihemanth] 

> Incomplete partition values retrieved for multi-level partitioned tables 
> during DROP TABLE
> ------------------------------------------------------------------------------------------
>
>                 Key: HIVE-29498
>                 URL: https://issues.apache.org/jira/browse/HIVE-29498
>             Project: Hive
>          Issue Type: Bug
>          Components: Hive
>    Affects Versions: 1.2.1
>            Reporter: lei w
>            Priority: Major
>
> Currently, we are using Hive version 1.2.1 and have encountered an issue 
> where multi-level partitioned tables occasionally fail to be dropped.
> The specific symptom is that the partition retrieved via MetaStoreDirectSql 
> contains a value for only one partition key, while the other partition keys 
> are null. Typically, only the first-level partition key has a value, and the 
> subsequent levels are empty.
> Consequently, this leads to an exception when calling the 
> Warehouse#makePartName method to concatenate partition values later in the 
> ObjectStore.
> Does anyone have any insights or workarounds regarding this issue? Any help 
> would be greatly appreciated. Thank you!
> {code:java}
>     private List<Path> dropPartitionsAndGetLocations(RawStore ms, String 
> dbName,
>       String tableName, Path tablePath, List<FieldSchema> partitionKeys, 
> boolean checkLocation)
>       throws MetaException, IOException, NoSuchObjectException, 
> InvalidObjectException,
>       InvalidInputException {
>       int partitionBatchSize = HiveConf.getIntVar(hiveConf,
>           ConfVars.METASTORE_BATCH_RETRIEVE_MAX);
>       Path tableDnsPath = null;
>       if (tablePath != null) {
>         tableDnsPath = wh.getDnsPath(tablePath);
>       }
>       List<Path> partPaths = new ArrayList<Path>();
>       Table tbl = ms.getTable(dbName, tableName);
>       // call dropPartition on each of the table's partitions to follow the
>       // procedure for cleanly dropping partitions.
>       while (true) {
>         List<Partition> partsToDelete = ms.getPartitions(dbName, tableName, 
> partitionBatchSize);
>         if (partsToDelete == null || partsToDelete.isEmpty()) {
>           break;
>         }
>         List<String> partNames = new ArrayList<String>();
>         for (Partition part : partsToDelete) {
>           if (checkLocation && part.getSd() != null &&
>               part.getSd().getLocation() != null) {
>             Path partPath = wh.getDnsPath(new 
> Path(part.getSd().getLocation()));
>             if (tableDnsPath == null ||
>                 (partPath != null && !isSubdirectory(tableDnsPath, 
> partPath))) {
>               if (!wh.isWritable(partPath.getParent())) {
>                 throw new MetaException("Table metadata not deleted since the 
> partition " +
>                     Warehouse.makePartName(partitionKeys, part.getValues()) +
>                     " has parent location " + partPath.getParent() + " which 
> is not writable " +
>                     "by " + hiveConf.getUser());
>               }
>               partPaths.add(partPath);
>             }
>           }
>              //makePartName throw exception
>           partNames.add(Warehouse.makePartName(tbl.getPartitionKeys(), 
> part.getValues()));
>         } 
>        // drop partiton
>         ms.dropPartitions(dbName, tableName, partNames);
>       }
>       return partPaths;
>     }
> {code}



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to