SingleColumnValueFilter не работает в эмуляторе Bigtable - PullRequest
1 голос
/ 17 апреля 2019

Кажется, что эмулятор Bigtable не фильтруется должным образом при использовании SingleColumnValueFilter, как показано в примере ниже; однако этот же код работает правильно в рабочей версии Bigtable.

Неверный вывод результата: "строка1 строка2 строка3 строка4"

Должно быть напечатано: "row3"

byte[] cf = "cf".getBytes();
byte[] cq = "cq".getBytes();
Connection conn = BigtableConfiguration.connect("fake-project", "fake-instance");
Admin admin = conn.getAdmin();
TableName testTableName = TableName.valueOf("testTable");
HTableDescriptor descriptor = new HTableDescriptor(testTableName);
descriptor.addFamily(new HColumnDescriptor(cf));
admin.createTable(descriptor);

byte[] val = { 0x1a };
byte[] val2 = { 0x11 };
byte[] val3 =  "a".getBytes();
byte[] val4 = "b".getBytes();

Table table = conn.getTable(testTableName);
table.put(new Put("row1".getBytes()).addColumn(cf, cq, val));
table.put(new Put("row2".getBytes()).addColumn(cf, cq, val2));
table.put(new Put("row3".getBytes()).addColumn(cf, cq, val3));
table.put(new Put("row4".getBytes()).addColumn(cf, cq, val4));

Scan scan = new Scan().setFilter(new SingleColumnValueFilter(cf, cq, CompareOp.EQUAL, val3));
// THIS wrongly prints all rows in the table rather than just row3
for(Result r: table.getScanner(scan)) {
    String row = new String(r.getRow());
    System.out.print(row);
}
...