java
复制代码
private Connection connection;
private Admin admin;
private Table table;
@Test
public void createTable() throws Exception{
ColumnFamilyDescriptor cl1 = ColumnFamilyDescriptorBuilder.newBuilder("basic".getBytes()).build();
ColumnFamilyDescriptor cl2 = ColumnFamilyDescriptorBuilder.newBuilder("info".getBytes()).build();
// Demo:user 在Demo命名空间内创建user表 user 在default空间内
TableDescriptor table1 = TableDescriptorBuilder.newBuilder(TableName.valueOf("user"))
.setColumnFamily(cl1)
.setColumnFamily(cl2)
.build();
admin.createTable(table1);
}
@Test
public void append() throws IOException {
//RowKEY
Append append = new Append("u1".getBytes());
//ColumnFamily Column value
byte[] basic = "basic".getBytes();
append.addColumn(basic,"name".getBytes(),"hsk".getBytes());
append.addColumn(basic,"age".getBytes(),"15".getBytes());
byte[] info = "info".getBytes();
append.addColumn(info,"phone".getBytes(),"nonono".getBytes());
append.addColumn(info,"address".getBytes(),"beijing".getBytes());
table.append(append);
}
//put一百万数据
//26s即可。效率很高 。 Rowkey有序但不是大小排序。而是字典排序(一个字符一个字符来排序 9 在 1221之后,因为9比1大)
@Test
public void putMillions() throws Exception{
ArrayList<Put> list = new ArrayList<Put>();
long start = System.currentTimeMillis();
//CoulumnFamily
byte[] basic = "basic".getBytes();
//Column
byte[] password = "passWoed".getBytes();
for (int i = 0; i < 1000000; i++) {
//RowKey
byte[] rowKey = ("m" + i).getBytes();
Put put = new Put(rowKey);
put.addColumn(basic,password,reducePassword());
list.add(put);
if(i==10000){
table.put(list);
list.clear();
}
}
long end = System.currentTimeMillis();
System.out.println(end-start);
}
@Test
public void delete() throws Exception{
//确定行
Delete delete = new Delete("u1".getBytes());
//ColumnFamily
delete.addFamily("basic".getBytes());
table.delete(delete);
}
@Test
public void deleteAll() throws Exception{
Delete delete = new Delete("u1".getBytes());
table.delete(delete);
}
//获取Cell
@Test
public void getCell() throws Exception{
Get get = new Get("u1".getBytes());
get.addColumn("basic".getBytes() ,"name".getBytes());
Result result = table.get(get);
byte[] value = result.getValue("basic".getBytes(), "name".getBytes());
System.out.println(new String(value));
}
//getColumnFamily
@Test
public void getColumn() throws Exception{
Get get = new Get("u1".getBytes());
get.addFamily("basic".getBytes());
Result result = table.get(get);
NavigableMap<byte[], byte[]> familyMap = result.getFamilyMap("basic".getBytes());
for (Map.Entry<byte[], byte[]> entry : familyMap.entrySet()) {
System.out.println(new String(entry.getKey())+" "+new String(entry.getValue()));
}
}
//getLine
//结果map嵌套map
@Test
public void getLineByFor() throws IOException{
Get get = new Get("u1".getBytes());
Result result = table.get(get);
NavigableMap<byte[], NavigableMap<byte[], NavigableMap<Long, byte[]>>> map = result.getMap();
for (Map.Entry<byte[], NavigableMap<byte[], NavigableMap<Long, byte[]>>> navigableMapEntry : map.entrySet()) {
System.out.println("Column Family\t:"+new String(navigableMapEntry.getKey()));
for (Map.Entry<byte[], NavigableMap<Long, byte[]>> mapEntry : navigableMapEntry.getValue().entrySet()) {
System.out.println("Column Name\t:"+new String(mapEntry.getKey()));
for (Map.Entry<Long, byte[]> longEntry : mapEntry.getValue().entrySet()) {
System.out.println("\t\tTimeStamp\t:"+longEntry.getKey());
System.out.println("\t\tCellValue\t:"+new String(longEntry.getValue()));
}
}
}
}
//Lambda方式获取整行数据
@Test
public void getLineByLambda() throws IOException{
Get get = new Get("u1".getBytes());
Result result = table.get(get);
NavigableMap<byte[], NavigableMap<byte[], NavigableMap<Long, byte[]>>> row = result.getMap();
row.forEach((key,value) ->{
System.out.println("Column Family\t:"+new String(key));
value.forEach((keyy,valuee)->{
System.out.println("\tColumn Name\t:"+new String(keyy));
valuee.forEach((keyyy,valueee)->{
System.out.println("\t\tTimstamp\t:"+keyyy+ "\t\tvalue\t:"+new String(valueee));
});
});
});
}
//整表查询
@Test
public void scan() throws IOException{
Scan scan = new Scan();
ResultScanner results = table.getScanner(scan);
Iterator<Result> iterator = results.iterator();
while(iterator.hasNext() ){
Result next = iterator.next();
// 根据需求来确定获取指定列,还是获取指定列族或者是整表数据
// 获取整表数据
// r.getMap();
// 获取指定列族的数据
// r.getFamilyMap(ColumnFamily );
// 获取指定列的数据
// r.getvalue(ColumnFamily , ColumnName)
//todo 获取不到每行的RowKey
NavigableMap<byte[], NavigableMap<byte[], NavigableMap<Long, byte[]>>> row = next.getMap();
row.forEach((key,value) ->{
System.out.println("Column Family\t:"+new String(key));
value.forEach((keyy,valuee)->{
System.out.println("\tColumn Name\t:"+new String(keyy));
valuee.forEach((keyyy,valueee)->{
System.out.println("\t\tTimstamp\t:"+keyyy+ "\t\tvalue\t:"+new String(valueee));
});
});
});
System.out.println("----------------------------------------------------------");
NavigableMap<byte[], byte[]> familyMap = next.getFamilyMap("basic".getBytes());
familyMap.forEach((k,v)->{
System.out.println("ColumnName"+new String(k)+"\t--"+new String(v));
});
System.out.println("----------------------------------------------------------");
byte[] value = next.getValue("basic".getBytes(), "password".getBytes());
System.out.println(value == null ? "null":new String(value));
}
}
// 基于Scan操作的前提下,还可以对结果来进行过滤
@Test
public void filter() throws IOException {
Scan scan = new Scan();
// 构建Filter对象
// 过滤密码中含有AAA的数据
// .*AAA.*
// CompareOperator - 比较方式
// ByteArrayComparable - 比较规则
Filter f = new ValueFilter(CompareOperator.EQUAL, new RegexStringComparator(".*A.*"));
scan.setFilter(f);
// 获取结果集
ResultScanner rs = table.getScanner(scan);
for (Result r : rs) {
byte[] value = r.getValue("basic".getBytes(), "passWoed".getBytes());
System.out.println(value == null ? "null" : new String(value));
}
}
public byte[] reducePassword(){
StringBuilder stringBuilder = new StringBuilder();
for (int i = 0; i < 6; i++) {
stringBuilder.append((char)(Math.random()*26+65));
}
return stringBuilder.toString().getBytes();
}