1

タイトルが少し大雑把であることは承知していますが、さまざまなエラーで多くのことを試したので、このスペースを使用してそれぞれを説明するつもりでした. 以下のdatastaxのpython-driverにモデルがあります:

class DIDSummary(Model):
    __keyspace__ = 'processor_api'

    did = columns.Text(required=True, primary_key=True, partition_key=True)
    month = columns.DateTime(required=True, primary_key=True, partition_key=True)
    direction = columns.Text(required=True)
    duration = columns.Counter(required=True)
    cost = columns.Counter(required=True)

しかし、私がこれを試すと:

didsummaries = DIDSummary.filter(did__in=dids, month__in=datetime_range)

次のエラーが表示されます。

code=2200 [Invalid query] message="Partition KEY part did cannot be restricted by IN relation (only the last part of the partition key can)"

次に、これを試しました:

class DIDSummary(Model):
    # ...
    month = columns.DateTime(required=True, primary_key=True)
    # ...

エラーが発生しました:

code=2200 [Invalid query] message="Clustering column "month" cannot be restricted by an IN relation"

私もこれを試しました:

class DIDSummary(Model):
    # ...
    month = columns.DateTime(required=True, primary_key=True, index=True)
    # ...

これにより、このエラーが発生しました:

InvalidRequest: code=2200 [Invalid query] message="Secondary indexes are not supported on counter tables"

しようとしたときsync_table(DIDSummary)

最後に、私はこれをやろうとしました:

class DIDSummary(Model):
    # ...
    month = columns.DateTime(required=True, primary_key=True)
    direction = columns.Text(required=True)
    # ...

サーバーを実行することさえできず、ログに次のエラーが記録されます。

cassandra.cqlengine.models.ModelDefinitionException: counter models may not have data columns

上記のコマンドを実行できるように、これをより適切に設計する方法についてのヘルプをいただければ幸いです。ありがとう!

編集:私もこれをしなければなりません:

didsummaries = DIDSummary.filter(did__in=dids, month=month)

これは、実際にdidは私の partition_key の最後の部分でなければならないことを意味します。各要素にランダムな uuid を割り当て、primary_keys と index に基づいて要素を検索することはできますか? それはうまくいくでしょうか?私は超迷っています。

4

1 に答える 1

1

方向も主キーにする必要があります。

Datastaxのドキュメントから:

専用テーブルでのみカウンターを定義し、カウンター データ型を使用します。カウンター列のインデックス作成、削除、または再追加はできません。テーブル内のカウンター以外の列はすべて、主キーの一部として定義する必要があります。

于 2015-07-20T06:45:42.647 に答える