1

Что касается библиотеки кода here, как мы можем фильтровать данные хранилища данных в заданиях mapreduce, а не извлекать все объекты для определенного типа сущности?Как фильтровать данные хранилища данных перед сопоставлением с облачным хранилищем с использованием API MapReduce?

В приведенном ниже определении конвейерного модуля единственным параметром считывателя ввода является вид объекта для обработки, и я не вижу других параметров фильтра типов в классе InputReader, которые могли бы помочь.

output = yield mapreduce_pipeline.MapperPipeline(
    "Datastore Mapper %s" % entity_type, 
    "main.datastore_map", 
    "mapreduce.input_readers.DatastoreInputReader", 
    output_writer_spec="mapreduce.output_writers.FileOutputWriter", 
    params={ 
     "input_reader":{ 
      "entity_kind": entity_type, 
      }, 
     "output_writer":{ 
      "filesystem": "gs", 
      "gs_bucket_name": GS_BUCKET, 
      "output_sharding":"none", 
      } 
     }, 
     shards=100) 

Поскольку Google BigQuery играет лучше с unormalized модели данных, было бы неплохо, чтобы иметь возможность построить одну таблицы из нескольких видов хранилища сущностей (объединения), но я не могу видеть, как сделать это, а?

ответ

7

В зависимости от вашего приложения, вы можете быть в состоянии решить эту проблему путем передачи параметра фильтра, который является «дополнительный список фильтров для применения к запросу Каждый фильтр представляет собой кортеж:.. (<property_name_as_str>, <query_operation_as_str>, <value>»

Так в ваших входных параметров чтения:.

"input_reader":{ 
      "entity_kind": entity_type, 
      "filters": [("datastore_property", "=", 12345), 
         ("another_datastore_property", ">", 200)] 
} 
+0

Спасибо Michael 1/Вы должны выполнить команду 'Svn update' на map_reduce поскольку, согласно бревнами СВН, эта функция была введена с 1 августа – Charles

+0

2/It. кажется, прослушивается прямо сейчас, так как ваш список кортежей преобразуется в список списков, создающих BadRead Исключение erParamsError ** Фильтр должен быть кортежем ** (т.е. '[(" datastore_property "," = ", 12345), (" another_datastore_property ","> ", 200)]' становится '[[" datastore_property "," = ", 12345], [" another_datastore_property ","> ", 200]]'). Все еще рыть, чтобы найти, почему. – Charles

+0

Кажется, что [эта проблема] (http://code.google.com/p/appengine-mapreduce/issues/detail?id=138&q=filter&colspec=ID%20Type%20Status%20Priority%20Component%20Owner%20Summary) уже было сообщено фактически – Charles