2017-09-29 12 views
1

Je souhaite obtenir les lignes de la famille de colonnes sélectionnées dans HBase après l'application du filtre de valeur de colonne unique.Sortie de formatage dans HBase

Dans ma table 'projectData' J'ai la famille colonne comme

name|story|type|keyword 

    aritra| kl |ac |happy 
    nill |jk |bc |sad 
    bob |pk |dd |happy 

. Je veux obtenir la liste de 'nom' quand leur 'mot-clé' est heureux. Voici mon code.

public class ByCategory { 

    public static void main(String [] args) throws Exception{ 

     Configuration conf = HBaseConfiguration.create(); 
     HTable table = new HTable(conf, "Projectdata"); 

     SingleColumnValueFilter filter_by_happycategory = new SingleColumnValueFilter(
       Bytes.toBytes("keyword"), 
       Bytes.toBytes(""), 
       CompareOp.EQUAL, 
       Bytes.toBytes("happy") 
       ); 
     FilterList filterListk =new FilterList(); 
     filterListk.addFilter(filter_by_happycategory); 

     Scan scanh = new Scan(); 
     scanh.addFamily(Bytes.toBytes("name")); 
     scanh.addFamily(Bytes.toBytes("keyword")); 
     scanh.setFilter(filterListk); 


     ResultScanner scannerh = table.getScanner(scanh); 
     String key = new String("~"); 
     String keyFlag = new String("~"); 
     System.out.println("Scanning table... "); 

      for(Result resulth: scannerh){ 
       //System.out.println("getRow:"+Bytes.toString(resulth.getRow())); 
       key = "~"; 
       for(KeyValue kv:resulth.raw()) 
       { 
        if(key.compareTo(keyFlag)==0){ 
         key=Bytes.toString(kv.getRow()); 
         System.out.print("Key: "+key); 
        } 
        System.out.print(Bytes.toString(kv.getValue())); 

       } 
       System.out.println(""); 

      } 
      scannerh.close(); 
      System.out.println("complete"); 
      table.close(); 
     } 

    } 

Je suis geting sortie comme celui-ci

Key: 102happybob 
Key: 109happyaritra 

Mais je veux nom. Je suis en train de faire

Key: 102bob 
Key: 109aritra 

Est-il possible en HBase? Où est ma faute en réalité?

+0

Votre question est confuse et peu claire. vous dites 'où dans' nom 'colonne j'ai des valeurs comme {aritra, nill, bob, jakob} et dans la colonne' mot-clé '{heureux, triste, émotionnel} etc' et aussi 'scanh.addFamily (Bytes.toBytes (" name ")); '. Ainsi sont ces columnfamily ou colonne? –

+0

sorry.J'ai modifié ma question. Tous ces éléments sont des familles de colonnes. – Yonex

+0

Encore une fois, comment une famille de colonnes peut-elle avoir des valeurs sans un nom de colonne? Est-ce la rowkey ou le nom de la colonne? Supprimé réponse précédente, répondra une fois que la question est claire. –

Répondre

1

Utilisez

for(Result resulth: scannerh){ 
     System.out.println("Key: "+Bytes.toString(resulth.getRow())+Bytes.toString(resulth.getValue(Bytes.toBytes("name"),Bytes.toBytes("")))); 
    } 

Vous obtiendrez le output.Here resulth.getRow() vous donne RowKey tout .getValue (columnfamily, colonne) souhaitée vous donne la valeur d'une colonne spécifique qui est « » dans votre cas .