2010-10-23 11 views
4

J'essaie d'utiliser AppEngine-MapReduce. Je comprends comment effectuer une opération sur toutes les entités d'un entity_kind, mais quel est le moyen le plus simple de ne fonctionner que sur des entités sur une plage de données lorsque l'entité a un attribut date? Existe-t-il un moyen simple de transmettre des paramètres au mappeur?En utilisant AppEngine-MapReduce sur Google App Engine, quel est le moyen le plus simple d'analyser des entités pour une période donnée?

Par exemple, si je ne voulais supprimer les entités sur lesquelles:

entity.created >= start and entity.created < stop 

class Entity(db.Model): 
    created = db.DateTimeProperty() 

from mapreduce import operation as op 
def process(entity): 
    yield op.db.Delete(entity) 

Répondre

3

il n'y a actuellement aucun moyen de itérer sur une requête dans un MapReduce - vous devez itérer sur toutes les entités du genre donné. Au lieu de cela, vous devez appliquer le filtre dans la fonction de carte et supprimer uniquement les entités correspondantes.

+0

Et si je créais un modèle simple appelé DateRange où chaque entité avait DateRange.start et DateRange.stop? Puis-je effectuer une réduction de la carte sur toutes les entités DateRange et récupérer mes autres modèles de entity.start à entity.stop. Par exemple: processus def (entité): someEntities = SomeModel.all(). Filter ('date> =', entity.start) .filter ('date <', entity.stop) Il semble que ce soit le moyen le plus simple regarder des plages de dates spécifiques en utilisant l'implémentation actuelle. Merci d'avance Nick. – Chris

+2

Bien sûr, mais vous répliquez ensuite la majeure partie de la logique de fragmentation de mapreduce pour générer vos plages de dates. Si vous souhaitez simplement supprimer des enregistrements correspondant à certains critères, vous pouvez envisager d'utiliser des curseurs en conjonction avec les requêtes key_only et la file d'attente de tâches. –

+0

Je suis d'accord. La suppression d'enregistrements n'était qu'un simple exemple pour voir si je pouvais effectuer des opérations sur des plages de dates spécifiques plutôt que sur toutes les entités. – Chris

0

Depuis commit324, il est possible d'utiliser des filtres de requête limités en entrée.

Si cela ne vous permet pas de faire ce que vous voulez il y a un small extension que vous voudrez peut-être essayer.