Пикасса и Кассандра: выбор только по столбцам

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

  • выберите * из mytable, где столбец = "col1" или столбец = "col2"

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

 family.get('rowid')

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

Спасибо


person Paul    schedule 09.09.2013    source источник


Ответы (1)


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

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

Вы можете сделать это в 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

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

person lpiepiora    schedule 09.09.2013