package com.shujia;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.TableName;
import org.apache.hadoop.hbase.client.*;
import org.apache.hadoop.hbase.filter.*;
import org.apache.hadoop.hbase.util.Bytes;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import java.io.IOException;
public class Demo04Filter {
Connection conn;
Admin admin;
TableName stuName;
Table stu;
@Before
public void init() throws IOException {
//创建HBase的配置
Configuration conf = HBaseConfiguration.create();
//配置HBase所属ZK集群的地址
conf.set("hbase.zookeeper.quorum","master:2181,node1:2181,node2:2181");
//建立连接
conn = ConnectionFactory.createConnection(conf);
//获取所有表的名字,这个操作跟表的数据无关
admin= conn.getAdmin();
stuName=TableName.valueOf("stu");
stu=conn.getTable(stuName);
}
@Test
// 通过RowFilter过滤比rowKey 1500100010 小的所有值出来
public void RowFilterWithBinaryComparator() throws IOException {
//因为涉及到不等式的比较 所以只能使用二进制比较器
BinaryComparator binaryComparator = new BinaryComparator("1500100010".getBytes());
//小于,所以用CompareOp.LESS
RowFilter rowFilter = new RowFilter(CompareFilter.CompareOp.LESS, binaryComparator);
Scan scan = new Scan();
scan.setFilter(rowFilter);
ResultScanner rss = stu.getScanner(scan);
//获取数据
for (Result rs : rss) {
String id = Bytes.toString(rs.getRow());
String name = Bytes.toString(rs.getValue("info".getBytes(),"name".getBytes()));
String age = Bytes.toString(rs.getValue("info".getBytes(),"age".getBytes()));
String gender = Bytes.toString(rs.getValue("info".getBytes(),"gender".getBytes()));
String clazz = Bytes.toString(rs.getValue("info".getBytes(),"clazz".getBytes()));
System.out.println(id+","+name+","+age+","+gender+","+clazz);
}
}
@Test
// 通过FamilyFilter与SubstringComparator查询列簇名包含nf的列簇下面所有的数据
public void FamilyFilterWithSubstringComparator() throws IOException {
SubstringComparator substringComparator = new SubstringComparator("nf");
FamilyFilter familyFilter = new FamilyFilter(CompareFilter.CompareOp.EQUAL, substringComparator);
Scan scan = new Scan();
scan.setFilter(familyFilter);
ResultScanner rss = stu.getScanner(scan);
for (Result rs : rss) {
String rk = Bytes.toString(rs.getRow());
for (Cell cell : rs.listCells()) {
String cf = Bytes.toString(CellUtil.cloneFamily(cell));
String qua=Bytes.toString(CellUtil.cloneQualifier(cell));
String value=Bytes.toString(CellUtil.cloneValue(cell));
System.out.println(rk+","+cf+","+qua+","+value);
}
}
}
@After
public void close() throws IOException {
//关闭连接
admin.close();
conn.close();
}
}
package com.shujia;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.Cell;
import org.apache.hadoop.hbase.CellUtil;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.TableName;
import org.apache.hadoop.hbase.client.*;
import org.apache.hadoop.hbase.filter.*;
import org.apache.hadoop.hbase.util.Bytes;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import java.io.IOException;
public class Demo04Filter {
Connection conn;
Admin admin;
TableName stuName;
Table stu;
//传入一个过滤器 返回ResultScanner对象
public ResultScanner getScanner(Filter filter) throws IOException {
Scan scan = new Scan();
scan.setFilter(filter);
return stu.getScanner(scan);
}
//对ResultScanner对象进行打印
//第一种情况:数据格式一致
public void printScanner(ResultScanner rss) {
//获取数据
for (Result rs : rss) {
String id = Bytes.toString(rs.getRow());
String name = Bytes.toString(rs.getValue("info".getBytes(),"name".getBytes()));
String age = Bytes.toString(rs.getValue("info".getBytes(),"age".getBytes()));
String gender = Bytes.toString(rs.getValue("info".getBytes(),"gender".getBytes()));
String clazz = Bytes.toString(rs.getValue("info".getBytes(),"clazz".getBytes()));
System.out.println(id+","+name+","+age+","+gender+","+clazz);
}
}
//第二种情况:数据格式不一致
public void printScannerWithCellUnit(ResultScanner rss){
for (Result rs : rss) {
String rk = Bytes.toString(rs.getRow());
for (Cell cell : rs.listCells()) {
String cf = Bytes.toString(CellUtil.cloneFamily(cell));
String qua=Bytes.toString(CellUtil.cloneQualifier(cell));
String value=Bytes.toString(CellUtil.cloneValue(cell));
System.out.println(rk+","+cf+","+qua+","+value);
}
}
}
@Before
public void init() throws IOException {
//创建HBase的配置
Configuration conf = HBaseConfiguration.create();
//配置HBase所属ZK集群的地址
conf.set("hbase.zookeeper.quorum","master:2181,node1:2181,node2:2181");
//建立连接
conn = ConnectionFactory.createConnection(conf);
//获取所有表的名字,这个操作跟表的数据无关
admin= conn.getAdmin();
stuName=TableName.valueOf("stu");
stu=conn.getTable(stuName);
}
@Test
// 通过RowFilter过滤比rowKey 1500100010 小的所有值出来
public void RowFilterWithBinaryComparator() throws IOException {
//因为涉及到不等式的比较 所以只能使用二进制比较器
BinaryComparator binaryComparator = new BinaryComparator("1500100010".getBytes());
//小于,所以用CompareOp.LESS
RowFilter rowFilter = new RowFilter(CompareFilter.CompareOp.LESS, binaryComparator);
printScanner(getScanner(rowFilter));
}
@Test
// 通过FamilyFilter与SubstringComparator查询列簇名包含nf的列簇下面所有的数据
public void FamilyFilterWithSubstringComparator() throws IOException {
SubstringComparator substringComparator = new SubstringComparator("nf");
FamilyFilter familyFilter = new FamilyFilter(CompareFilter.CompareOp.EQUAL, substringComparator);
printScannerWithCellUnit(getScanner(familyFilter));
}
@After
public void close() throws IOException {
//关闭连接
admin.close();
conn.close();
}
}
package com.shujia;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.Cell;
import org.apache.hadoop.hbase.CellUtil;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.TableName;
import org.apache.hadoop.hbase.client.*;
import org.apache.hadoop.hbase.filter.*;
import org.apache.hadoop.hbase.util.Bytes;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import java.io.IOException;
public class Demo04Filter {
Connection conn;
Admin admin;
TableName stuName;
Table stu;
//传入一个过滤器 返回ResultScanner对象
public ResultScanner getScanner(Filter filter) throws IOException {
Scan scan = new Scan();
scan.setFilter(filter);
return stu.getScanner(scan);
}
//对ResultScanner对象进行打印
//第一种情况:数据格式一致
public void printScanner(ResultScanner rss) {
//获取数据
for (Result rs : rss) {
String id = Bytes.toString(rs.getRow());
String name = Bytes.toString(rs.getValue("info".getBytes(),"name".getBytes()));
String age = Bytes.toString(rs.getValue("info".getBytes(),"age".getBytes()));
String gender = Bytes.toString(rs.getValue("info".getBytes(),"gender".getBytes()));
String clazz = Bytes.toString(rs.getValue("info".getBytes(),"clazz".getBytes()));
System.out.println(id+","+name+","+age+","+gender+","+clazz);
}
}
//第二种情况:数据格式不一致
public void printScannerWithCellUnit(ResultScanner rss){
for (Result rs : rss) {
String rk = Bytes.toString(rs.getRow());
for (Cell cell : rs.listCells()) {
String cf = Bytes.toString(CellUtil.cloneFamily(cell));
String qua=Bytes.toString(CellUtil.cloneQualifier(cell));
String value=Bytes.toString(CellUtil.cloneValue(cell));
System.out.println(rk+","+cf+","+qua+","+value);
}
}
}
@Before
public void init() throws IOException {
//创建HBase的配置
Configuration conf = HBaseConfiguration.create();
//配置HBase所属ZK集群的地址
conf.set("hbase.zookeeper.quorum","master:2181,node1:2181,node2:2181");
//建立连接
conn = ConnectionFactory.createConnection(conf);
//获取所有表的名字,这个操作跟表的数据无关
admin= conn.getAdmin();
stuName=TableName.valueOf("stu");
stu=conn.getTable(stuName);
}
@Test
// 通过RowFilter过滤比rowKey 1500100010 小的所有值出来
public void RowFilterWithBinaryComparator() throws IOException {
//因为涉及到不等式的比较 所以只能使用二进制比较器
BinaryComparator binaryComparator = new BinaryComparator("1500100010".getBytes());
//小于,所以用CompareOp.LESS
RowFilter rowFilter = new RowFilter(CompareFilter.CompareOp.LESS, binaryComparator);
printScanner(getScanner(rowFilter));
}
@Test
// 通过FamilyFilter与SubstringComparator查询列簇名包含nf的列簇下面所有的数据
public void FamilyFilterWithSubstringComparator() throws IOException {
SubstringComparator substringComparator = new SubstringComparator("f");
FamilyFilter familyFilter = new FamilyFilter(CompareFilter.CompareOp.EQUAL, substringComparator);
printScannerWithCellUnit(getScanner(familyFilter));
}
@Test
// 通过QualifierFilter与SubstringComparator查询列名包含n/l/d的列下面所有的数据
public void QualifierFilterWithSubstringComparator() throws IOException {
RegexStringComparator regexStringComparator = new RegexStringComparator(".*[mld].*");
QualifierFilter qualifierFilter = new QualifierFilter(CompareFilter.CompareOp.EQUAL, regexStringComparator);
printScannerWithCellUnit(getScanner(qualifierFilter));
}
@After
public void close() throws IOException {
//关闭连接
admin.close();
conn.close();
}
}
package com.shujia;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.Cell;
import org.apache.hadoop.hbase.CellUtil;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.TableName;
import org.apache.hadoop.hbase.client.*;
import org.apache.hadoop.hbase.filter.*;
import org.apache.hadoop.hbase.util.Bytes;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import java.io.IOException;
public class Demo04Filter {
Connection conn;
Admin admin;
TableName stuName;
Table stu;
//传入一个过滤器 返回ResultScanner对象
public ResultScanner getScanner(Filter filter) throws IOException {
Scan scan = new Scan();
scan.setFilter(filter);
return stu.getScanner(scan);
}
//对ResultScanner对象进行打印
//第一种情况:数据格式一致
public void printScanner(ResultScanner rss) {
//获取数据
for (Result rs : rss) {
String id = Bytes.toString(rs.getRow());
String name = Bytes.toString(rs.getValue("info".getBytes(),"name".getBytes()));
String age = Bytes.toString(rs.getValue("info".getBytes(),"age".getBytes()));
String gender = Bytes.toString(rs.getValue("info".getBytes(),"gender".getBytes()));
String clazz = Bytes.toString(rs.getValue("info".getBytes(),"clazz".getBytes()));
System.out.println(id+","+name+","+age+","+gender+","+clazz);
}
}
//第二种情况:数据格式不一致
public void printScannerWithCellUnit(ResultScanner rss){
for (Result rs : rss) {
String rk = Bytes.toString(rs.getRow());
for (Cell cell : rs.listCells()) {
String cf = Bytes.toString(CellUtil.cloneFamily(cell));
String qua=Bytes.toString(CellUtil.cloneQualifier(cell));
String value=Bytes.toString(CellUtil.cloneValue(cell));
System.out.println(rk+","+cf+","+qua+","+value);
}
}
}
@Before
public void init() throws IOException {
//创建HBase的配置
Configuration conf = HBaseConfiguration.create();
//配置HBase所属ZK集群的地址
conf.set("hbase.zookeeper.quorum","master:2181,node1:2181,node2:2181");
//建立连接
conn = ConnectionFactory.createConnection(conf);
//获取所有表的名字,这个操作跟表的数据无关
admin= conn.getAdmin();
stuName=TableName.valueOf("stu");
stu=conn.getTable(stuName);
}
@Test
// 通过RowFilter过滤比rowKey 1500100010 小的所有值出来
public void RowFilterWithBinaryComparator() throws IOException {
//因为涉及到不等式的比较 所以只能使用二进制比较器
BinaryComparator binaryComparator = new BinaryComparator("1500100010".getBytes());
//小于,所以用CompareOp.LESS
RowFilter rowFilter = new RowFilter(CompareFilter.CompareOp.LESS, binaryComparator);
printScanner(getScanner(rowFilter));
}
@Test
// 通过FamilyFilter与SubstringComparator查询列簇名包含nf的列簇下面所有的数据
public void FamilyFilterWithSubstringComparator() throws IOException {
SubstringComparator substringComparator = new SubstringComparator("f");
FamilyFilter familyFilter = new FamilyFilter(CompareFilter.CompareOp.EQUAL, substringComparator);
printScannerWithCellUnit(getScanner(familyFilter));
}
@Test
// 通过QualifierFilter与SubstringComparator查询列名包含n/l/d的列下面所有的数据
public void QualifierFilterWithSubstringComparator() throws IOException {
RegexStringComparator regexStringComparator = new RegexStringComparator(".*[mld].*");
QualifierFilter qualifierFilter = new QualifierFilter(CompareFilter.CompareOp.EQUAL, regexStringComparator);
printScannerWithCellUnit(getScanner(qualifierFilter));
}
@Test
// 通过ValueFilter与BinaryPrefixComparator过滤出所有的cell(所有的值)中值以 "张" 开头的学生
//注意:并没有基于某一列去过滤 而是针对所有的cell的值进行过滤
public void ValueFilterWithBinaryPrefixComparator() throws IOException {
BinaryPrefixComparator binaryPrefixComparator = new BinaryPrefixComparator("张".getBytes());
ValueFilter valueFilter = new ValueFilter(CompareFilter.CompareOp.EQUAL, binaryPrefixComparator);
printScannerWithCellUnit(getScanner(valueFilter));
}
@After
public void close() throws IOException {
//关闭连接
admin.close();
conn.close();
}
}