Генерация UUID для Кассандры в Python

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

cf.insert(uuid.uuid1().bytes_le, {'column1': 'val1'}) (Pycassa)

создать TimeUUID для Кассандры, но получаю ошибку

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

Не работает с

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

или.

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

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

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'})

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

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

Рассматривали ли вы использование любого из клиентов Python высокого уровня? Например, Tradedgy, Lazy Boy, Telephus или Pycassa

Другие вопросы по тегам