一、创建表
通过 HBase API 语句创建表。
参数说明:
| 参数名称 | 类型 | 必需 | 说明 | 示例值 |
| hbase.client.tdsql.quorum | String | 是 | TDSQL Boundless 服务的 RPC 地址和端口。 | 10.10.10.10:6752 |
| hbase.tdsql.hash.partition | Boolean | 是 | 启用 HBase 兼容模式,必须设置为true。 | Boolean.TRUE |
| mysql.native.username | String | 是 | 用户账号。 | user |
| mysql.native.password | String | 是 | 账号密码。 | passwd |
二、管理列族(ColumnFamily)
对已存在的表进行列族结构调整,包括添加新列族和修改现有列族配置。
package com.example;import org.apache.hadoop.conf.Configuration;import org.apache.hadoop.hbase.client.*;import org.apache.hadoop.hbase.util.Bytes;import org.apache.hadoop.hbase.HBaseConfiguration;import org.apache.hadoop.hbase.TableName;/** * HBase 修改列族示例程序 * 演示如何修改表的列族属性 */public class HBaseModifyColumnFamilyDemo { public static void main(String[] args) throws Exception { System.out.println("======================================================================"); System.out.println("HBase Modify Column Family Demo Start"); System.out.println("======================================================================"); Configuration config = HBaseConfiguration.create(); config.set("hbase.client.tdsql.quorum", "10.10.10.10:6752"); config.setBoolean("hbase.tdsql.hash.partition", Boolean.TRUE); config.set("mysql.native.username", "test"); config.set("mysql.native.password", "test123"); // 定义表名和列族 final TableName tableName = TableName.valueOf("demo_table"); final byte[] FAMILY = Bytes.toBytes("info"); final byte[] otherFamily = Bytes.toBytes("detail"); try (Connection connection = ConnectionFactory.createConnection(config)) { try (Admin admin = connection.getAdmin()) { // 检查表是否存在 if (!admin.tableExists(tableName)) { System.out.println("✗ Table " + tableName.getNameAsString() + " does not exist"); System.out.println("Please create the table first."); return; } System.out.println("Table " + tableName.getNameAsString() + " exists"); // 获取当前表的描述符 System.out.println("\\n=== Getting current table descriptor ==="); TableDescriptor current = admin.getDescriptor(tableName); // 打印当前列族配置 System.out.println("\\nCurrent Column Family Configuration:"); for (ColumnFamilyDescriptor cf : current.getColumnFamilies()) { System.out.println(" CF: " + Bytes.toString(cf.getName())); System.out.println(" MinVersions: " + cf.getMinVersions()); System.out.println(" MaxVersions: " + cf.getMaxVersions()); System.out.println(" TimeToLive: " + cf.getTimeToLive()); } // 修改第一个 CF 的 MaxVersions System.out.println("\\n=== Modifying Column Family: " + Bytes.toString(FAMILY) + " ==="); ColumnFamilyDescriptor updatedPrimary = ColumnFamilyDescriptorBuilder.newBuilder(current.getColumnFamily(FAMILY)) .setMaxVersions(current.getColumnFamily(FAMILY).getMaxVersions() + 3) .build(); System.out.println(" Old MaxVersions: " + current.getColumnFamily(FAMILY).getMaxVersions()); System.out.println(" New MaxVersions: " + updatedPrimary.getMaxVersions()); // 修改第二个 CF 的 MinVersions 和 TimeToLive System.out.println("\\n=== Modifying Column Family: " + Bytes.toString(otherFamily) + " ==="); ColumnFamilyDescriptor updatedSecondary = ColumnFamilyDescriptorBuilder.newBuilder(current.getColumnFamily(otherFamily)) .setMinVersions(current.getColumnFamily(otherFamily).getMinVersions() + 1) .setTimeToLive(60) .build(); System.out.println(" Old MinVersions: " + current.getColumnFamily(otherFamily).getMinVersions()); System.out.println(" New MinVersions: " + updatedSecondary.getMinVersions()); System.out.println(" Old TimeToLive: " + current.getColumnFamily(otherFamily).getTimeToLive()); System.out.println(" New TimeToLive: " + updatedSecondary.getTimeToLive()); // 使用 modifyColumnFamily 应用修改 System.out.println("\\n=== Applying modifications ==="); TableDescriptor updated = TableDescriptorBuilder.newBuilder(current) .modifyColumnFamily(updatedPrimary) .modifyColumnFamily(updatedSecondary) .build(); admin.modifyTable(updated); System.out.println("Table modified successfully"); // 验证修改结果 System.out.println("\\n=== Verifying modifications ==="); TableDescriptor modified = admin.getDescriptor(tableName); System.out.println("\\nModified Column Family Configuration:"); for (ColumnFamilyDescriptor cf : modified.getColumnFamilies()) { System.out.println(" CF: " + Bytes.toString(cf.getName())); System.out.println(" MinVersions: " + cf.getMinVersions()); System.out.println(" MaxVersions: " + cf.getMaxVersions()); System.out.println(" TimeToLive: " + cf.getTimeToLive()); } } } System.out.println("\\n======================================================================"); System.out.println("HBase Modify Column Family Demo Completed"); System.out.println("======================================================================"); }}