Updated on 2022-11-04 GMT+08:00

Modifying a Table

Function Description

HBase allows you to modify table information using the modifyTable method of org.apache.hadoop.hbase.client.Admin.

Sample Code

The following code snippets are in the testModifyTable method in the HBaseExample class of the com.huawei.bigdata.hbase.examples packet.

public void testModifyTable() {
    LOG.info("Entering testModifyTable.");

    // Specify the column family name.
    byte[] familyName = Bytes.toBytes("education");

    Admin admin = null;
    try {
        // Instantiate an Admin object.
        admin = conn.getAdmin();

        // Obtain the table descriptor.
        TableDescriptor htd = TableDescriptorBuilder.newBuilder(tableName).build();

        // Check whether the column family is specified before modification.
        if (!htd.hasColumnFamily(familyName)) {
            // Create the column descriptor.
         ColumnFamilyDescriptor cfd = ColumnFamilyDescriptorBuilder.of(familyName);
         TableDescriptor td = TableDescriptorBuilder.newBuilder(admin.getDescriptor(tableName)).setColumnFamily(cfd).build();
            // Disable the table to get the table offline before modifying
            // the table.
            admin.disableTable(tableName);//Note [1]
            // Submit a modifyTable request.
            admin.modifyTable(td);
            // Enable the table to get the table online after modifying the
            // table.
            admin.enableTable(tableName);
        }
        LOG.info("Modify table successfully.");
    } catch (IOException e) {
        LOG.error("Modify table failed ", e);
    } finally {
        if (admin != null) {
            try {
                // Close the Admin object.
                admin.close();
            } catch (IOException e) {
                LOG.error("Close admin failed ", e);
            }
        }
    }
    LOG.info("Exiting testModifyTable.");
}

Note [1] modifyTable takes effect only when a table is disabled.