Как получить все ключи, которые хранятся в семействе столбцов Cassandra с помощью pycassa? - PullRequest
6 голосов
/ 12 марта 2010

Есть ли у кого-то опыт работы с pycassa У меня есть сомнения в этом. Как получить все ключи, которые хранятся в базе данных?

хорошо, в этом небольшом фрагменте нам нужно дать ключи, чтобы получить связанные столбцы (здесь ключи 'foo' и 'bar'), это нормально, но я должен получить все ключи (только ключи ) сразу как список Python или аналогичная структура данных.

cf.multiget(['foo', 'bar'])
{'foo': {'column1': 'val2'}, 'bar': {'column1': 'val3', 'column2': 'val4'}}

Спасибо.

Ответы [ 5 ]

11 голосов
/ 30 марта 2010

попробуй:

    list(cf.get_range().get_keys())

больше хороших вещей здесь: http://github.com/vomjom/pycassa

5 голосов
/ 15 октября 2012

Вы можете попробовать: 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]
1 голос
/ 25 июля 2013

Незначительное улучшение решения Сантоша

dict(cf.get_range(column_count=0,filter_empty=False)).keys()

Если вы заботитесь о заказе:

OrderedDict(cf.get_range(column_count=0,filter_empty=False)).keys()

get_range возвращает генератор. Мы можем создать дикт из генератора и получить ключи от него.

column_count = 0 ограничивает результаты ключом row_. Однако, поскольку эти результаты не имеют столбцов, нам также нужен filter_empty.

filter_empty = False позволит нам получить результаты. Однако пустые строки и призраки диапазона могут теперь быть включены в наш результат.

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

dict(cf.get_range(column_count=1)).keys()
1 голос
/ 18 марта 2011

get_range([start][, finish][, columns][, column_start][, column_finish][, column_reversed][, column_count][, row_count][, include_timestamp][, super_column][, read_consistency_level][, buffer_size])

Получить итератор для строк в указанный диапазон клавиш.

http://pycassa.github.com/pycassa/api/pycassa/columnfamily.html#pycassa.columnfamily.ColumnFamily.get_range

0 голосов
/ 12 февраля 2015

Существует проблема с ответами и 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!
...