默认版本Get示例
public static final byte[] CF = "cf".getBytes(); public static final byte[] ATTR = "attr".getBytes(); ... Get get = new Get(Bytes.toBytes("row1")); Result r = table.get(get); byte[] b = r.getValue(CF, ATTR); // returns current version of value给定版本的Get示例
public static final byte[] CF = "cf".getBytes(); public static final byte[] ATTR = "attr".getBytes(); ... Get get = new Get(Bytes.toBytes("row1")); get.setMaxVersions(3); // will return last 3 versions of row Result r = table.get(get); byte[] b = r.getValue(CF, ATTR); // returns current version of value List<KeyValue> kv = r.getColumn(CF, ATTR); // returns all versions of this column PUT执行 put 总是在某个时间戳创建cell的新版本。默认情况下,系统使用服务器的currentTimeMillis,但您可以在针对每一列指定版本(=长整数)。这意味着您可以在过去或将来指定时间,或者将long值用于非时间目的。
隐式版本示例
HBase 将使用当前时间隐式地对以下 Put 进行版本控制。
public static final byte[] CF = "cf".getBytes(); public static final byte[] ATTR = "attr".getBytes(); ... Put put = new Put(Bytes.toBytes(row)); put.add(CF, ATTR, Bytes.toBytes( data)); table.put(put);显式版本示例
public static final byte[] CF = "cf".getBytes(); public static final byte[] ATTR = "attr".getBytes(); ... Put put = new Put( Bytes.toBytes(row)); long explicitTimeInMs = 555; // just an example put.add(CF, ATTR, explicitTimeInMs, Bytes.toBytes(data)); table.put(put); DELETE删除通过 Table.delete]执行。
有三种不同类型的内部删除标记。
删除:对于特定版本的列。
删除列:适用于列的所有版本。
删除系列:适用于特定 ColumnFamily 的所有列
SCAN扫描表
下面是对表进行扫描的示例。假设一个表填充了具有键“row1”,“row2”,“row3”的行,然后另一组是具有键“abc1”,“abc2”和“abc3”的行。以下示例将展示如何设置 Scan 实例以返回以“row”开头的行。
public static final byte[] CF = "cf".getBytes(); public static final byte[] ATTR = "attr".getBytes(); ... Table table = ... // instantiate a Table instance Scan scan = new Scan(); scan.addColumn(CF, ATTR); scan.setRowPrefixFilter(Bytes.toBytes("row")); ResultScanner rs = table.getScanner(scan); try { for (Result r = rs.next(); r != null; r = rs.next()) { // process result... } } finally { rs.close(); // always close the ResultScanner! }更多实时计算,Hbase,Flink,Kafka等相关技术博文,欢迎关注实时流式计算