【问题标题】:Reading Cassandra 1.2 table with pycassa用 pycassa 读取 Cassandra 1.2 表
【发布时间】:2012-12-20 13:16:32
【问题描述】:

使用 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.')

如何做到这一点?

【问题讨论】:

    标签: python cassandra pycassa


    【解决方案1】:

    如果您使用 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 时必须做的事情

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

        【解决方案3】:

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

        如果您还有其他问题,可以read this

        【讨论】:

          【解决方案4】:

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

          【讨论】:

            【解决方案5】:

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

            【讨论】:

              猜你喜欢
              • 2012-03-22
              • 1970-01-01
              • 1970-01-01
              • 2014-02-27
              • 1970-01-01
              • 2013-07-08
              • 2013-05-25
              • 1970-01-01
              • 2014-04-11
              相关资源
              最近更新 更多