查询 HBase 获取删除和扫描

在 HBase 中,你可以使用 4 种类型的操作

  • 获取 :检索一行
  • Put :插入一行或多行
  • 删除 :删除一行
  • 扫描 :检索多行

如果你只是想检索一行,给定它的 row_key 你可以使用 Get 对象:

Get get = new Get(Bytes.toBytes("my_row_key"));
Table table = this.connection.getTable(TableName.valueOf("myTable"));
Result r = table.get(get);
byte[] value = r.getValue(Bytes.toBytes(columnFamily), Bytes.toBytes("myColumn"));
String valueStr = Bytes.toString(value);
System.out.println("Get result :" + valueStr);

这里我们只从我们想要的列中获取值,如果要检索所有列,请使用 Get 对象的 rawCell 属性:

Get get = new Get(Bytes.toBytes(rowKey));
Table table = this.connection.getTable(TableName.valueOf(tableName));
Result r = table.get(get);
System.out.println("GET result :");
    for (Cell c : r.rawCells()) {
        System.out.println("Family : " + new String(CellUtil.cloneFamily(c)));
        System.out.println("Column Qualifier : " + new String(CellUtil.cloneQualifier(c)));
        System.out.println("Value : " + new String(CellUtil.cloneValue(c)));
        System.out.println("----------");
    }

好吧,我们现在可以逐行从表中检索数据,但是我们如何设置一些呢?你使用 Put 对象:

Put put = new Put("my_row_key");
put.addColumn(Bytes.toBytes("myFamily"), Bytes.toBytes("myColumn"), Bytes.toBytes("awesomeValue");
//Add as many columns as you want

Table table = connection.getTable(TableName.valueOf("myTable");
table.put(put);

注意:Table.put 也可以在参数中输入一个 put 列表,也就是说,当你想要添加很多行时,比 put 更有效。

好吧,现在,我可以放一些行并从我的 HBase 中检索一些,但是如果我想得到几行并且如果我不知道我的 row_keys 怎么办?

队长在这里! 你可以使用 Scan 对象:

扫描基本上查看所有行并检索它们,你可以添加几个参数,例如过滤器和开始/结束行,但我们将在另一个示例中看到。

如果要扫描表中的所有列值,请在给定列的情况下使用以下行:

Table table = this.connection.getTable(TableName.valueOf("myTable"));
Scan scan = new Scan();
scan.addColumn(Bytes.toBytes("myFamily"), Bytes.toBytes("myColumn"));
ResultScanner rs = table.getScanner(scan);
    try {
        for (Result r = rs.next(); r != null; r = rs.next()) {
            byte[] value = r.getValue(Bytes.toBytes("myFamily"), Bytes.toBytes("myCOlumn"));
            String valueStr = Bytes.toString(value);
            System.out.println("row key "+new String(r.getRow()));
            System.out.println("Scan result :" + valueStr);
        }
    } finally {
        rs.close(); // always close the ResultScanner!
   }

我真的很想坚持你必须总是关闭 ResultScanner (顺便说一下,从数据库中的任何 ResultSet 都是这样的)

就快完成了 ! 现在让我们学习如何删除一行。你有一个 Delete 对象:

Table table = this.connection.getTable(TableName.valueOf("myTable"));
Delete d = new Delete(Bytes.toBytes("my_weird_key"));
table.delete(d);
System.out.prinln("Row " + row_key + " from table " + tableName + " deleted");

最后一件事:在执行任何操作之前,始终检查表是否存在,否则你将获得异常。

这就是现在,你可以使用此示例管理 HBase 中的数据。