1

关于这里的代码实验室,我们如何过滤 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 在非规范化数据模型上表现得更好,因此能够从多个数据存储实体类型 (JOIN) 构建一个表会很好,但我也看不出该怎么做?

4

1 回答 1

7

根据您的应用程序,您可以通过传递一个过滤器参数来解决此问题,该参数是“应用于查询的可选过滤器列表。每个过滤器都是一个元组:( <property_name_as_str>, <query_operation_as_str>, <value>.”

因此,在您的输入阅读器参数中:

"input_reader":{
          "entity_kind": entity_type,
          "filters": [("datastore_property", "=", 12345),
                      ("another_datastore_property", ">", 200)]
}
于 2012-08-07T18:24:51.553 回答