3

基本的に、私はこの質問と同じことを尋ねていますが、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によると、このようなことができるはずです...

ありがとう

4

1 に答える 1

3

複合カラムのすべてのコンポーネントを知っている場合は、次の'columns'オプションを選択する必要があります。

cf.get('1234', columns=[('20120216', 'finalscore')])

これを実行しようとするとエラーが発生したとのことですが、再試行することをお勧めします。それは私にとってはうまくいきます。

複合列をスライスするときは、それらがどのようにソートされるかを考える必要があります。複合列は、最初に左端のコンポーネントから並べ替え、次に各コンポーネントを右に並べ替えます。したがって、あなたの例では、列は次のようになります。

+------------+---------------+------------+---------------+------------+----------------+
| 20120216   | 20120216      | 20120221   | 20120221      | 20120228   | 20120228       |
| finalscore | halftimescore | finalscore | halftimescore | finalscore | halftimescore  |
+------------+---------------+------------+---------------+------------+----------------+

したがって、からスライスすると、の両方の値が得られ('20120216', 'finalscore')ます。クエリを希望どおりに機能させるには、column_finishをに変更します。('20120221', 'finalscore')'20120216'('20120216', 'halftimescore')

于 2012-03-02T16:22:51.533 に答える