dengzhhu653 commented on code in PR #5578:
URL: https://github.com/apache/hive/pull/5578#discussion_r1886130504
##########
standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/HMSHandler.java:
##########
@@ -7420,6 +7420,64 @@ public boolean delete_partition_column_statistics(String
dbName, String tableNam
return ret;
}
+ @Override
+ public boolean
delete_partition_column_statistics_req(DeletePartitionColumnStatisticsRequest
req) throws TException {
+ String dbName = req.getDb_name();
+ String tableName = req.getTbl_name();
+ List<String> colNames = req.getCol_names();
+ String partName = req.getPart_name();
+ String engine = req.getEngine();
+ dbName = dbName.toLowerCase();
+ String[] parsedDbName = parseDbName(dbName, conf);
+ tableName = tableName.toLowerCase();
+ if (colNames != null) {
+ for (String colName : colNames) {
+ colName = colName.toLowerCase();
+ startFunction("delete_column_statistics_by_partition",": table=" +
+ TableName.getQualified(parsedDbName[CAT_NAME],
parsedDbName[DB_NAME], tableName) +
+ " partition=" + partName + " column=" + colName);
+ }
+ }
+ boolean ret = false, committed = false;
+
+ getMS().openTransaction();
+ try {
+ List<String> partVals = getPartValsFromName(getMS(),
parsedDbName[CAT_NAME], parsedDbName[DB_NAME], tableName, partName);
+ Table table = getMS().getTable(parsedDbName[CAT_NAME],
parsedDbName[DB_NAME], tableName);
+ // This API looks unused; if it were used we'd need to update stats
state and write ID.
+ // We cannot just randomly nuke some txn stats.
+ if (TxnUtils.isTransactionalTable(table)) {
+ throw new MetaException("Cannot delete stats via this API for a
transactional table");
+ }
+
+ ret =
getMS().deletePartitionMultiColumnStatistics(parsedDbName[CAT_NAME],
parsedDbName[DB_NAME], tableName,
+ partName, partVals, colNames, engine);
+ if (ret && colNames != null) {
+ for (String colName : colNames) {
+ if (transactionalListeners != null &&
!transactionalListeners.isEmpty()) {
+ MetaStoreListenerNotifier.notifyEvent(transactionalListeners,
+ EventType.DELETE_PARTITION_COLUMN_STAT,
+ new DeletePartitionColumnStatEvent(parsedDbName[CAT_NAME],
parsedDbName[DB_NAME], tableName,
+ partName, partVals, colName, engine, this));
+ }
+ if (!listeners.isEmpty()) {
Review Comment:
should this call be outside of the `transaction`? why do we notify the
listener just on success and `colNames` is not null, will some events be
missing?
--
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: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]