本文主要为您介绍如何在Grid模型的客户端查询多维网格数据。

数据查询

GridDataFetcher支持对五维数据进行任意维度的查询。第一维是变量维,通过setVariablesToGet接口设置要读取哪些变量,其余四维通过设置起始点(origin)和读取的大小(shape)就可以实现任意维度读取。

示例代码:
    public Array queryByTableStore(TableStoreGrid grid, String dataSetId, String variable, int[] origin, int[] shape) throws Exception {
        GridDataFetcher fetcher = grid.getDataFetcher(grid.getDataSetMeta(dataSetId));
        fetcher.setVariablesToGet(Arrays.asList(variable));
        fetcher.setOriginShape(origin, shape);
        Grid4D grid4D = fetcher.fetch().getVariable(variable);
        return grid4D.toArray();
    }

多条件检索数据集

对元数据表建立多元索引后,您可以通过各种组合条件来进行数据集检索,查询出符合条件的数据集。多元索引是气象管理系统实现的主要组件。

假设我们要查询已经完成入库的、来源为ECMWF(欧洲中期天气预报中心)或者NMC(全国气象中心)的气象预报,并按照以下条件进行查询,查询结果按照创建时间从新到老排序。
  • 创建时间为最近一天
  • 精度为1km
示例代码
  • 查询条件
    (status == DONE)
    and (create_time > System.currentTimeMillis - 86400000)
    and (source == "ECMWF" or source == "NMC") and (accuracy == "1km")
  • 执行代码
    public QueryGridDataSetResult queryDataSet(TableStoreGrid grid) throws Exception {
        QueryGridDataSetResult result = grid.queryDataSets(
                ExampleConfig.GRID_META_INDEX_NAME,
                QueryBuilder.and()
                        .equal("status", "DONE")
                        .greaterThan("create_time", System.currentTimeMillis() - 86400000)
                        .equal("accuracy", "1km")
                        .query(QueryBuilder.or()
                                .equal("source", "ECMWF")
                                .equal("source", "NMC")
                                .build())
                        .build(),
                new QueryParams(0, 10, new Sort(Arrays.<Sort.Sorter>asList(new FieldSort("create_time", SortOrder.DESC)))));
        return result;
    }