Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在pycassa中找不到Cassandra列族_Python_Cassandra_Pycassa - Fatal编程技术网

Python 在pycassa中找不到Cassandra列族

Python 在pycassa中找不到Cassandra列族,python,cassandra,pycassa,Python,Cassandra,Pycassa,我正在尝试连接到Cassandra以进行大容量插入。然而,当我尝试连接时,我得到了一个错误 我正在使用的代码: from pycassa import columnfamily from pycassa import pool cassandra_ips = ['<an ip addr>'] conpool = pool.ConnectionPool('my_keyspace', cassandra_ips) colfam = columnfamily.ColumnFamily(

我正在尝试连接到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')
列族肯定存在:

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 };
    
    创建表格我的表格(
    用户id int,
    年/月整数,
    t时间戳,
    主键((用户id,年/月),t)
    )压实=
    {'class':'LeveledCompactionStrategy','sstable_size_in_mb':160};
    

为了通过节俭API(如Pycasa)访问CQL3数据库,必须使用压缩存储创建表

CREATE TABLE my_table (
...
) WITH COMPACT STORAGE;
对于主键,从:

使用compact storage指令会阻止您定义更多 多个列不是复合主键的一部分


目前您正在使用,但启用压缩存储限制了我们使用复合分区密钥。因此,您将而不是必须将其限制为单个列,它必须是复合键的一部分。最后一个。

在创建以大写字母命名的CF后,也可能出现这种情况:

我的命名空间结构非常奇怪,引用了CFs:

cqlsh:testkeyspace> DESC TABLES;

"Tabletest"  users  "PlayerLastStats"
我在pycassa
系统管理器上出错。请创建列族(…)
,但前提是这里有列验证类参数

pycassa.cassandra.ttypes.NotFoundException: NotFoundException(_message=None, why='Column family NewTable not found.')
重命名为小写后,所有表看起来都很好

cqlsh:testkeyspace> DESC TABLES;

tabletest  newtable  users  playerlaststats

您使用的是什么版本的Cassandra?@Drowness Cassandra 2.0.5是用紧凑型存储创建的
my_表
?@Drowness我没有指定。(至少,我不认为我这样做了。)我添加了用于创建表的CQL语句,省略了一些列我的列的其余部分不是我的数据的键的一部分(它们只是普通属性):你怎么说它们可以用作键的一部分?目前你使用的是复合键,
((用户id,年月),t)
。因此,您可以排除时间戳,或者将其设置为一个复合键,如
(user\u id,year\u month,t)
cqlsh:testkeyspace> DESC TABLES;

tabletest  newtable  users  playerlaststats