Skip to content

Commit 2318bb5

Browse files
author
Hongdan Zhu
committed
HIVE-28655: Implement HMS Related Drop Stats Changes, Reset COLUMN_STAT_ACCURATE After Dropping
1 parent 063cfa3 commit 2318bb5

File tree

3 files changed

+37
-0
lines changed

3 files changed

+37
-0
lines changed

standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/HMSHandler.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7431,6 +7431,13 @@ public boolean delete_column_statistics_req(DeleteColumnStatisticsRequest req) t
74317431
if (!isPartitioned || req.isTableLevel()) {
74327432
ret = rawStore.deleteTableColumnStatistics(parsedDbName[CAT_NAME], parsedDbName[DB_NAME], tableName, colNames, engine);
74337433
if (ret) {
7434+
Map<String, String> parameters = table.getParameters();
7435+
if (parameters == null) {
7436+
parameters = new HashMap<>();
7437+
}
7438+
parameters.put("COLUMN_STATS_ACCURATE", "false");
7439+
table.setParameters(parameters);
7440+
rawStore.alterTable(parsedDbName[CAT_NAME], parsedDbName[DB_NAME], tableName, table, null);
74347441
eventType = EventType.DELETE_TABLE_COLUMN_STAT;
74357442
for (String colName :
74367443
colNames == null ? table.getSd().getCols().stream().map(FieldSchema::getName).collect(Collectors.toList()) : colNames) {
@@ -7460,6 +7467,8 @@ public boolean delete_column_statistics_req(DeleteColumnStatisticsRequest req) t
74607467
.collect(Collectors.toList()) : colNames) {
74617468
for (String partName : partNames) {
74627469
List<String> partVals = getPartValsFromName(table, partName);
7470+
Partition partition = rawStore.getPartition(parsedDbName[CAT_NAME], parsedDbName[DB_NAME], tableName, partVals);
7471+
Map<String, String> partParams = partition.getParameters();
74637472
if (transactionalListeners != null && !transactionalListeners.isEmpty()) {
74647473
MetaStoreListenerNotifier.notifyEvent(transactionalListeners, eventType,
74657474
new DeletePartitionColumnStatEvent(parsedDbName[CAT_NAME], parsedDbName[DB_NAME], tableName,

standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/MetaStoreDirectSql.java

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3242,6 +3242,32 @@ public void deleteColumnStatsState(long tbl_id) throws MetaException {
32423242
}
32433243
}
32443244

3245+
public Long getTableId(String dbName, String tableName) throws MetaException {
3246+
String queryText;
3247+
Long result;
3248+
switch (dbType.dbType) {
3249+
case MYSQL:
3250+
case POSTGRES:
3251+
case DERBY:
3252+
default:
3253+
// @formatter:off
3254+
queryText = ""
3255+
+ "select t.\"TBL_ID\" from " + TBLS + " t "
3256+
+ " join " + DBS + " d on t.\"DB_ID\" = d.\"DB_ID\" "
3257+
+ " where "
3258+
+ " d.\"NAME\" = " + dbName
3259+
+ " and t.\"TBL_NAME\" = " + tableName;
3260+
// @formatter:on
3261+
}
3262+
try (QueryWrapper query = new QueryWrapper(pm.newQuery("javax.jdo.query.SQL", queryText))) {
3263+
result = executeWithArray(query.getInnerQuery(), null, queryText);
3264+
} catch (Throwable t) {
3265+
throw new MetaException("Failed to fetch table ID: " + t.getMessage());
3266+
}
3267+
return result;
3268+
}
3269+
3270+
32453271
public boolean deleteTableColumnStatistics(long tableId, List<String> colNames, String engine) {
32463272
String deleteSql = "delete from " + TAB_COL_STATS + " where \"TBL_ID\" = " + tableId;
32473273
if (colNames != null && !colNames.isEmpty()) {

standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/ObjectStore.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10214,6 +10214,8 @@ public boolean deletePartitionColumnStatistics(String catName, String dbName, St
1021410214
}
1021510215
dbName = org.apache.commons.lang3.StringUtils.defaultString(dbName, Warehouse.DEFAULT_DATABASE_NAME);
1021610216
catName = normalizeIdentifier(catName);
10217+
long tableID = directSql.getTableId(dbName, tableName);
10218+
directSql.deleteColumnStatsState(tableID);
1021710219
return new GetHelper<Boolean>(catName, dbName, tableName, true, true) {
1021810220
@Override
1021910221
protected String describeResult() {

0 commit comments

Comments
 (0)