设为首页 加入收藏

TOP

Hbase表Scan方法获取rowkey
2018-12-06 01:54:23 】 浏览:574
Tags:Hbase Scan 方法 获取 rowkey
/**
	 *每次读取Hbase数据库Page_Size条
	 * @param entity
	 */
	public static void getContentFromHbase(HbaseExportEntity entity) {
		 StringBuffer buffer = new StringBuffer();
		 ResultScanner scanner = null;
		 
		 String startRow =  entity.getStartRow();
		 String endRow =    entity.getStopRow();
		 String tableName = entity.getTableName();
		 
		 //Filter filter = getHbaseExportFilter(entity.getCellList());							//过滤器
		 String cellNameStr = getCellNameStr(entity.getCellList(),entity.getFieldSplit());		//列名
		 String fileName = HbaseExportUtil.getFileName(entity);								//获取文件名
		 
		 //文件存储路径(配置)+ tableName + 文件名(程序自动生成)+文件扩展名(配置)
		 String  fileURL = entity.getSavePath()+ File.separator + entity.getTableName() 
		 	+ File.separator  + fileName;											//保存绝对文件路径
		
		 if(entity.getShowFieldTitle()) {											//首行显示字段
         	buffer.append(cellNameStr);
         }
		 
		 if(entity.getShowRowkey()) {
			 buffer.append(entity.getFieldSplit());
			 buffer.append(ROW_KEY);
		 }
		 
		 buffer.append(FILE_NEWLINE);
		 logger.info("读hbase数据库--"+ tableName+"--表数据写入--"+ fileName +"--处理开始");
		 int recordSize = 0;
	     int totalSize = 0;
	     String rowKey = null;
		 do {
	            scanner = HBaseScan.hbaseScan(tableName, ExportConstant.PAGE_SIZE, startRow, endRow, null);
	            recordSize = 0;
	            for (Result result : scanner) {
	            	for (KeyValue kv : result.raw()) {  
	            		int rowlength = Bytes.toShort(kv.getBuffer(), kv.getOffset()+KeyValue.ROW_OFFSET);  
	                    rowKey = Bytes.toStringBinary(kv.getBuffer(), kv.getOffset()+KeyValue.ROW_OFFSET + Bytes.SIZEOF_SHORT, rowlength);
	                    if(!StringUtils.isBlank(rowKey)) {
	                    	 break;
	                    }
	            	}
	                recordSize++;
	                startRow = HBaseUtil.bytesToStr(result.getRow()) + "0";	  
	                
	                String columnValueStr = getColumnValue(result,entity,rowKey);
	                buffer.append(columnValueStr);
	             	buffer.append(FILE_NEWLINE);
	            }
	            totalSize += recordSize;
	            
	            if(totalSize % ExportConstant.PAGE_SIZE==0) {						//每次写入PAGE_SIZE条
	            	HbaseExportUtil.WriteContentToFile(buffer.toString(), fileURL);
	            	buffer = new StringBuffer();
	            }
	      } while (recordSize != 0);
		  //写入内容到文件中
		  HbaseExportUtil.WriteContentToFile(buffer.toString(), fileURL);
		  logger.info("读hbase数据库--"+ tableName+"--表数据写入--"+ fileName +"--处理结束...共写入记录总数:"+totalSize+"条");
	}

获取rowkey方法

 for (Result result : scanner) {
	            	for (KeyValue kv : result.raw()) {  
	            		int rowlength = Bytes.toShort(kv.getBuffer(), kv.getOffset()+KeyValue.ROW_OFFSET);  
	                    rowKey = Bytes.toStringBinary(kv.getBuffer(), kv.getOffset()+KeyValue.ROW_OFFSET + Bytes.SIZEOF_SHORT, rowlength);
	                    if(!StringUtils.isBlank(rowKey)) {
	                    	 break;
	                    }
	            	}


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇Apache HBase 的适用场景 下一篇hbase 顺序序列rowkey设计

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目