在HBase Thrift C ++中获取列名?

时间:2016-06-03 04:47:18

标签: visual-c++ hbase thrift

我需要获取HBase表中可用的列限定符列表。

假设我有一个表'客户',其列为“信息:年龄”和“联系人:PhoneNo ”。为了获得列族列表,我看到有一个方法' getColumnDescriptors ',它返回值'info'和'contact'。

但是如何从表中检索完整的列名'info:Age'和'contact:PhoneNo',或者至少是限定词'Age'和'PhoneNo'。

使用' getRowWithColumns '方法,我可以获取必须传递行键值的列名列表。

我是否可以通过任何其他方便的方式实现这一目标?

1 个答案:

答案 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;
}