¿Cómo consigo todas las llaves que están almacenados en la familia de columnas con Cassandra pycassa?

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

  •  19-09-2019
  •  | 
  •  

Pregunta

¿Hay alguien que tenga experiencia trabajando con pycassa Tengo una duda con él. ¿Cómo consigo todas las llaves que se almacenan en la base de datos?

bien en este pequeño fragmento que necesitamos para dar las claves a fin de obtener las columnas asociadas (aquí están las llaves 'foo' y 'valor'), que está muy bien, pero mi obligación es conseguir todas las llaves (sólo teclas ) a la vez como lista Python o estructura de datos similar.

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

Gracias.

¿Fue útil?

Solución

intento:

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

más cosas buenas aquí: http://github.com/vomjom/pycassa

Otros consejos

Puede probar: 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])

  

Obtener un iterador sobre las filas de una   especificado rango de teclas.

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

mejora menor en la solución de Santhosh

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

Si usted se preocupa por orden:

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

get_range devuelve un generador. Podemos crear un diccionario del generador y obtener las claves de eso.

COLUMN_COUNT = 0 Límites resultados a la row_key. Sin embargo, debido a que estos resultados no tienen columnas también necesitamos filter_empty.

filter_empty = False nos permitirá obtener los resultados. Sin embargo filas y fantasmas rango de vacío se pueden incluir en nuestro resultado ahora.

Si no nos importa más sobrecarga, obtener sólo la primera columna resolverá las filas vacías y variar fantasmas.

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

Hay un problema con de Santhosh y kzarns' respuestas, ya que usted está trayendo en memoria de una potencialmente enorme dict que usted va a desechar inmediatamente. Un mejor enfoque sería el uso de listas por comprensión para esto:

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

Este itera sobre el generador devuelto por get_range, mantiene la llave en la memoria y almacena la lista.

Si la lista de claves, donde también potencialmente demasiado grande para mantenerlo en la memoria de una sola vez y sólo se necesita iterar una vez, se debe utilizar un generador de expresión en lugar de una lista por comprensión :

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 bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top