タイトルが少し大雑把であることは承知していますが、さまざまなエラーで多くのことを試したので、このスペースを使用してそれぞれを説明するつもりでした. 以下の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 に基づいて要素を検索することはできますか? それはうまくいくでしょうか?私は超迷っています。