如何使用hector获取使用scala存储在Cassandra 2.0.1列系列中的所有密钥?

时间:2013-11-06 05:25:01

标签: scala cassandra hector cassandra-cli column-family

我必须用键输入一些值(假设为key1="1_100"),但在插入值之前我想要检查是否为键(“1_100”)已插入或未插入。我知道如果存在,它将替换前一个。如果密钥不存在,我只想输入值。

我正在使用cassandra cli。

    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

3 个答案:

答案 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")
}