使用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.')
如何实现这一目标?
答案 0 :(得分: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的列族时必须要做的事情
答案 1 :(得分:3)
我正在使用Cassandra 1.2.8和pycassa 1.9.0和CQL3进行测试。我能够验证在CREATE表语句中使用“WITH COMPACT STORAGE”在CQL3中创建的表确实使表(列族)对pycassa可见。不幸的是,我无法找到如何更改表以使“WITH COMPACT STORAGE”显示在DESCRIBE TABLE命令中。 ALTER TABLE WITH语句应该允许您更改该设置但没有运气。
要验证结果,只需使用CQL3创建两个表,一个使用WITH COMPACT STORAGE,另一个使用WITH COMPACT STORAGE,结果可以重新生成。
看起来要完成所述目标,需要删除该表,然后使用“WITH COMPACT STORAGE”选项作为CREATE语句的一部分重新创建。如果您不想丢失任何数据,那么可能重命名现有表,使用正确的选项创建新的空表,然后将数据移回所需的表。除非,当然你可以找到如何正确地改变表格,如果可能的话,这会更容易。
答案 2 :(得分:1)
使用CQL3创建的列族不能使用pycassa使用的Thrift API。
如果您有更多问题,可以read this。
答案 3 :(得分:0)
您的列族(表)似乎未正确定义。运行cqlsh
,然后describe keyspace ks1;
。我的猜测是你不会看到你的CF列出。检查您的键空间名称是否正确。
答案 4 :(得分:0)
Pycassa不支持较新版本的cassandra - 请参阅Ival的回答和here以获取更多信息。有关pycassa的替代解决方案,请参阅https://pypi.python.org/pypi/cql/1.0.4。