2013-09-09 1 views
0

Я новичок в обеих технологиях, и я пытаюсь сделать следующее:Pycassa и Cassandra: делать выбор на основе столбцов только

  • выберите * из туЬаЫе где столбец = «col1» или столбец = «col2»

до сих пор документация говорит, что я должен использовать метод GET с помощью:

family.get('rowid') 

Но я не имею строки ID. Как выполнить указанный выше запрос?

Thanks

ответ

0

В общем, я думаю, что вы смешиваете две идеи. Запрос, который вы написали, написан на CQL, а Pycassa не поддерживает CQL (по крайней мере, насколько мне известно).

Однако, в любом случае, независимо от используемого интерфейса запроса, если вы не знаете ключ строки, вам нужно будет создать Secondary Indexes в запрошенных столбцах.

Вы можете сделать это в Pycassa, рассмотрим следующий фрагмент кода:

from pycassa.columnfamily import ColumnFamily 
from pycassa.pool import ConnectionPool 
from pycassa.index import * 
from pycassa.system_manager import * 

sys = SystemManager('192.168.56.110:9160') 

try: 
     sys.drop_keyspace('TestKeySpace') 
except: 
     pass 

sys.create_keyspace('TestKeySpace', SIMPLE_STRATEGY, {'replication_factor': '1'}) 
sys.create_column_family('TestKeySpace', 'mycolumnfamily') 

sys.alter_column('TestKeySpace', 'mycolumnfamily', 'column1', LONG_TYPE) 
sys.alter_column('TestKeySpace', 'mycolumnfamily', 'column2', LONG_TYPE) 

sys.create_index('TestKeySpace', 'mycolumnfamily', 'column1', value_type=LONG_TYPE, index_name='column1_index') 
sys.create_index('TestKeySpace', 'mycolumnfamily', 'column2', value_type=LONG_TYPE, index_name='column2_index') 

pool = ConnectionPool('TestKeySpace') 
col_fam = ColumnFamily(pool, 'mycolumnfamily') 

col_fam.insert('row_key0', {'column1': 10, 'column2': 20}) 
col_fam.insert('row_key1', {'column1': 20, 'column2': 20}) 
col_fam.insert('row_key2', {'column1': 30, 'column2': 20}) 
col_fam.insert('row_key3', {'column1': 10, 'column2': 20}) 

# OrderedDict([('column1', 10), ('column2', 20)]) 
print col_fam.get('row_key0') 

## Find using index: http://pycassa.github.io/pycassa/api/pycassa/ 
column1_expr = create_index_expression('column1', 10) 
column2_expr = create_index_expression('column2', 20) 

clause = create_index_clause([column1_expr, column2_expr], count=20) 

for key, columns in col_fam.get_indexed_slices(clause): 
     print "Key => %s, column1 = %d, column2 = %d" % (key, columns['column1'], columns['column2']) 

sys.close 

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