java在 Appengine 上使用 MapReduce 的动态查询语言
我们目前有一个包含数百万个实体的应用引擎应用程序 (java)。我们使用 map reduce 框架 + cron 来为仪表板等提供动力,进行大量报告。
但是,我们希望能够对整个数据集运行即席查询。我们现在这样做的方式是编写 mapreduce、部署、运行 mapreduce,然后查看结果。我们不想执行部署步骤。也就是说,只需转到某个管理界面,指定我们的查询和一些自定义代码来进行后处理,然后查看结果。如果我们不必每次都进行部署,我们会做更多的即席查询。
有没有人做过这样的事情?你学到了什么?有什么好的策略吗?
请您参考如下方法:
这是一个 Python 示例,但我很确定您可以使用 Java 执行相同的操作。如果您只想通过过滤器对实体进行计数,这是一种解决方案。您可以创建一个映射器来处理来自 mapreduce.yaml 的过滤器
- name: Query on Actors
mapper:
handler: mapper_api.query_process
input_reader: google.appengine.ext.mapreduce.input_readers.DatastoreInputReader
params:
- name: entity_kind
value: common.models.Actor
- name: filters
value: age<27, name=toto
然后在您的 mapper_api.py 中,您必须展开并处理每个过滤器:
def query_process(entity):
ctx = context.get()
pms = ctx.mapreduce_spec.mapper.params
filters = pms['filters']
if match(entity, filters):
yield op.counters.Increment("matched")
所以现在在您的/mapreduce 中您可以选择映射器 Actors 查询 并将一些过滤器传递给它。
1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。



