Comment puis-je obtenir toutes les clés qui sont stockés dans la famille de la colonne Cassandra avec pycassa?
Question
Quelqu'un est-il d'avoir une expérience de travail avec pycassa Je doute avec elle. Comment puis-je obtenir toutes les clés qui sont stockés dans la base de données?
bien dans ce petit bout, nous devons donner les clés afin d'obtenir les colonnes associées (ici les clés sont « foo » et « bar »), qui est très bien, mais mon exigence est d'obtenir toutes les clés (seules touches ) à la fois comme liste Python ou une structure de données similaire.
cf.multiget(['foo', 'bar'])
{'foo': {'column1': 'val2'}, 'bar': {'column1': 'val3', 'column2': 'val4'}}
Merci.
La solution
essayer:
list(cf.get_range().get_keys())
plus de bonnes choses ici: http://github.com/vomjom/pycassa
Autres conseils
Vous pouvez essayer: 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])
Obtenir un itérateur sur les lignes d'une gamme de clé spécifiée.
Amélioration mineure sur la solution de Santhosh
dict(cf.get_range(column_count=0,filter_empty=False)).keys()
Si vous vous souciez de commande:
OrderedDict(cf.get_range(column_count=0,filter_empty=False)).keys()
get_range renvoie un générateur. Nous pouvons créer un dict du générateur et obtenir les clés de cela.
COLUMN_COUNT = 0 résultats à la limite row_key. Cependant, ces résultats ont aucune colonne nous avons aussi besoin filter_empty.
filter_empty = False nous permettra d'obtenir les résultats. Cependant des lignes vides et les fantômes de gamme peuvent être inclus dans notre résultat maintenant.
Si nous ne nous dérange pas plus de frais généraux, obtenir que la première colonne résoudra les lignes vides et la gamme des fantômes.
dict(cf.get_range(column_count=1)).keys()
Il y a un problème avec de Santhosh et les réponses kzarns, que vous apportez à la mémoire d'un dict potentiellement énorme que vous immédiatement mise au rebut. Une meilleure approche serait en utilisant la liste compréhensions pour cela:
keys = [c[0] for c in cf.get_range(column_count=0, filter_empty=False)]
itère sur le générateur retourné par get_range
, maintient la clé dans la mémoire et stocke la liste.
Si la liste des clés où aussi potentiellement trop grand pour le garder en mémoire tout à la fois et il vous suffit de itérer une fois, vous devez utiliser un expression du générateur au lieu d'une compréhension de la liste :
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!