创建表
表是数据存储的基本单位。创建表时需要指定表名、列族以及行键。
通过 HBase API 语句创建表。
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;public class HBaseCreateTableDemo {public static void main(String[] args) throws Exception {System.out.println("======================================================================");System.out.println("HBase Create Table Demo Start");System.out.println("======================================================================");Configuration config = HBaseConfiguration.create();config.setBoolean("hbase.defaults.for.version.skip", Boolean.TRUE);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[] INFO_CF = Bytes.toBytes("info");final byte[] DETAIL_CF = Bytes.toBytes("detail");try (Connection connection = ConnectionFactory.createConnection(config)) {try (Admin admin = connection.getAdmin()) {// 检查表是否已存在if (admin.tableExists(tableName)) {System.out.println("Table " + tableName.getNameAsString() + " already exists");System.out.println("Skipping table creation...");} else {// 创建表描述符// info列族: min_versions=1, max_versions=2// detail列族: min_versions=2, max_versions=4System.out.println("\\n=== Creating table: " + tableName.getNameAsString() + " ===");TableDescriptorBuilder tdb = TableDescriptorBuilder.newBuilder(tableName);tdb.setColumnFamily(ColumnFamilyDescriptorBuilder.newBuilder(INFO_CF).setMinVersions(1).setMaxVersions(2).build());tdb.setColumnFamily(ColumnFamilyDescriptorBuilder.newBuilder(DETAIL_CF).setMinVersions(2).setMaxVersions(4).build());// 创建表admin.createTable(tdb.build());System.out.println("Table created successfully: " + tableName.getNameAsString());}}}System.out.println("\\n======================================================================");System.out.println("HBase Create Table Demo Completed");System.out.println("======================================================================");}}
参数说明:
参数名称 | 类型 | 必需 | 说明 | 示例值 |
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 的 MaxVersionsSystem.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 和 TimeToLiveSystem.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("======================================================================");}}