Семейство столбцов 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(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 };
    

person Thanatos    schedule 07.03.2014    source источник
comment
Какую версию кассандры вы используете?   -  person Drewness    schedule 08.03.2014
comment
@Дрюнесс Кассандра 2.0.5   -  person Thanatos    schedule 08.03.2014
comment
Был ли my_table создан с компактным хранилищем?   -  person Drewness    schedule 08.03.2014
comment
@Drewness Я не уточнил это. (По крайней мере, я так не думаю.) Я добавил оператор CQL, примерно используемый для создания таблицы, опустив несколько столбцов.   -  person Thanatos    schedule 08.03.2014
comment
Попробуйте с ) WITH COMPACT STORAGE;   -  person Drewness    schedule 08.03.2014
comment
@Drewness Это работает, и это отображается в pycassa. Однако моя первая попытка не удалась из-за плохого запроса: КОМПАКТНОЕ ХРАНИЛИЩЕ с составным ПЕРВИЧНЫМ КЛЮЧОМ допускает не более одного столбца, не являющегося частью ПЕРВИЧНОГО КЛЮЧА (получено: ‹список моих столбцов›) — значит ли это, что я могу использовать только один столбец? (Мне нужно разбить все мои столбцы на отдельные таблицы?)   -  person Thanatos    schedule 08.03.2014
comment
Да, частично. Я напишу все это в ответ.   -  person Drewness    schedule 08.03.2014
comment
@Thanatos, вам может быть интересно использовать этот драйвер python, который лучше подходит (имо и предвзято ) для текущих версий C*.   -  person Alex Popescu    schedule 08.03.2014


Ответы (2)


Чтобы получить доступ к базам данных CQL3 через экономичный API, такой как pycassa, таблицы должны быть созданы с использованием компактного хранилища.

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

Что касается первичных ключей, из документов:

Использование директивы compact storage не позволяет вам определить более одного столбца, который не является частью составного первичного ключа.

В настоящее время вы используете ключ составного раздела но включение компактного хранилища ограничивает нас использованием составного ключа раздела. Таким образом, вам не нужно ограничивать его одним столбцом, он просто должен быть частью составного ключа. Последний справочный материал.

person Drewness    schedule 07.03.2014
comment
Остальные мои столбцы не являются частью ключа к моим данным (это просто обычные атрибуты): как вы имеете в виду, что их можно использовать как часть ключа? - person Thanatos; 08.03.2014
comment
В настоящее время вы используете составной ключ ((user_id, year_month), t). Таким образом, вы можете исключить временную метку или превратить ее в составной ключ, например (user_id, year_month, t). - person Drewness; 08.03.2014

Этот случай может произойти и после создания 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
person antreantre    schedule 01.03.2016