在hbase thrift c++中获取列名?

gpnt7bae  于 2021-06-09  发布在  Hbase
关注(0)|答案(1)|浏览(600)

我需要获取hbase表中可用的列限定符列表。
假设我有一个表'customers',列'info:age'和'contact:phoneno'. 为了得到列族的列表,我看到有一个方法“getcolumndescriptors”,它返回值“info”和“contact”。
但是如何检索完整的列名info:age'和'contact:phoneno'或至少仅限限定符'age'和'phoneno'。
使用“getrowwithcolumns”方法,我可以获得列名列表,其中必须传递行键值。
我能通过任何其他方便的方式来实现这一点吗?

vm0i2vca

vm0i2vca1#

正如您所要求的,这里有一个java的工作解决方案,您只需更改一些内容即可将其转换为c++。
基本上,这个方法将扫描表并检索列限定符,然后如果这个列表还没有包含它们,我将它们添加到一个列表中。
在这里,我查看所有的行,但是如果所有的行都有相同的列,您可以使用 Get 例如(看看hbase文档,我在那里写了几个例子)。

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

相关问题