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

Cha*_*les 1 google-cloud-storage google-bigquery google-cloud-datastore

关于此处的代码实验室,我们如何在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)
Run Code Online (Sandbox Code Playgroud)

由于Google BigQuery在非规范化数据模型中表现更好,因此能够从多个数据存储区实体类型(JOIN)构建一个表会很好,但我也看不到如何这样做?

Mic*_*hri 7

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

所以,在你的输入阅读器参数中:

"input_reader":{
          "entity_kind": entity_type,
          "filters": [("datastore_property", "=", 12345),
                      ("another_datastore_property", ">", 200)]
}
Run Code Online (Sandbox Code Playgroud)