Hbase之修改表结构

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.HColumnDescriptor;
import org.apache.hadoop.hbase.HTableDescriptor;
import org.apache.hadoop.hbase.TableName;
import org.apache.hadoop.hbase.client.Admin;
import org.apache.hadoop.hbase.client.Connection;
import org.apache.hadoop.hbase.client.ConnectionFactory;
import org.apache.hadoop.hbase.util.Bytes;
import org.apache.hadoop.hbase.util.Pair;

import java.io.IOException;

/**
 * 修改表结构
 */
public class ModifyStructOfTable {
    public static void main(String args[]) throws IOException{
        Configuration conf = HBaseConfiguration.create();
        Connection connection = ConnectionFactory.createConnection(conf);
        Admin admin = connection.getAdmin();
        //
        TableName tableName=TableName.valueOf("testtable2b");

        //列族
        HColumnDescriptor coldef1 = new HColumnDescriptor("colfam1");
        //表
        HTableDescriptor desc  = new HTableDescriptor(tableName).addFamily(coldef1).setValue("Description", "ModifyTableExample: Original Table");

        //Create the table with the original structure and 50 regions.
        admin.createTable(desc, Bytes.toBytes(1L),Bytes.toBytes(10000L),50);
        //表描述
        HTableDescriptor htd1 = admin.getTableDescriptor(tableName);
        //列族2
        HColumnDescriptor coldef2 = new HColumnDescriptor("colfam2");
        //
        htd1.addFamily(coldef2).setMaxFileSize(1024*1024*1024L).setValue("Description","ModifyTableExample: Modified Table");
        admin.disableTable(tableName);
        //更改表
        admin.modifyTable(tableName,htd1);

        Pair<Integer, Integer> status = new Pair<Integer, Integer>() {{
            setFirst(50);
            setSecond(50);
        }};

        for (int i = 0; status.getFirst() != 0 && i < 500; i++) {
            status = admin.getAlterStatus(desc.getTableName());
            if (status.getSecond() != 0) {
                int pending = status.getSecond() - status.getFirst();
                System.out.println(pending + " of " + status.getSecond() + " regions updated.");
                try {
                    Thread.sleep(1 * 1000l);
                }catch (Exception e){
                    System.out.println(e.getMessage());
                }
            } else {
                System.out.println("All regions updated.");
                break; }
        }
        if (status.getFirst() != 0) {
            throw new IOException("Failed to update regions after 500 sec‐ onds.");
        }
        admin.enableTable(tableName);
        HTableDescriptor htd2 = admin.getTableDescriptor(tableName);
        System.out.println("Equals: " + htd1.equals(htd2));
        System.out.println("New schema: " + htd2);

    }
}
/**
 50 of 50 regions updated.
 2016-08-30 17:08:08,541 INFO  [main] client.HBaseAdmin: Started enable of testtable2b
 2016-08-30 17:08:10,869 INFO  [main] client.HBaseAdmin: Enabled testtable2b
 Equals: true
 New schema: ‘testtable2b‘, {TABLE_ATT

 shell:
 =========
 hbase(main):048:0> desc ‘testtable2b‘
 Table testtable2b is ENABLED
 testtable2b, {TABLE_ATTRIBUTES => {MAX_FILESIZE => ‘1073741824‘, METADATA => {‘Description‘ => ‘ModifyTableExample: Modified Table‘}}
 COLUMN FAMILIES DESCRIPTION
 {NAME => ‘colfam1‘, DATA_BLOCK_ENCODING => ‘NONE‘, BLOOMFILTER => ‘ROW‘, REPLICATION_SCOPE => ‘0‘, VERSIONS => ‘1‘, COMPRESSION => ‘NONE‘, MIN_VERSIONS => ‘0‘, TTL => ‘FOREVER‘, KEEP_D
 ELETED_CELLS => ‘FALSE‘, BLOCKSIZE => ‘65536‘, IN_MEMORY => ‘false‘, BLOCKCACHE => ‘true‘}
 {NAME => ‘colfam2‘, DATA_BLOCK_ENCODING => ‘NONE‘, BLOOMFILTER => ‘ROW‘, REPLICATION_SCOPE => ‘0‘, COMPRESSION => ‘NONE‘, VERSIONS => ‘1‘, TTL => ‘FOREVER‘, MIN_VERSIONS => ‘0‘, KEEP_D
 ELETED_CELLS => ‘FALSE‘, BLOCKSIZE => ‘65536‘, IN_MEMORY => ‘false‘, BLOCKCACHE => ‘true‘}
 2 row(s) in 0.0340 seconds

 **/
时间: 2024-09-29 00:52:11

Hbase之修改表结构的相关文章

mariadb 实用功能3 &nbsp; 修改表结构显示进度

在工作中需要修改一个表结构不知道进度,苦苦的等待也是很煎熬的事情. mariadb 贴心的小功能,让人眼前一亮,产生了临时表,还有进度可以看, good,good. 直接操作,看结果 MariaDB [test]> select version(); +-----------------+ | version()       | +-----------------+ | 10.1.20-MariaDB | +-----------------+ 1 row in set (0.00 sec)

MySQL在线修改表结构pt-osc

MySQL在线修改表结构pt-osc 重所周知 MySQL的DDL操作操作是相比比较昂贵的.因为MySQL在修改表期间会阻塞任何读写操作. 基本上业务处于瘫痪.如果数据量较大可能需要好几个小时才能完成,无法容忍这个操作.Percona开发了一系列的工具 Percona Toolkit包,其中有一个工具pt-online-schema-change可以在线执行DDL操作,不会阻塞读写操作从而影响业务程序.当然也有其他的工具 例如 MySQL5.6的online ddl 还有gh-ost 本文主要讲

mysql笔记--数据库基本增删改查 修改表结构

数据库基本增删改查 1. 增-添加/插入数据,insert into 插入哪张表,那些列,什么值, 语句:insert into 表名(列1,列2,列3)values (值1,值2,值3): 可以不按原列的顺序插入,也可以插入部分列,但是值与列要一一对应,不能混乱!!! 一次插入多行数据 : Insert into 表名(列1,列2)values (值1,值2),(值1,值2): 2. 改-更新数据update 更新哪张表,哪些列,哪些值 语句:update 表名 set 列1=值1,列2=值2

用 pt-online-schema-change在线修改表结构的时候报超时

用工具pt-online-scheme-change执行添加字段是报错,提示超时,在凌晨反复执行几次后都是在创建触发器的时候超时退出了,表并不是很大大概1000w数据 执行语句:pt-online-schema-change --user=root --password='xxxxxx' --host=127.0.0.1 --port=3306 --charset=utf8 --alter="add flow_n int(11)  default 1  COMMENT '数据流个数' "

SQL_修改表结构

***********************************************声明***********************************************************************  原创作品,出自 "深蓝的blog" 博客,欢迎转载,转载时请务必注明出处,否则追究版权法律责任. 深蓝的blog:http://blog.csdn.net/huangyanlong/article/details/39758393 *******

数据库复制:修改表结构、新增表、新增存储过程 会被复制到订阅服务器

[SQL Server高可用性]数据库复制:修改表结构.新增表.新增存储过程 会被复制到订阅服务器? 在SQL Server上配置好数据库复制后: 1.如果给表加了字段,会不会复制到订阅服务器呢?如果是删除1个字段呢? 2.如果新创建了1个表,会不会被同步过去呢? 3.如果新建了一个存储过程,会不会同步过去呢? 本文将会通过实验,回答上述问题. 1.首先,需要配置数据库复制. 这里为了简单起见,用了机器上的2个SQL Server 2008R2的实例. 两个实例分别是:MSSQLSERVER.S

通过替换frm文件方式修改表结构

版本:5.6.16 在自己的虚拟环境中,测试创建一个表,表结构如下:mysql> drop table yoon_temp;Query OK, 0 rows affected (0.09 sec) mysql> show create table yoon\G*************************** 1. row ***************************       Table: yoonCreate Table: CREATE TABLE `yoon` (  `i

赵雅智_sqlite修改表结构

1.更改数据库版本号(每次更新都一定要进行版本的升级) 2.更新语句一条一条写,不能并列写 例如: public void onUpgrade(SQLiteDatabase db, int arg1, int arg2) { db.execSQL("alter table users add userage integer;<span style="font-family: Arial, Helvetica, sans-serif;">alter table us

数据库基本增删改查与修改表结构

数据库基本增删改查 1. 增-添加/插入数据 insert into 插入哪张表,那些列,什么值, 语句:insert into 表名(列1,列2,列3)values (值1,值2,值3): 可以不按原列的顺序插入,也可以插入部分列,但是值与列要一一对应,不能混乱!!! 一次插入多行数据 : Insert into 表名(列1,列2)values (值1,值2),(值1,值2): 2. 改-更新数据 update 更新哪张表,哪些列,哪些值 语句:update 表名 set 列1=值1,列2=值