我需要获取HBase表中可用的列限定符列表。
假设我有一个表'客户',其列为“信息:年龄”和“联系人:PhoneNo ”。为了获得列族列表,我看到有一个方法' getColumnDescriptors ',它返回值'info'和'contact'。
但是如何从表中检索完整的列名'info:Age'和'contact:PhoneNo',或者至少是限定词'Age'和'PhoneNo'。
使用' getRowWithColumns '方法,我可以获取必须传递行键值的列名列表。
我是否可以通过任何其他方便的方式实现这一目标?
答案 0 :(得分:0)
如您所知,这是一个Java工作解决方案,您只需更改一些内容即可将其转换为C ++。
基本上,此方法将扫描表并检索列限定符,然后如果此列表尚未包含它,则将其添加到列表中。
在这里,我查看所有行,但如果所有行始终具有相同的列,则可以使用Get
扫描第一行(例如,查看HBase文档,我&#39 ;在那里写了几个例子。)
public ArrayList<String> getColumnName(String tablename) {
ArrayList<String> properties = new ArrayList<String>();
try {
Table table = this.connection.getTable(TableName.valueOf(tablename));
Scan scan = new Scan();
ResultScanner rs = table.getScanner(scan);
try {
for (Result r = rs.next(); r != null; r = rs.next()) {
for (Cell c : r.rawCells()) {
String family = new String(CellUtil.cloneFamily(c));
String qualifier = new String(CellUtil.cloneQualifier(c));
System.out.println("Column Family : "+ family);
System.out.println("Column Qualifier : " + qualifier);
if (!properties.contains(qualifier))
properties.add(new String(CellUtil.cloneQualifier(c)));
}
}
} finally {
rs.close(); // always close the ResultScanner!
}
} catch (IOException e) {
e.printStackTrace();
}
return properties;
}