2017-05-25 2 views
0

ich einen Zähler in BigTable zu halten und will in ein paar Daten setzen, wenn der Zähler erreicht X. Ich Derzeit bin es, wie dies zu tun:checkAndPut gelingt es immer wieder

Put put = new Put(EXAMPLE_ROW_KEY); 
put.addColumn(EXAMPLE_COLUMN_FAMILY, NEW_QUALIFIER, NEW_VALUE); 

boolean success = table.checkAndPut(EXAMPLE_ROW_KEY, 
            INFO_COLUMN_FAMILY_NAME, 
            SIZE_COLUMN, 
            CompareFilter.CompareOp.LESS, 
            Bytes.toBytes(10000L), put); 

Das Problem ist, dass der Erfolg ist immer Wahrer und neuer Wert wird immer angegeben, obwohl die Größe 10000L übersteigt. Ich habe versucht, CompareFilter.CompareOp.GREATER_OR_EQUAL mit den exakt gleichen Werten zu verwenden, und es war immer noch wahr.

Wird checkAndPut nicht von BigTable unterstützt oder mache ich etwas falsch?

Antwort

1

Das Problem war, dass ich die Abhängigkeit bigtable-hbase-1.2:0.9.6.2 verwendete, die wahrscheinlich mit einer anderen Abhängigkeit kollidierte. Dies, so nehme ich an, führte dazu, dass ein falscher CheckAndMutateRequest lautlos gesendet wurde und der Check checkAndPut immer bestanden wurde. Ich wechselte zu bigtable-hbase-1.2:0.9.2 und alles wird richtig ausgewertet.

+1

Interessant, danke für das Update. Ich bin froh, dass Sie nicht blockiert sind, aber es scheint, dass dies auch auf eine Regression hindeutet, sodass das Cloud Bigtable-Entwicklerteam dies weiter untersuchen wird. –

1

Wir unterstützen die Operation "table.checkAndPut" in Cloud Bigtable.

Im Allgemeinen ist es jedoch keine große Übung, den CompareFilter auf diese Weise zu verwenden, da er einen lexikalischen Vergleich der Bytes durchführt, keinen logischen Ganzzahlvergleich. siehe

Weitere Informationen und Kontext:

Was die Haupt HBase API gibt es Pläne, dies zu umgehen besser in HBase-Versionen, z in der vorgeschlagenen HBase 2.0, die einen neuen OrderedBytes Datentyp durch das geordnete Projekt inspiriert beinhaltet:

In der Zwischenzeit könnten Sie in der Lage sein, ordentlich irgendwie zu übernehmen, oder vielleicht ein verwenden HBase-Zähler und die Inkrementoperation.

+1

Danke, für die Klarstellung. Ich habe den Code so modifiziert, dass er nur nach Gleichheit auf einer Zeichenkette sucht, aber leider bekomme ich die gleichen falschen Ergebnisse. Die Überprüfung ist erfolgreich, obwohl die Werte unterschiedlich sind. – safyia

+3

Sie können den Fortschritt zu diesem Problem hier verfolgen: https://github.com/GoogleCloudPlatform/cloud-bigtable-client/issues/1348. –

Verwandte Themen