我有一个行键1-n的模式。在每一行中都有一个可变数量的超级列,其中包含TimeUUID“name”。我希望能够按时间范围查询这些数据。
出现了两个问题:
KeyRange中的- >我为'start_key'和'end_key'输入的值被Thrift误解(因为没有更好的术语)。尝试不同的价值观我没有看到我期望的东西,往往得到一些完全意想不到的东西。
示例:我的行键从1-1000运行,有很多随机空白。我把start_key = 50和end_key = 20 ..然后我回到了99到414之间的行。
示例:我有一个已知的行,其中key = 13.将此值放入start_key和end_key不会给我带来任何结果。
第二个问题:即使我得到结果,'keyslice'的'columns'部分也总是空的。我通过cassandra-cli检查过,我知道有数据。
我使用Perl如下:
my $slice_range = new Cassandra::SliceRange();
$slice_range->{ start } = create_UUID( UUID::Tiny::UUID_TIME, "2010-12-24 00:00:00" );
$slice_range->{ finish } = create_UUID( UUID::Tiny::UUID_TIME, "2011-12-25 00:00:00" );
my $slice_predicate = new Cassandra::SlicePredicate();
$slice_predicate->{ slice_range } = $slice_range;
my $key_range = new Cassandra::KeyRange();
$key_range->{ start_key } = 13;
$key_range->{ end_key } = 13;
my $result = $client->get_range_slices( $column_parent, $slice_predicate, $key_range, $consistency_level );
print Dumper( $result );
显然我误解了一些基本的戒律。
编辑:事实证明我使用的Perl库没有正确记录。 UUID的创建并不像宣传的那样有效。我把它打开,修好了,现在它正如我所期待的那样。我可以按日期/时间范围切片我的超级列。仍在努力让关键范围部分发挥作用。
答案 0 :(得分:1)
http://wiki.apache.org/cassandra/FAQ#range_rp说明了为什么你没有看到你对关键范围的期望。
您需要指定一个SlicePredicate,其中包含您尝试选择的实际范围。没有column_names且没有slice_range的默认值将导致您看到的空列列表。