2012-03-02 9 views
3

基本的にはthis questionと同じものを求めていますが、Python CassandraライブラリのPyCassaについては質問しています。Pycassa:複合型の一部を照会する方法

は、あなたがこのようなデータを格納する複合型を考えてみましょう:

>>> cf.get('1234', column_start('20120216',), column_finish('20120221',)) 
OrderedDict([((u'20120216', u'finalscore'), u'54-0'), 
((u'20120216', u'halftimescore'), u'42-0')]) 
を:

[20120228:finalscore] = '31-17' 
[20120228:halftimescore]= '17-17' 
[20120221:finalscore] = '3-14' 
[20120221:halftimescore]= '3-0' 
[20120216:finalscore] = '54-0' 
[20120216:halftimescore]= '42-0' 

だから、私は簡単に行って、複合型の最初の部分のオフに基づいてスライスすることができます知っています

しかし、私は唯一のfinalscoreをしたい場合、私は何ができると仮定します:

>>> cf.get('1234', column_start('20120216', 'finalscore'), 
column_finish('20120221', 'finalscore')) 

を取得するには:

OrderedDict([((u'20120216', u'finalscore'), u'54-0')]) 

しかし、その代わりに、私が取得する:第1回の呼び出しなど

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によると、私はこのような何かを行うことができるはず...

おかげ

答えて

3

複合列のすべてのコンポーネントを知っているなら、あなたべき'columns'オプション:

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

あなたはこれをやろうとするとエラーが発生したと言いましたが、もう一度試してみることをお勧めします。それは私のためにうまく動作します。

コンポジット列をスライスするときに、どのようにソートされるかを考える必要があります。複合列は、最初に左端のコンポーネントでソートし、各コンポーネントを右にソートします。だからあなたの例では、列は次のようになります。あなたは('20120216', 'finalscore')から('20120221', 'finalscore')にスライスするとき

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

は、このようにあなたは'20120216'のために両方の値を取得します。あなたが望むようにクエリを動作させるには、column_finishを('20120216', 'halftimescore')に変更することができます。

+0

あなたはcf.get()コールを正しく実行しているので、正しく動作します。間違った型を入力したことがあります。 – stantonk

+0

しかし、私の質問の2番目の部分については、私が実際に探しているのはPycassaの部分合成を照会する方法なので、私の例は少し貧しいと思います。 明らかに、HectorとPycassaの両方で、部分複合型を使用してスライスクエリを実行できます。 cf.get( '1234'、column_start =( '20120216'、)、column_finish =( '20120221'、 )) しかし、私は部分複合を使用してcf.get()を実行しようとするとエラーが発生します。それはカサンドラでは不可能ですか? – stantonk

+1

部分的なコンポジットはスライスにのみ使用できます。 getを使用するときは、必要な列の完全な名前を知る必要があります。 – psanford

関連する問題