我必须用键输入一些值(假设为key1="1_100"
),但在插入值之前我想要检查是否为键(“1_100
”)已插入或未插入。我知道如果存在,它将替换前一个。如果密钥不存在,我只想输入值。
CREATE COLUMN FAMILY mytable
WITH comparator = UTF8Type
AND key_validation_class=UTF8Type
AND column_metadata = [
{column_name: id, validation_class: UTF8Type},
{column_name: name, validation_class: UTF8Type},
{column_name: tagLine, validation_class: UTF8Type},
{column_name: introduction, validation_class: UTF8Type},
{column_name: webAddress, validation_class: UTF8Type}
];
rowkeys是......
RowKey:1_100
RowKey:1_101
RowKey:2_100
RowKey:3_100
RowKey:1_105
RowKey:2_104
RowKey:3_101
并且现在想知道如何通过scala中的cassandra cli中的hector获取这些Rowkeys
答案 0 :(得分:1)
如果您使用的是Cassandra 2.0,那么您可以使用普通INSERT
CQL语句后跟IF NOT EXISTS
来执行此操作:
INSERT INTO your_table(key1)值(“1_100”)IF NOT NOT EXISTS
如此处所示,最好使用CQL和本机CQL驱动程序;这个功能作为cas
方法在Thrift上公开,但是cli和Hector都没有更新来支持这个并且可能永远不会支持。
如果您使用的是Cassandra 1.2或更早版本,则无法做到这一点。
答案 1 :(得分:1)
val rangeSlice = HFactory.createRangeSlicesQuery(keyspace, se, se, se)
rangeSlice.setColumnFamily("myTable")
rangeSlice.setKeys(null, null)
rangeSlice.setRange(null, null, true, Int.MaxValue)
val bIterator = rangeSlice.execute().get.iterator()
while (bIterator.hasNext()) {
val myRow = bIterator.next()
val myKey = myRow.getKey()
println(myKey+"<<<this is key")
}
答案 2 :(得分:1)
val rangeSlice = HFactory.createRangeSlicesQuery(keyspace, se, se, se)
rangeSlice.setColumnFamily("myTable")
rangeSlice.setReturnKeysOnly();
val bIterator = rangeSlice.execute().get.iterator()
while (bIterator.hasNext()) {
val myKey =bIterator.next().getKey()
println(myKey+"<<<this is key")
}