1. 程式人生 > >Java Hbase資料幾種查詢方式

Java Hbase資料幾種查詢方式

/**Name		:	KcnaufHadoopManagement
 *Author	:	Zhang Bing 
 *Created	:	2013-7-31
 *Function	:	delete of hbase
 */
package com.exercise.hbase.command;

import java.util.LinkedList;
import java.util.List;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.KeyValue;
import org.apache.hadoop.hbase.client.Get;
import org.apache.hadoop.hbase.client.HTable;
import org.apache.hadoop.hbase.client.Result;
import org.apache.hadoop.hbase.client.ResultScanner;
import org.apache.hadoop.hbase.client.Scan;
import org.apache.hadoop.hbase.filter.PrefixFilter;

public class HBaseQuery {
	public Configuration config;
	private String tablename;

	public String getTablename() {
		return tablename;
	}

	public void setTablename(String tablename) {
		this.tablename = tablename;
	}

	public HBaseQuery(String tablename) {
		this.tablename = tablename;
		config = ConfigurationHandle.getInstance();
	}
	
	/**
	 * This method can get all rows data from hbase by the same rowkey 
	 * @param rowkey
	 * @return
	 * @throws Exception
	 */
	public List<Record> getDataByRowkey(String rowkey) throws Exception {
		List<Record> recordList = null;
		try {
			recordList = new LinkedList<Record>();
			HTable table = new HTable(config, tablename);
			Get get = new Get(rowkey.getBytes());
			Result rs = null;
			rs = table.get(get);
			
			KeyValue[] kv = rs.raw();
			for (int i = 0; i < kv.length; i++) {
				recordList.add(new Record(
						new String(kv[i].getRow(), "UTF-8"),
						new String(kv[i].getFamily(), "UTF-8"),
						new String(kv[i].getQualifier(), "UTF-8"),
						new String(kv[i].getValue(), "UTF-8"),
						kv[i].getTimestamp()));
			}
			/*
			 * for(KeyValue kv:rs.raw()){ record=new
			 * String(kv.getValue(),"UTF-8"); }
			 */
			return recordList;
		} catch (Exception e) {
			e.printStackTrace();
		}
		return null;
	}

	/**
	 * This method can get all rows data from hbase by the same rowkeyPrifix
	 * @param rowkeyPrifix
	 * @return
	 * @throws Exception
	 */
	public List<Record> getDataByRowkeyPrifix(String rowkeyPrifix) throws Exception {
		List<Record> recordList = new LinkedList<Record>();
		try {
			HTable table = new HTable(config, tablename);
			Scan scan = new Scan();
			scan.setFilter(new PrefixFilter(rowkeyPrifix.getBytes()));
			ResultScanner rs = table.getScanner(scan);
			
			for (Result r : rs) {
				KeyValue[] kv = r.raw();
				for (int i = 0; i < kv.length; i++) {
					recordList.add(new Record(
							new String(kv[i].getRow(), "UTF-8"),
							new String(kv[i].getFamily(), "UTF-8"),
							new String(kv[i].getQualifier(), "UTF-8"),
							new String(kv[i].getValue(), "UTF-8"),
							kv[i].getTimestamp()));
				}
			}
			rs.close();
			return recordList;
		} catch (Exception e) {
			e.printStackTrace();
			return null;
		}

	}

	/**
	 * This method can get all rows data from hbase by the same family and qualify
	 * @param family
	 * @param qualify
	 * @return
	 */
	public List<Record> getDataByFamily(String family, String qualify) {
		List<Record> recordList = new LinkedList<Record>();
		try {
			HTable table = new HTable(config, tablename);
			ResultScanner rs = table.getScanner(family.getBytes(),
					qualify.getBytes());
			for (Result r : rs) {
				KeyValue[] kv = r.raw();
				for (int i = 0; i < kv.length; i++) {
					recordList.add(new Record(
							new String(kv[i].getRow(), "UTF-8"),
							new String(kv[i].getFamily(), "UTF-8"),
							new String(kv[i].getQualifier(), "UTF-8"),
							new String(kv[i].getValue(), "UTF-8"),
							kv[i].getTimestamp()));
				}
			}
			rs.close();
			return recordList;
		} catch (Exception e) {
			e.printStackTrace();
			return null;
		}

	}

	/**
	 * This method can get data by the same timestamp
	 * @param timestamp
	 * @return
	 */
	public List<Record> getDataByTimestamp(long timestamp) {
		List<Record> recordList = new LinkedList<Record>();
		try {
			HTable table = new HTable(config, tablename);
			ResultScanner rs = table.getScanner(new Scan()
					.setTimeStamp(timestamp));
			for (Result r : rs) {
				KeyValue[] kv = r.raw();
				for (int i = 0; i < kv.length; i++) {
					recordList.add(new Record(
							new String(kv[i].getRow(), "UTF-8"),
							new String(kv[i].getFamily(), "UTF-8"),
							new String(kv[i].getQualifier(), "UTF-8"),
							new String(kv[i].getValue(), "UTF-8"),
							kv[i].getTimestamp()));
				}
			}
			rs.close();
			return recordList;
		} catch (Exception e) {
			e.printStackTrace();
			return null;
		}
	}
}

相關推薦

Java Hbase資料查詢方式

/**Name : KcnaufHadoopManagement *Author : Zhang Bing *Created : 2013-7-31 *Function : delete of hbase */ package com.exercise.hbas

Kibana+ElasticSearch實現索引資料查詢方式

 1.match_all搜尋,直接返回所有文件 GET /school/_search { "query": { "match_all": { } } }  返回結果大致如下: { "took": 13, "timed_o

java的list實現方式的效率(ArrayList、LinkedList、Vector、Stack),以及 java時間戳的三獲取方式比較

一、list簡介 List列表類,順序儲存任何物件(順序不變),可重複。 List是繼承於Collection的介面,不能例項化。例項化可以用: ArrayList(實現動態陣列),查詢快(隨

SQLAlchemy 查詢方式總結

記錄總數查詢: from sqlalchemy import func # count User records, without # using a subquery. session.query(func.count(User.id)) # return count of user "id" group

java中的加密方式

第一種 DES加解密 import java.security.Key; import java.security.SecureRandom; import javax.crypto.Cipher; import javax.crypto.KeyGenerator; import org

JDBC 資料庫的查詢方式(二)

1.資料庫中的查詢jdbc.queryForObject( )和jdbc.query( );我的理解就是一個返回的物件,一個返回集合(集合可能不貼切) String sql = "select username from user where username

關於Java WebService 的實現方式

1、jax-ws使用比較簡單,就幾個註解, 2、但是如果想用伺服器釋出webservice,最好還是結合一些開源的webservice框架,我建議用CXF。 3、xfire已經幾年不更新了,cxf包含了xfire。雖然jar包多,但是相容性問題都是可以解決的

Java Map的迴圈方式學習總結

1:根據JDK的新特性,用For迴圈Map,例如迴圈Map的Key Map<Object , Object> map = new HashMap<Object, Object>

Mybatis 的查詢方式

<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd

Hibernate主要有如下查詢方式

導航物件圖檢索方式 根據己經載入的物件,導航到其他物件。 OID檢索方式 按照物件的OID來檢索物件。 HQL檢索方式 使用面向物件的HQL查詢語言。 HQL(Hibernate QueryLanguage) 是面向物件的查詢語言,它和SQL查詢語言有些相

Hibernate的查詢方式

    HQL 通過Hibernate提供的查詢語言進行查詢。Hibernate Query lanague   EJBQL(JPQL 1.0) 是EJB提供的查詢語言   QBC(query by cretira)通過Cretira介面進行查詢   QBE(query by Example) 通過Examp

HBase匯入資料方式

1、傳統的主要使用Hbase的shell進行手動的輸入,都需要經過Hbase的介面,過程 2、使用MapReduce進行批量的匯入,但是還是會經過Hbase的HMaster,HregionerServer一些列的過程,增加系統的資源的消耗。例如: import jav

使用java配置定時任務的配置方式及示例

遞增 exc trigge strong trigger except 字符 ssi uart Spring定時器,主要有兩種實現方式,包括Java Timer定時和Quartz定時器! 1.Java Timer定時 首先繼承java.util.TimerTask類實現

JAVA獲取文件的常用方式

ada col epo term 打印 core book port nbsp 1、user.dir System.out.println(System.getProperty("user.dir")); 此方獲取的是運行的路 比如 1、 2、如果在eclipse上運

Java單例模式實現方式

開始 名稱 常量 就是 多線程開發 靜態代碼塊 浪費 ack 多線程同步 在平時的工作、學員的學習以及面試過程中,單例模式作為一種常用的設計模式,會經常被面試官問到,甚至筆試會要求學員現場默寫,下面將會就單例模式的實現思路和幾種常見的實現方式進行簡單的分享。

帶輸入查詢功能匹配下拉框的實現方式

sae idt hwnd 就會 bfd bmgr 使用方法 oaf adt 在Web開發中我們經常需要用戶進行輸入操作,輸入框內我們輸入幾個字,輸入框就會出現下拉提示你可能要輸入的完整信息。下面我總結了幾種常見的方案: 一:EasyUi combobox 組合框 具體使用方

Java 定時任務的實現方式

java作業調度 tails 監聽器 ever 觸發 posit exist ttr 輕量級 JAVA實現定時任務的幾種方式 @(JAVA)[spring|quartz|定時器]   近期項目開發中需要動態的添加定時任務,比如在某個活動結束時,自動生成獲獎名單,導出exce

【小家java】Session和Cookie的區別和聯絡、分散式session的實現方式

相關閱讀 【小家java】java5新特性(簡述十大新特性) 重要一躍 【小家java】java6新特性(簡述十大新特性) 雞肋升級 【小家java】java7新特性(簡述八大新特性) 不溫不火 【小家java】java8新特性(簡述十大新特性) 飽受讚譽 【小家java】java9

最近在研究多線程,淺談JAVA中多線程的實現方式

進行 數據 使用 導致 效率問題 多線程 方法 sta img 多線程的實現方式:   個人認為,要說多線程的實現方式,萬變不離其宗,最基本的就是兩種1.繼承Thread類;2.實現runnable接口,本質上來說就是用來啟動線程執行任務的過程,具體來說的話,通過這

web實現資料互動的常見方式

前言       在當今社會,作為一名前端程式猿,並不是一昧的去製作靜態頁面就可以滿足滴;你說你會製作網頁,好吧,只能說你算是一個前端程式猿。但這是你作為一個程式猿最基本的能力,並不會為你進行加分;   我們都明白,要想提高競爭力,提高自己的技能是十灰重要的。前後臺的資