HBase应用程序开发03查询
来源:互联网 发布:日本神户制钢造假知乎 编辑:程序博客网 时间:2024/06/05 07:47
一、获取一行的数据get 'table', 'rowkey', 'cf:qualiter'
获取数据是通操作table来获取, 根据制定的rowkey获取对应的行数据result
通过Table.get(Get)获取Result
rs = table.get(get);
代码实现:
/** * 通过rowkey查询数据 * @param tableName * @param row rowkey * @return */ public Result queryByRow(String tableName, byte[] row) { //返回结果 Result rs = null; //获取hbase库的连接 conn = getConn(); Table table = null; try { table = conn.getTable(TableName.valueOf(tableName)); Get get = new Get(row); rs = table.get(get); } catch (IOException e) { e.printStackTrace(); }finally { closeTable(table); closeConn(); } return rs; }测试: /** * 获取一个row的数据 */ public static void get() { HBaseDAO hBaseDAO = HBaseDAO.getInstance(); Result rs = hBaseDAO.queryByRow(tableName, rowkey1.getBytes()); Cell cell = rs.getColumnLatestCell(HBaseConfConstant.family, HBaseConfConstant.qualifier); System.out.println(new String(cell.getValue())); }
二、通过批量rowkey查询数据
通过Table.get(List<Get> gets)
这个方法获取批量的数据。
/** * 通过批量rowkey查询数据 * @param tableName * @param rows 批量rowkey * @return */ public Result[] queryByRows(String tableName, List<byte[]> rows) { Result[] rs = null; conn = getConn(); Table table = null; try { table = conn.getTable(TableName.valueOf(tableName)); List<Get> gets = new ArrayList<Get>(); for (int i = 0; i < rows.size(); i++) { Get get = new Get(rows.get(i)); gets.add(get); } rs = table.get(gets); } catch (IOException e) { e.printStackTrace(); }finally { closeTable(table); closeConn(); } return rs; }测试: /** * 批量获取 */ public static void getByRows() { HBaseDAO hBaseDAO = HBaseDAO.getInstance(); List<byte[]> list = new ArrayList<byte[]>(); list.add(rowkey1.getBytes()); list.add(rowkey2.getBytes()); Result[] rs = hBaseDAO.queryByRows(tableName, list); for (Result result : rs) { Cell cell = result.getColumnLatestCell(HBaseConfConstant.family, HBaseConfConstant.qualifier); System.out.println(new String(cell.getValue())); } }
三、通过Scan(byte[] startRow, byte[] stopRow)
首先要了解几个对象
3.1、Scan: 用于执行scan
操作的对象。
设置一个开始rowkey和一个endrowkey, hbase 中的数据是按照rowkey的字典ASCII排序的 ,这个必须重视, 我在测试的时候,
设置两个rowkey
static String rowkey1 = "5708A2.B1.B2-20100001_2101_221.130.189.6_735622241";static String rowkey2 = "5608A2.B1.B2-20100001_2101_221.181.72.246_736059657";
但是在设置Scan的时候rowkey1为startRow, rowkey2为endkey, 发现总是无法查询到数据,
最后发现按照自然排序, rowkey1在后, 调换之后就可以了。
Scan scan = new Scan();scan.setStartRow(startRow);scan.setStopRow(stopRow);
通过table操作scan对象获取一个ResultScanner,
该对象就是一个Result的集合
public interface ResultScanner extends Closeable, Iterable
ResultScanner rScanner = table.getScanner(scan)#通过遍历获取内容Iterator<Result> irs = rScanner.iterator();while (irs.hasNext()) { Result rs = irs.next(); byte[] value = rs.getValue(HBaseConfConstant.family, HBaseConfConstant.qualifier); System.out.println(new String(value));}
0 0
- HBase应用程序开发03查询
- HBase应用程序开发00
- 使用Eclipse开发HBase应用程序
- 使用Eclipse开发HBase应用程序
- 使用MyEclipse开发HBase应用程序
- HBase应用程序开发04---案例
- HBase应用程序开发01创建表
- HBase应用程序开发02插入数据
- Web应用程序开发查询网站
- HBase开发SQL查询中间件之查询原理
- Hbase查询
- HBase的应用程序
- HBase的条件查询
- HBase的条件查询
- HBase的条件查询
- hbase的内容查询
- hbase条件查询
- hbase的内容查询
- 组合数(Lucas定理) + 快速幂 --- HDU 5226 Tom and matrix
- 数论 --- 费马小定理 + 快速幂 HDU 4704 Sum
- 2015百度之星 大搬家
- 2015百度之星 列变位法解密
- 2015百度之星 IP聚合
- HBase应用程序开发03查询
- 2015百度之星 放盘子
- 2015百度之星 下棋
- 2015百度之星 单调区间
- 线段树 + 矩阵 --- ZOJ 3772 Calculate the Function
- 2015年百度之星初赛(1) --- A 超级赛亚ACMer
- 2015年百度之星初赛(1) --- B 找连续数
- Uva 11059 Maximum Product(简单枚举)
- 2015年百度之星初赛(1) --- C 序列变换