3

使用 Cassandra 1.2。我通过以下方式使用 CQL 3 创建了一个表:

CREATE TABLE foo (
    user text PRIMARY KEY,
    emails set<text>
);

现在我正在尝试通过pycassa查询数据:

import pycassa
from pycassa.pool import ConnectionPool
pool = ConnectionPool('ks1', ['localhost:9160'])
foo = pycassa.ColumnFamily(pool, 'foo')

这给了我

Traceback (most recent call last):
  File "test.py", line 5, in <module>
    foo = pycassa.ColumnFamily(pool, 'foo')
  File "/home/john/src/pycassa/lib/python2.7/site-packages/pycassa/columnfamily.py", line 284, in __init__
    self.load_schema()
  File "/home/john/src/pycassa/lib/python2.7/site-packages/pycassa/columnfamily.py", line 312, in load_schema
    raise nfe
pycassa.cassandra.ttypes.NotFoundException: NotFoundException(_message=None, why='Column family foo not found.')

如何实现?

4

5 回答 5

5

如果您使用 CQL3 创建了表,并且希望通过基于 thrift 的客户端访问它们;您必须指定 Compact Storage 属性。例如:

CREATE TABLE dummy_file_test
(
 dtPtn          INT,
 pxID           INT,
 startTm        INT,
 endTm          INT,
 patID          BIGINT,
 efile          BLOB,
 PRIMARY KEY((dtPtn, pxID, startTm))
)with compact storage;  

这是我在使用 Pycassa 访问基于 CQL3 的列 Families 时必须做的事情

于 2013-07-10T08:23:16.317 回答
3

我正在使用 Cassandra 1.2.8 和 pycassa 1.9.0 和 CQL3 进行测试。我能够验证使用在 CREATE 表语句期间使用的“WITH COMPACT STORAGE”在 CQL3 中创建的表确实使表(列族)对 pycassa 可见。不幸的是,我无法找到如何更改表以使“WITH COMPACT STORAGE”显示在 DESCRIBE TABLE 命令中。THE ALTER TABLE WITH 语句应该允许您更改该设置但没有运气。

要验证结果,只需使用 CQL3 创建两个表,一个使用 WITH COMPACT STORAGE,另一个不使用它,结果是可重现的。

看起来要实现既定目标,需要删除表,然后使用“WITH COMPACT STORAGE”选项作为 CREATE 语句的一部分重新创建表。如果您不想丢失任何数据,则可以重命名现有表,使用正确的选项创建新的空表,然后将数据移回所需的表中。除非,当然,您可以找到正确更改表格的方法,如果可能的话,这会更容易。

于 2013-08-01T17:49:29.857 回答
1

使用 CQL3 创建的列族不能使用 pycassa 使用的 Thrift API。

如果您有更多问题,可以阅读此内容。

于 2013-01-09T06:23:05.787 回答
0

看来您的列族(表)定义不正确。运行cqlsh,然后describe keyspace ks1;。我的猜测是你不会看到你的 CF 被列出来。检查您的键空间名称是否正确。

于 2013-01-07T20:00:31.413 回答
0

Pycassa 不支持较新版本的 cassandra - 请参阅 Ival 的答案和此处了解更多信息。有关pycassa 的替代解决方案,请参阅https://pypi.python.org/pypi/cql/1.0.4 。

于 2013-04-11T18:06:19.930 回答