如何使用MapReduce API在映射到云存储之前过滤数据存储数据?

时间:2012-08-07 15:42:54

标签: google-cloud-datastore google-bigquery google-cloud-storage

关于代码实验室here,我们如何在mapreduce作业中过滤数据存储数据,而不是为某个实体类获取所有对象?

在下面的映射器管道定义中,唯一一个输入读取器参数是要处理的实体类型,我无法在InputReader类中看到其他类型为filter的参数可能有所帮助。

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)构建一个表会很好,但我也看不到如何这样做?

1 个答案:

答案 0 :(得分:7)

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

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

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