私は両方のテクノロジーに不慣れで、次のことをしようとしています:
- select * from mytable where column = "col1" または column="col2"
これまでのところ、ドキュメントには、次を使用して get メソッドを使用する必要があると記載されています。
family.get('rowid')
しかし、私は行IDを持っていません。上記のクエリを実行するにはどうすればよいですか?
ありがとう
一般的に、あなたは2つのアイデアを混ぜ合わせていると思います。あなたが書いたクエリは 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
ただし、行キーを使用してデータをクエリできるようにデータを設計することが可能かどうかを考えることができます。