Pycassa와 함께 Cassandra 칼럼 제품군에 저장된 모든 키를 어떻게 얻습니까?
문제
함께 일한 경험이있는 사람이 있습니까? Pycassa 나는 그것에 대해 의심한다. 데이터베이스에 저장된 모든 키를 어떻게 얻습니까?
이 작은 스 니펫에서 우리는 연관된 열을 얻기 위해 키를 주어야합니다 (여기서 키는 'foo'와 'bar'입니다)는 괜찮지 만 요구 사항은 모든 키 (키)를 한 번에 가져 오는 것입니다. 파이썬 목록 또는 유사한 데이터 구조로.
cf.multiget(['foo', 'bar'])
{'foo': {'column1': 'val2'}, 'bar': {'column1': 'val3', 'column2': 'val4'}}
감사.
해결책
다른 팁
당신은 시도 할 수 있습니다: cf.get_range(column_count=0,filter_empty=False)
.
# Since get_range() returns a generator - print only the keys.
for value in cf.get_range(column_count=0,filter_empty=False):
print value[0]
get_range([start][, finish][, columns][, column_start][, column_finish][, column_reversed][, column_count][, row_count][, include_timestamp][, super_column][, read_consistency_level][, buffer_size])
지정된 키 범위에서 반복기를 오버로 가져옵니다.
Santhosh의 솔루션에 대한 약간의 개선
dict(cf.get_range(column_count=0,filter_empty=False)).keys()
주문에 관심이있는 경우 :
OrderedDict(cf.get_range(column_count=0,filter_empty=False)).keys()
get_range는 생성기를 반환합니다. 우리는 발전기에서 DITT를 만들고 그로부터 키를 얻을 수 있습니다.
column_count = 0 row_key로 결과를 제한합니다. 그러나이 결과에는 열이 없기 때문에 Filter_Empty도 필요합니다.
filter_empty = false를 사용하면 결과를 얻을 수 있습니다. 그러나 빈 행과 레인지 유령이 현재 결과에 포함될 수 있습니다.
더 많은 오버 헤드를 신경 쓰지 않으면 첫 번째 열만 받으면 빈 행과 범위 유령이 해결됩니다.
dict(cf.get_range(column_count=1)).keys()
문제가 있습니다 산토시 그리고 Kzarns ' 당신이 기억에 남을 때, 당신이 즉시 폐기 할 수있는 잠재적으로 큰 반드시. 더 나은 접근 방식은 이것에 대한 목록 이해를 사용하는 것입니다.
keys = [c[0] for c in cf.get_range(column_count=0, filter_empty=False)]
이것은 반환 된 발전기 위에 반복됩니다 get_range
, 키를 메모리에 유지하고 목록을 저장합니다.
키가 너무 커서 한 번에 메모리에 유지하기에는 키 목록을 한 번만 반복하면됩니다. 목록 이해 대신 생성기 표현식:
kgen = (c[0] for c in cf.get_range(column_count=0, filter_empty=False))
# you can iterate over kgen, but do not treat it as a list, it isn't!