2016-06-03 12 views
2

Ich brauche die Liste der Spalten Qualifier in einer HBase-Tabelle zur Verfügung.Erhalten Sie Spaltennamen in HBase Thrift C++?

Angenommen, ich habe eine Tabelle ' Kunden ' mit Spalte ' Info: Alter ' und ' Kontakt: PHONENO '. Um die Liste der Spalte Familien komme ich da ' s ein Verfahren ' getColumnDescriptors ', die den Wert zurückgibt ' info ' und ' Kontakt '.

Aber wie die volle Spaltennamen ' Informationen abzurufen: Alter ' und ' Kontakt: PHONENO ' aus der Tabelle oder atleast die Qualifikations ' Alter ' und ' PHONENO ' allein.

Mit der Methode ' getRowWithColumns ' Ich bin die Lage, die Liste der Spaltennamen zu bekommen, wo ich den Zeilenschlüssel Wert zu übergeben habe.

Kann ich dies auf andere bequeme Weise erreichen?

+0

Ich habe eine Lösung für Java arbeiten, aber ich weiß nicht, ob ich es veröffentlichen können, wie es C++ Post ist, wenn man will ich es schreiben können, und Sie müssen nur ein paar Dinge ändern für C++ –

+0

sicher warum nicht??? –

Antwort

0

Hier ist eine funktionierende Lösung in Java, wie Sie gefragt, Sie müssen nur ein paar Dinge ändern, um es in C++ zu übersetzen.

Grundsätzlich durchsucht diese Methode die Tabelle und ruft die Spaltenqualifizierer ab, dann füge ich sie in eine Liste ein, wenn diese Liste sie nicht bereits enthält.

Hier sehe ich alle Zeilen, aber wenn alle Zeilen immer die gleichen Spalten haben, können Sie einfach die erste Zeile scannen, zum Beispiel mit Get (schauen Sie sich die HBase Dokumentation an, ich habe einige Beispiele geschrieben Dort).

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