본문 바로가기

Cassandra

Cassandra - Python 2.X (pycassa)를 이용하여 데이터 조회

준비물 : python 2.x 버전 설치, pycassa 설치 (기타 필요한 thrift, cassandra 가 포함되어 있음)


먼저 Python 3.X 에서 진행하려 했으나, 아직 thrift, pycassa... 이런 라이브러리들이 3버전을 지원하지 않아 실패함


결국 2.X 버전을 추가로 설치하여 작업 진행



예제 소스 (구지 설명하는것보다 예제를 보는편이 더 빠를듯)



# -*- coding: utf-8 -*-
# 위 코드는 한글을 쓰기위한 코드

from pycassa import ConnectionPool
from pycassa.columnfamily import ColumnFamily
from pycassa.cassandra.ttypes import ConsistencyLevel
from cassandra.Cassandra import IndexExpression
from cassandra.Cassandra import IndexOperator
from cassandra.Cassandra import IndexClause

if __name__ == '__main__':
#  connection pool 생성
    pool = ConnectionPool('Hotelier', ['localhost:9160'])

#  칼럼패밀리 생성
    HOTEL = ColumnFamily(pool, 'Hotel')
    POI = ColumnFamily(pool, 'PointOfInterest')
    
#  조회 조건을 생성하고 index cluse 에 추가
    index1 = IndexExpression('state', IndexOperator.EQ, 'NY')
    index_clause = IndexClause([index1], "")

#  조회(조회 조건이 있는경우)
    keys = HOTEL.get_indexed_slices(index_clause = index_clause, read_consistency_level = ConsistencyLevel.ONE)

#  결과는 (row_key, {column : value}) 형태로 리턴됨
    for keySlice in keys:
        print '==============' + keySlice[0] + '=============='
        print 'address : ' + keySlice[1]['address']
        print 'city : ' + keySlice[1]['city']
        print 'name : ' + keySlice[1]['name']
        print 'phone : ' + keySlice[1]['phone']
    
    
#  조회(전체 조회)
    pois = POI.get_range(read_consistency_level = ConsistencyLevel.ONE, filter_empty = True)

#  결과는 (row_key, {super column : {column : value}, super column {column : value}, ...} 형태로 리턴됨
    for poi in pois:
        print '==============' + poi[0] + '=============='
        
        for poi_superColumn in poi[1].keys():
             print '--------' + poi_superColumn + '--------'
             if poi[1][poi_superColumn].get('desc'): print poi[1][poi[1].keys()[0]].get('desc')
             if poi[1][poi_superColumn].get('phone'): print poi[1][poi[1].keys()[0]].get('phone')

반응형