0

我必须用一个键(假设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}
];

行键是...

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

4

3 回答 3

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")
  }
于 2014-04-04T04:56:22.167 回答
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")
}
于 2014-04-04T06:19:55.870 回答
1

如果您使用的是 Cassandra 2.0,那么您可以使用正常的INSERTCQL 语句执行此操作,然后IF NOT EXISTS

如果不存在,则插入 your_table(key1)值(“1_100”)

如此处所示,最好使用 CQL 和本机 CQL 驱动程序来完成;该功能作为方法通过 Thrift 公开cas,但 cli 和 Hector 都没有更新以支持此功能,并且可能永远不会。

如果您使用 Cassandra 1.2 或更早版本,这是不可能的。

于 2013-11-07T06:47:52.943 回答