Appengine上使用MapReduce的动态查询语言



我们目前有一个拥有数百万实体的appengine应用程序(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")

因此,现在在/mapdreduce中,您可以选择映射器Query on Actors并向其传递一些过滤器。

相关内容

  • 没有找到相关文章

最新更新