code: public static ModifyTableBuilder buildModifications(
            HTableDescriptor newTableDesc,
            HTableDescriptor currentTableDesc) {
      Preconditions.checkNotNull(newTableDesc);
      Preconditions.checkNotNull(currentTableDesc);
  
      ModifyTableBuilder requestBuilder = ModifyTableBuilder.newBuilder(currentTableDesc.getTableName());
      Set<String> currentColumnNames = getColumnNames(currentTableDesc);
      Set<String> newColumnNames = getColumnNames(newTableDesc);
  
      for (HColumnDescriptor hColumnDescriptor : newTableDesc.getFamilies()) {
        String columnName = hColumnDescriptor.getNameAsString();
        if (currentColumnNames.contains(columnName)) {
          requestBuilder.modify(hColumnDescriptor);
        } else {
          requestBuilder.add(hColumnDescriptor);
        }
      }
  
      Set<String> columnsToRemove = new HashSet<>(currentColumnNames);
      columnsToRemove.removeAll(newColumnNames);
  
      for (String column : columnsToRemove) {
        requestBuilder.delete(column);
      }
      return requestBuilder;
    }
docs: This method will build {@link ModifyColumnFamiliesRequest} objects based on a diff of the
  new and existing set of column descriptors.  This is for use in
  {@link org.apache.hadoop.hbase.client.Admin#modifyTable(TableName, HTableDescriptor)}.
  @param newTableDesc a {@link HTableDescriptor} object.
  @param currentTableDesc a {@link HTableDescriptor} object.
  @return a {@link ModifyTableBuilder} object to request modification along with GCRule.