博客
关于我
Hadoop HIVE JavaAPI
阅读量:797 次
发布时间:2023-04-03

本文共 2971 字,大约阅读时间需要 9 分钟。

HBase 表格操作(DDL 和 DML)

HBase 是一款流行的分布式、面向列的数据库,在实际项目中常被用于存储非结构化数据。本文将介绍 HBase 的 DDL(数据定义语言)和 DML(数据操作语言)操作,包括表的增删改查等常用操作。


一、表格的定义操作(DDL)

在 HBase 中,定义表格(DDL)主要通过 Admin 类完成。以下是常用的操作方法:

  • 建立连接

    首先需要构建一个连接对象,连接 HBase 的 zk 集群地址。例如:

    Configuration conf = HBaseConfiguration.create();conf.set("hbase.zookeeper.quorum", "ip1:2181,ip2:2181,ip3:2181");Connection conn = ConnectionFactory.createConnection(conf);
  • 获取 DDL 操作器

    通过连接获取 Admin 实例:

    Admin admin = conn.getAdmin();
  • 创建表格

    使用 HTableDescriptor 描述表结构并创建表格:

    HTableDescriptor tableDescriptor = new HTableDescriptor(TableName.valueOf("table_info"));HColumnDescriptor columnDescriptor = new HColumnDescriptor("column_info");columnDescriptor.setMaxVersions(3); // 设置列族最大版本数tableDescriptor.addFamily(columnDescriptor);admin.createTable(tableDescriptor);
  • 禁用表格

    需要注意的是,禁用表格和删除表格是分开操作:

    admin.disableTable(TableName.valueOf("user_info")); // 停用表admin.deleteTable(TableName.valueOf("user_info")); // 删除表
  • 修改表结构

    通过 modifyTable 方法动态调整表结构:

    HTableDescriptor tableDescriptor = admin.getTableDescriptor(TableName.valueOf("table_info"));HColumnDescriptor newColumnDescriptor = new HColumnDescriptor("another_info");newColumnDescriptor.setBloomFilterType(BloomType.ROWCOL); // 设置布隆过滤器类型tableDescriptor.addFamily(newColumnDescriptor);admin.modifyTable(tableDescriptor);

  • 二、数据操作(DML)

    数据操作(DML)主要包括插入、删除、更新和查询数据。以下是常用的操作方法:

  • 插入数据

    使用 Put 类插入数据:

    Table table = conn.getTable(TableName.valueOf("table_info"));Put put = new Put("001".getBytes());put.addColumn("base_info".getBytes(), "username".getBytes(), "xiaowang".getBytes());Put put2 = new Put("002".getBytes());put2.addColumn("base_info".getBytes(), "username".getBytes(), "xiaowei".getBytes());table.put(put, put2);
  • 删除数据

    使用 Delete 类删除数据:

    Delete delete = new Delete("001".getBytes());Delete delete2 = new Delete("002".getBytes());delete2.addColumn("table_info".getBytes(), "username".getBytes());table.delete(delete, delete2);
  • 查询数据

    使用 Get 类获取单行数据:

    Get get = new Get("002".getBytes());Result result = table.get(get);byte[] value = result.getValue("base_info".getBytes(), "age".getBytes());System.out.println(new String(value));
  • 扫描数据

    使用 Scan 类批量读取数据:

    Scan scan = new Scan("10".getBytes(), "10000\001".getBytes());ResultScanner scanner = table.getScanner(scan);Iterator
    iterator = scanner.iterator();while(iterator.hasNext()){ Result result = iterator.next(); CellScanner cellScanner = result.cellScanner(); while(cellScanner.advance()){ Cell cell = cellScanner.current(); // 输出当前 KV 对应的信息 System.out.println("行键: " + new String(cell.getRowArray())); System.out.println("列族名: " + new String(cell.getFamilyArray())); System.out.println("列名: " + new String(cell.getQualifierArray())); System.out.println("值: " + new String(cell.getValueArray())); }}

  • 三、注意事项

    • 表结构设计

      在创建表格前,需要明确表的名称和各列的名称、类型等信息,并根据实际需求选择合适的存储方式。

    • 数据类型选择

      HBase 的列可以存储多种数据类型,如字符串、数字、布尔值等,具体选择根据数据需求来定。

    • 性能优化

      在高并发场景下,可以通过设置合适的 BloomFilter、压缩类型等来提升查询性能。


    通过以上操作,可以对 HBase 表格进行增删改查操作,灵活地管理数据。

    转载地址:http://grefk.baihongyu.com/

    你可能感兴趣的文章
    P-DQN:离散-连续混合动作空间的独特算法
    查看>>
    P1035 I need help
    查看>>
    P1073 最优贸易
    查看>>
    P1207 双重回文数
    查看>>
    p1229
    查看>>
    P1273 有线电视网(树形dp)
    查看>>
    spring编程常见错误二 (学习笔记)
    查看>>
    P1364 医院设置
    查看>>
    P1614 爱与愁的心痛
    查看>>
    spring缓存注解@Cacheable、@CacheEvict、@CachePut使用
    查看>>
    P1865 A % B Problem
    查看>>
    P1908 逆序对
    查看>>
    P2158 [SDOI2008]仪仗队
    查看>>