Como faço para obter todas as chaves que são armazenados na família coluna Cassandra com pycassa?

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

  •  19-09-2019
  •  | 
  •  

Pergunta

é qualquer um que tem experiência de trabalho com pycassa tenho uma dúvida com ele. Como faço para obter todas as chaves que são armazenadas no banco de dados?

bem neste pequeno trecho precisamos dar as chaves, a fim de obter as colunas associadas (aqui estão as chaves 'foo' e 'bar'), que é bom, mas a minha obrigação é fazer com que todas as chaves (apenas chaves ) de uma só vez como lista Python ou estrutura de dados semelhante.

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

Graças.

Foi útil?

Solução

tentar:

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

mais coisas boas aqui: http://github.com/vomjom/pycassa

Outras dicas

Você pode tentar: 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])

Obter um iterador sobre linhas em uma especificada gama chave.

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

pequena melhoria na solução de Santhosh

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

Se você se preocupa com ordem:

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

get_range retorna um gerador. Podemos criar um dicionário a partir do gerador e obter as chaves a partir daí.

COLUMN_COUNT = 0 limita os resultados para o row_key. No entanto, porque estes resultados não têm colunas também precisamos filter_empty.

filter_empty = False nos permitirá obter os resultados. No entanto linhas e fantasmas alcance vazio pode ser incluído no nosso resultado agora.

Se não se importa mais sobrecarga, ficando apenas a primeira coluna irá resolver as linhas vazias e fantasmas alcance.

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

Há um problema com de Santhosh e respostas kzarns, como você está trazendo na memória um potencial enorme dict que são imediatamente descartar. Uma abordagem melhor seria usar compreensões lista para isso:

keys = [c[0] for c in cf.get_range(column_count=0, filter_empty=False)]

Este itera sobre o gerador retornado por get_range, mantém a chave na memória e armazena a lista.

Se a lista de chaves, onde também potencialmente muito grande para mantê-lo na memória de uma só vez e você só precisa iterate uma vez, você deve usar um gerador de expressão em vez de uma compreensão da lista :

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!
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top