Как мне получить все ключи, хранящиеся в семействе столбцов Cassandra, с помощью pycassa?

StackOverflow https://stackoverflow.com/questions/2430539

  •  19-09-2019
  •  | 
  •  

Вопрос

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

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

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

Спасибо.

Это было полезно?

Решение

пытаться:

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

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

Другие советы

Можешь попробовать: 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])

Получите итератор над рядами в указанном диапазоне ключей.

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

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

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

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

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

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

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

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

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

dict(cf.get_range(column_count=1)).keys()

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

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!
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top