Создайте 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