package com.yihu.ehr.hbase;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.tuple.ImmutablePair;
import org.apache.commons.lang3.tuple.Pair;
import org.apache.hadoop.hbase.client.Delete;
import org.apache.hadoop.hbase.client.Get;
import org.apache.hadoop.hbase.client.Put;
import org.apache.hadoop.hbase.util.Bytes;
import java.util.*;
import java.util.stream.Collectors;
/**
* 将HBase中的行,列族,列捆绑成一束。并一次性生成所需要的Get, Put操作。
*
* 仅支持单表操作。
*
* 虽然支持多种HBase操作,但请注意,一次只能用于一种操作,如:Get,Put,Delete不能混用,
* 否则将出现难以预料的后果。
*
* @author Sand
* @created 2016.04.27 14:38
*/
public class TableBundle {
Map rows = new HashMap<>();
public void addRows(String... rowKeys) {
for (String rowKey : rowKeys) {
rows.put(rowKey, null);
}
}
private Row getRow(String rowKey) {
Row row = rows.get(rowKey);
if (row == null) {
row = new Row();
rows.put(rowKey, row);
}
return row;
}
public void addFamily(String rowKey, Object family) {
Row row = getRow(rowKey);
row.addFamily(family.toString());
}
public void addColumns(String rowKey, Object family, String[] columns) {
Row row = getRow(rowKey);
row.addColumns(family.toString(), columns);
}
public void addValues(String rowKey, Object family, Map values) {
Row row = getRow(rowKey);
row.addValues(family.toString(), values);
}
public void clear() {
rows.clear();
}
public List getOperations() {
List gets = new ArrayList<>(rows.size());
for (String rowKey : rows.keySet()) {
Get get = new Get(Bytes.toBytes(rowKey));
Row row = rows.get(rowKey);
if (row != null) {
for (String family : row.getFamilies()) {
Set