【问题标题】:Cassandra column family not found in pycassa在 pycassa 中找不到 Cassandra 列族
【发布时间】:2014-04-11 04:50:56
【问题描述】:

我正在尝试连接到 Cassandra 以进行批量插入。但是,当我尝试连接时,出现错误。

我正在使用的代码:

from pycassa import columnfamily
from pycassa import pool

cassandra_ips = ['<an ip addr>']
conpool = pool.ConnectionPool('my_keyspace', cassandra_ips)

colfam = columnfamily.ColumnFamily(conpool, 'my_table')

但是这在最后一行失败了:

pycassa.cassandra.ttypes.NotFoundException: NotFoundException(_message=None, why='Column family my_table not found.')

列族肯定存在:

cqlsh> use my_keyspace
   ... ;
cqlsh:my_keyspace> desc tables;

my_table

cqlsh:my_keyspace>

而且我认为这不是表名的简单拼写错误,因为我已经检查了十几次,但也是因为这个:

In [3]: sys_mgr = pycassa.system_manager.SystemManager(cassandra_ips[0])

In [4]: sys_mgr.get_keyspace_column_families('my_keyspace')
Out[4]: {}

为什么是{}

如果重要的话:

  • 表/列族是使用 CQL 创建的。
  • 该表当前为空。
  • 该表是使用以下粗略创建的:

    CREATE TABLE my_table (
      user_id int,
      year_month int,
      t timestamp,
      <tons of other attributes>
      PRIMARY KEY ((user_id, year_month), t)
    ) WITH compaction =
        { 'class' : 'LeveledCompactionStrategy', 'sstable_size_in_mb' : 160 };
    

【问题讨论】:

  • 你使用的是什么版本的 casssandra?
  • @Drewness Cassandra 2.0.5
  • my_table 是使用紧凑型存储创建的吗?
  • @Drewness 我没有具体说明。 (至少,我认为我没有这样做。)我添加了大致用于创建表的 CQL 语句,省略了一些列。
  • 试试) WITH COMPACT STORAGE;

标签: python cassandra pycassa


【解决方案1】:

为了通过 pycassa 等 thrift API 访问 CQL3 数据库,必须使用紧凑型存储创建表。

CREATE TABLE my_table (
...
) WITH COMPACT STORAGE;

关于主键,来自docs

使用紧凑存储指令可防止您定义更多 比不属于复合主键的一列。

目前您使用的是composite partition key,但启用紧凑存储会限制我们使用复合 分区键。因此,您将不必将其限制为单列,它只需成为复合键的一部分。最后一个reference

【讨论】:

  • 我的其余列​​不是我的数据的键的一部分(它们只是普通属性):你是什么意思它们可以用作键的一部分?
  • 当前您使用的是复合键 ((user_id, year_month), t)。所以你可以排除时间戳将它变成一个复合键,比如(user_id, year_month, t)
【解决方案2】:

这种情况也可能发生在创建以大写命名的 CF 之后: https://docs.datastax.com/en/cql/3.0/cql/cql_reference/ucase-lcase_r.html

我有这样奇怪的命名空间结构和引用的 CF:

cqlsh:testkeyspace> DESC TABLES;

"Tabletest"  users  "PlayerLastStats"

我在 pycassa system_manager.create_column_family(...) 上遇到错误,但前提是这里有 column_validation_classes 参数

pycassa.cassandra.ttypes.NotFoundException: NotFoundException(_message=None, why='Column family NewTable not found.')

重命名为小写后,所有表格看起来都不错

cqlsh:testkeyspace> DESC TABLES;

tabletest  newtable  users  playerlaststats

【讨论】:

    猜你喜欢
    • 2013-07-08
    • 2014-03-03
    • 1970-01-01
    • 2011-01-26
    • 2014-02-27
    • 1970-01-01
    • 2013-08-17
    • 1970-01-01
    • 2013-01-24
    相关资源
    最近更新 更多