private boolean deleteTableColumnStatisticsViaJdo(String catName, String dbName, String tableName,
      List<String> colNames, String engine) throws NoSuchObjectException, MetaException, InvalidObjectException, InvalidInputException {
    boolean ret = false;
    Query query = null;
    try {
      openTransaction();
      List<MTableColumnStatistics> mStatsObjColl;
      // Note: this does not verify ACID state; called internally when removing cols/etc.
      //       Also called via an unused metastore API that checks for ACID tables.
      query = pm.newQuery(MTableColumnStatistics.class);
      String filter;
      String parameters;
      if (colNames != null && !colNames.isEmpty()) {
        filter = "table.tableName == t1 && table.database.name == t2 && table.database.catalogName == t3 && t4.contains(colName)" + (engine != null ? " && engine == t5" : "");
        parameters = "java.lang.String t1, java.lang.String t2, java.lang.String t3, java.util.Collection t4" + (engine != null ? ", java.lang.String t5" : "");
      } else {
        filter = "table.tableName == t1 && table.database.name == t2 && table.database.catalogName == t3" + (engine != null ? " && engine == t4" : "");
        parameters = "java.lang.String t1, java.lang.String t2, java.lang.String t3" + (engine != null ? ", java.lang.String t4" : "");
      }

      query.setFilter(filter);
      query.declareParameters(parameters);
      List<Object> params = new ArrayList<>();
      params.add(normalizeIdentifier(tableName));
      params.add(normalizeIdentifier(dbName));
      params.add(normalizeIdentifier(catName));
      if (colNames != null && !colNames.isEmpty()) {
        List<String> normalizedColNames = new ArrayList<>();
        for (String colName : colNames){
          // trim the extra spaces, and change to lowercase
          normalizedColNames.add(normalizeIdentifier(colName));
        }
        params.add(normalizedColNames);
      }
      if (engine != null) {
        params.add(engine);
      }
      mStatsObjColl = (List<MTableColumnStatistics>) query.executeWithArray(params.toArray());
      pm.retrieveAll(mStatsObjColl);
      if (mStatsObjColl != null) {
        pm.deletePersistentAll(mStatsObjColl);
      } else {
        throw new NoSuchObjectException("Column stats doesn't exist for db=" + dbName + " table="
            + tableName + " col=" + String.join(", ", colNames));
      }
      ret = commitTransaction();
    } finally {
      rollbackAndCleanup(ret, query);
    }
    return ret;
  }
Get partition's column stats

@return Map of column name and its stats
standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/ObjectStore.java