Come posso ottenere tutte le chiavi archiviate nella famiglia di colonne Cassandra con pycassa?

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

  •  19-09-2019
  •  | 
  •  

Domanda

C'è qualcuno che ha esperienza di lavoro con pycassa Ho un dubbio a riguardo.Come posso ottenere tutte le chiavi archiviate nel database?

beh in questo piccolo frammento dobbiamo fornire le chiavi per ottenere le colonne associate (qui le chiavi sono 'foo' e 'bar'), va bene ma il mio requisito è ottenere tutte le chiavi (solo chiavi) contemporaneamente come elenco Python o struttura dati simile.

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

Grazie.

È stato utile?

Soluzione

Prova:

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

roba più bene qui: http://github.com/vomjom/pycassa

Altri suggerimenti

Si può provare: 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])

  

Ottenere un iteratore sopra le righe in un   key range specificato.

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

miglioramento Minore sulla soluzione di Santhosh

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

Se vi preoccupate per ordine:

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

get_range restituisce un generatore. Siamo in grado di creare un dict dal generatore e ottenere le chiavi da questo.

COLUMN_COUNT = 0 limita risultati al row_key. Tuttavia, poiché questi risultati non hanno colonne abbiamo anche bisogno filter_empty.

filter_empty = False ci permetterà di ottenere i risultati. Tuttavia righe e fantasmi campo a vuoto può essere incluso nel nostro risultato ora.

Se non ci importa di più in testa, ottenendo solo la prima colonna risolverà le righe vuote e variare i fantasmi.

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

C'è un problema con Quello di Santhosh E kzarns' risposte, mentre stai portando in memoria un detto potenzialmente enorme che stai immediatamente scartando.Un approccio migliore sarebbe utilizzare le comprensioni delle liste per questo:

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

Questo scorre sul generatore restituito da get_range, mantiene la chiave in memoria e memorizza la lista.

Se l'elenco delle chiavi è potenzialmente troppo grande per tenerlo in memoria tutto in una volta e devi ripetere solo una volta, dovresti usare un espressione del generatore invece di una comprensione di 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!
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top