Генерация 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