有没有办法使用 Java API 截断并重新启用 htable,类似于在 shell 中使用以下命令?
truncate 'tablename'
enable 'tablename'
有没有比遍历每一行并使用 deleteAll 更好的方法?
现在可以使用管理员
Admin admin = Connection.getAdmin();
admin.truncateTable(TableName.valueOf("name_of_the_table",true);
API 中没有这样的截断。但是,HBaseAdmin 类具有您需要的所有方法。看看 :
1. 公共无效禁用表(字符串表名)抛出 IOException
2. 公共无效删除表(字符串表名)抛出 IOException
3. 公共无效启用表(字符串表名)抛出 IOException
呵呵
如果你同意在 HappyBase 中使用 Thrift 和 Python:
import happybase
c = happybase.Connection()
c.disable_table('tablename')
c.delete_table('tablename')
c.create_table(
'tablename', {'cf1': dict() }
)
这将创建一个新的空表。
我正在使用不包含该 API 的 0.98 版,因此这里有一个示例代码:
public static void main(String[] args) throws Exception{
String table = "yourTableName";
Configuration conf = HBaseConfiguration.create();
conf.set("hbase.zookeeper.quorum", "hbaseZK host");
HBaseAdmin hBaseAdmin = new HBaseAdmin(conf);
HTableDescriptor desciptor = hBaseAdmin.getTableDescriptor(table.getBytes());
hBaseAdmin.disableTable(table);
hBaseAdmin.deleteTable(table);
hBaseAdmin.createTable(desciptor);
}