2010-07-13 3 views
10

Хех, Я используюГенерировать 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"?

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

ответ

4

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

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

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

«compare_with: TimeUUIDType» атрибут указывает, что имена столбцов будут сравниваться с использованием TimeUUIDType, то есть он tells Cassandra how to sort the columns for slicing operations

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

+0

я уже упоминал, что я usig pycassa, но кажется, что я должен сам создать тайм-ауй. –

+0

такой же ошибка. возможно, это проблема с pycassa –

+1

еще раз. и для вашего сообщения icq тоже :) –

Смежные вопросы