关于代码实验室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)构建一个表会很好,但我也看不到如何这样做?
答案 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)]
}