我如何正确地设计这个卡桑德拉模型?

2024-10-01 05:04:07 发布

您现在位置:Python中文网/ 问答频道 /正文

我知道题目有点宽泛,但是我试过很多不同错误的东西,所以我打算用这个空间来描述每一个错误。下面是datastax的python驱动程序中的一个模型:

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)

但是当我尝试这个的时候:

^{pr2}$

我得到这个错误:

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必须是分区密钥的最后一部分。我可以为每个元素分配一个随机的uuid并根据主键和索引查找元素吗?这样行吗?我太迷路了。在


Tags: columnskeytexttruedatetimemodel错误required
1条回答
网友
1楼 · 发布于 2024-10-01 05:04:07

你也需要把方向作为主键。在

从Datastax文档中:

Define a counter in a dedicated table only and use the counter data type. You cannot index, delete, or re-add a counter column. All non-counter columns in the table must be defined as part of the primary key.

相关问题 更多 >