基本上我问的问题与this question相同,但对于Python Cassandra库,PyCassa。
假设您有一个存储数据的复合类型:
[20120228:finalscore] = '31-17'
[20120228:halftimescore]= '17-17'
[20120221:finalscore] = '3-14'
[20120221:halftimescore]= '3-0'
[20120216:finalscore] = '54-0'
[20120216:halftimescore]= '42-0'
所以,我知道我可以通过以下方式轻松地根据复合类型的第一部分进行切片:
>>> cf.get('1234', column_start('20120216',), column_finish('20120221',))
OrderedDict([((u'20120216', u'finalscore'), u'54-0'),
((u'20120216', u'halftimescore'), u'42-0')])
但如果我只想要决赛,我会认为我能做到:
>>> cf.get('1234', column_start('20120216', 'finalscore'),
column_finish('20120221', 'finalscore'))
获得:
OrderedDict([((u'20120216', u'finalscore'), u'54-0')])
但相反,我得到了:
OrderedDict([((u'20120216', u'finalscore'), u'54-0'),
((u'20120216', u'halftimescore'), u'42-0')])
与第一次通话相同。
我做错了吗?这有用吗?或者使用cf.get有一些语法(... columns = [('20120216','finalscore')])?我也尝试了这个例外。
根据http://www.datastax.com/dev/blog/introduction-to-composite-columns-part-1,我应该可以做这样的事情......
由于
答案 0 :(得分:3)
如果知道复合列的所有组件,那么您应该使用'columns'
选项:
cf.get('1234', columns=[('20120216', 'finalscore')])
你说你在尝试这样做时遇到了错误,但我建议再试一次。它对我来说很好。
在切割复合列时,您需要考虑它们的排序方式。复合列首先从最左侧的组件开始排序,然后向右排序每个组件。因此,在您的示例中,列将如下所示:
+------------+---------------+------------+---------------+------------+----------------+
| 20120216 | 20120216 | 20120221 | 20120221 | 20120228 | 20120228 |
| finalscore | halftimescore | finalscore | halftimescore | finalscore | halftimescore |
+------------+---------------+------------+---------------+------------+----------------+
因此,当您从('20120216', 'finalscore')
切换到('20120221', 'finalscore')
时,您会获得'20120216'
的两个值。要使查询按照您的意愿工作,您可以将column_finish更改为('20120216', 'halftimescore')
。