本文主要为您介绍如何在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; }