2017-01-10 1 views
0

Ich bin sehr neu in HBase api und einige seltsame Ergebnisse zu sehen, wenn die folgende tun.HBase Scan api mit mehreren Filterbedingungen

Wir versuchen, basierend auf mehrere Filter zu scannen. Ich möchte alle Filterbedingungen bestehen. Ich verwende den folgenden Code.

FilterList filterList = new FilterList(FilterList.Operator.MUST_PASS_ALL); 
Filter pageFilter = new PageFilter(5000); 
filterList.addFilter(pageFilter); 
SingleColumnValueFilter filterOne = new SingleColumnValueFilter(Bytes.toBytes(COLUMN_FAMILY), 
       Bytes.toBytes(COLUMN_NAME1), CompareOp.EQUAL, Bytes.toBytes(value1)); 
filterList.addFilter(filterOne); 
SingleColumnValueFilter filterTwo = new SingleColumnValueFilter(Bytes.toBytes(COLUMN_FAMILY), 
       Bytes.toBytes(COLUMN_NAME2), CompareOp.EQUAL, Bytes.toBytes(value2)); 
filterList.addFilter(filterOne); 
filterList.addFilter(filterTwo); 

//Scan 
Scan scan = new Scan(); 
scan.setFilter(filterList); 
Result result; 
try { 
      scanner = hTable.getScanner(scan); 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
while ((result = scanner.next()) != null) { 
    //print the result. 
} 
//If I am adding multiple SingleColumnValueFilter and I am not doing a addCoulmn() to the scan I am not getting any result even though there are records. 

//If I am adding a column to scan then I am seeing results. Initially the result set is matching my filter condition but if I am running for bigger hbase data set then I am seeing bad results. 

//If I am adding multiple addCoulmn() to my scan then I am not seeing any result 

Ich versuche, nach dem richtigen Beispiel zu suchen, aber keiner von ihnen scheint zu arbeiten. Jede Hilfe in dieser Richtung wird sehr geschätzt. Danke im Voraus.

+0

Warum fügen Sie filterTwo zweimal? – Comencau

+0

Wir sehen nicht, wo Scanner Variable – Comencau

Antwort

0

Sie spezifiziert eine FilterList wo alle Filter (wie ein „UND“ Verhalten) passieren müssen. In der Liste der Filter, haben Sie 2 SingleColumnValueFilter, die widersprüchlich sind: sie sagen, dass die Spalte COLUMN_FAMILY:COLUMN_NAME zu Wert1 und Wert2 zugleich gleich sein müssen. Ich denke, deshalb bekommst du kein Ergebnis mit dem Kontext deines ersten und dritten Kommentars.

Bezüglich Ihrer zweiten Kommentar, ich glaube, Sie im Auge behalten, dass die SingleColumnValueFilter nur dann angewendet werden, wenn die Spalte in der Scan vorhanden ist. Es kann die Erklärung dessen sein, was du siehst. Schauen Sie sich die setFilterIfMissing(boolean) Methode: https://hbase.apache.org/apidocs/org/apache/hadoop/hbase/filter/SingleColumnValueFilter.html#setFilterIfMissing-boolean-

Hoffe, es hilft

+0

erstellt Ich habe meine Tippfehler bearbeitet. Sie sind zwei verschiedene Spalten unter derselben Spaltenfamilie. In Bezug auf Ihren zweiten Punkt, auch wenn ich beide Spalten im Scan hinzufüge, bekomme ich nicht das gewünschte Ergebnis. – hopeIsTheonlyWeapon

+0

Ich habe den Code geändert.Noch nicht das gewünschte Ergebnis. – hopeIsTheonlyWeapon

Verwandte Themen