Pycassa: как запросить части составного типа - PullRequest
3 голосов
/ 02 марта 2012

В основном я задаю то же самое, что и в этот вопрос , но для библиотеки 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')])

То же, что и 1-й звонок.

Я что-то не так делаю? Должно ли это работать? Или есть какой-то синтаксис, использующий cf.get (... columns = [('20120216', 'finalscore')])? Я тоже это попробовал и получил исключение.

Согласно http://www.datastax.com/dev/blog/introduction-to-composite-columns-part-1, я должен быть в состоянии сделать что-то подобное ...

Спасибо

1 Ответ

3 голосов
/ 02 марта 2012

Если вам известны все компоненты составного столбца, вам следует указать параметр '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').

...