Создайте UUID для Cassandra в Python

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

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

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

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

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

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

либо.

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

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

Ответ 1

Вы должны убедиться, что ваша схема семейства столбцов принимает 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'})

Ответ 2

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

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

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