Skip to content

定制DataProvider

yzhang921 edited this page Oct 19, 2016 · 5 revisions

前面有介绍,即便是昂贵的商业BI套件想要囊括大数据时代所有的数据源连接都是不可能做到的,在NoSQL领域中,传统观念中的Schema可以通过不同的数据结构来实现,如散列表、数组、树、图等等,不同的人使用相同的NoSQL产品设计出来的Schema都可能千差万别,最熟悉这种存储结构的是用户自己,让用户找一个Java程序员写个Class连接自己的数据源却很容易做到的, 为此我们把这种需求开放给用户自己实现,我们的愿景是让用户在CBoard大架构下轻松的接入自己的各种数据源。
image

基本概念

术语 解释
DataProvider DataProvider是一个Java抽象类,定制的DataProvider需要继承这个类实现getData方法
DataSource DataProvider的实例,在前端界面对应数据源管理
DataQuery 调用getData方法获取数据,返回一个二维数据第一行为表头

Example

import com.adminboard.dataprovider.DataProvider;
import com.adminboard.dataprovider.annotation.DatasourceParameter;
import com.adminboard.dataprovider.annotation.ProviderName;
import com.adminboard.dataprovider.annotation.QueryParameter;

import java.util.Map;

/**
 * Created by zyong on 2016/9/27.
 */
@ProviderName(name = "MyDataProvider")
public class MyDataProvider  extends DataProvider {

    // **数据源管理** 页面 创建数据源的时候需要配置的参数
    @DatasourceParameter(label = "数据源参数", type = DatasourceParameter.Type.Input, order = 1)
    private String DS_PARAM_KEY = "param";


    // **图表设计**页面 读取数据接收参数
    @QueryParameter(label = "查询参数", type = QueryParameter.Type.Input, order = 1)
    private String QUERY_PARAM_KEY = "query";

    /**
     *
     * @param dataSource 参数Map
     * @param query 参数Map
     * @return
     * @throws Exception
     */
    @Override
    public String[][] getData(Map<String, String> dataSource, Map<String, String> query) throws Exception {
        // 获取data source 参数创建数据连接
        String param = dataSource.get(DS_PARAM_KEY);
        // TODO 利用接收到的DataSource配置参数创建DataSource连接,如:JDBC Connection,这个演示从内存返回数据,就不用创建连接了

        // 查询获取数据
        String queryParam = query.get(QUERY_PARAM_KEY);
        // 表头
        String[] header = {"D1", "D2", "D3", "M1", "M2"};
        String[] header2 = {"Dim1", "Dim2", "Dim3", "Measure1", "Measure2"};
        String[][] result = {
                "1".equals(queryParam) ? header : header2, // 第一行返回表头, 这里演示怎么和配置的查询前端参数交互切换表头
                {queryParam, "b1", "c1", "1", "2"},
                {queryParam, "b2", "c2", "13", "42"},
                {queryParam, "b1", "c3", "781", "52"},
                {queryParam, "b2", "c4", "17", "92"}
        };

        return result;
    }
}

数据源管理界面

查询交互

自定义的DataProvider中配置一个label = "查询参数"的查询参数,表头根据查询参数自动切换,当然真实应用中逻辑应该是接收查询参数,返回查询对应的数据

Clone this wiki locally