Сгенерировать UUID для Cassandra в Python

Хех, я использую

cf.insert(uuid.uuid1().bytes_le, {'column1': 'val1'}) (пикасса)

создать TimeUUID для Cassandra, но получить ошибку

InvalidRequestException: 
InvalidRequestException(why='UUIDs must be exactly 16 bytes')

Это не работает с

uuid.uuid1()
uuid.uuid1().bytes
str(uuid.uuid1())

либо.

Как лучше всего создать допустимый TimeUUID для использования с флагом CompareWith="TimeUUIDType"?

Спасибо,
Хенрик


person Henrik P. Hessel    schedule 13.07.2010    source источник


Ответы (2)


Вы должны убедиться, что ваша схема семейства столбцов принимает UUID в качестве ключа. Ваш код будет работать с семейством столбцов, созданным как (с использованием cassandra-cli):

create column family MyColumnFamily
  with column_type = 'Standard'
  and comparator = 'AsciiType'
  and default_validation_class = 'BytesType'
  and key_validation_class = 'TimeUUIDType';

Чтобы добавить значения в этот CF:

import pycassa
pool = pycassa.ConnectionPool('Keyspace1')
cf = pycassa.ColumnFamily(pool, 'MyColumnFamily')
cf.insert(uuid.uuid1(), {'column1': 'val1'})
person Carlo Pires    schedule 03.01.2012

Похоже, вы используете uuid в качестве ключа строки, а не имя столбца.

Атрибут 'compare_with: TimeUUIDType' указывает, что имена столбцов будут сравниваться с использованием TimeUUIDType, т. е. сообщает Cassandra, как сортировать столбцы для операций нарезки

Рассматривали ли вы возможность использования какого-либо из высокоуровневых клиентов Python? Например. Tradedgy, Лентяй, Telephus или Пикасса

person Schildmeijer    schedule 13.07.2010
comment
Я должен был упомянуть, что я использую pycassa, но, похоже, я должен сам создавать timeuuids. - person Henrik P. Hessel; 13.07.2010
comment
Я не понимаю, как это отвечает на вопрос. У меня такая же проблема, можно подробнее? - person Nixuz; 28.01.2011
comment
вы знаете разницу между ключами и именами столбцов? - person Schildmeijer; 28.01.2011