Redash 连接 DolphinDB 数据源

Redash 是一款开源的 BI 工具,提供了基于 Web 的数据库查询和数据可视化功能。DolphinDB 支持 HTTP 协议的 POSTGET 接口获取数据,所以可以使用 Redash 中对应的 JSONURL 两种数据源来连接 DolphinDB。

本文详细介绍在 Redash 中配置数据源及如何查询 DolphinDB 中的数据。

1. 使用 JSON 数据源连接 DolphinDB

Redash 当前仅在线(SAAS)版本中支持 JSON 数据源,因此使用在线版本的用户,可以选择这种连接方案,这种方案需要 DolphinDB 也能够通过外网访问。 要使用 Redash 在线版本,需要先到 redash 官方网站 注册并登录。

在首页上可以选择创建数据源,按如下步骤进行配置:

  • 选择建立新的数据源


    image
  • 选择 JSON 数据源


    image
  • 在 Name 里配置数据源名称


    image

    然后通过 Create 按钮,创建一个 Query:


    image

JSON 数据源需要使用 yaml 格式编辑,

  • DolphinDB 接口需要 query 中包含基本的三种元素url, method, json
    • url:接受数据的地址,即 DolphinDB 数据节点,如http://192.168.1.113:8848
    • method:http 提交方式,JSON 接口必须使用 post 方式,method: "post"
    • json:提交的 JSON 数据,此处 DolphinDB 接口需要提供固定的 key 值 client,queries, 比如:{client:"redash","queries":"\[sql query]"},用户可以使用任意的 sql 语句来替换[sql query]部分。
    • query 部分整体 query 如下所示:
      	url: http://115.239.209.224:18531
      	method: "post"
      	json: {'client':'redash','queries':'select * from typeTable'}

2. 使用 URL 数据源连接 DolphinDB

Redash 的 URL 数据源不仅在线版本支持,在开源独立部署的版本上也可以支持。 因此,使用独立部署的用户可以通过这种方式来连接 DolphinDB。

连接和配置数据源的方式与 JSON 方式基本相同,在数据源选择时选择 URL 类型数据源,如下图:


image
  • 在 URL 中配置数据源名称和路径,URL Base path是获取数据的跟地址,配置成 DolphinDB 的数据节点 web 地址即可 image

  • 创建一个new query,在编辑区以 URL 参数字符串的形式输入查询内容,查询内容格式上有如下要求:

    • 子路径必须为 /json
    • query 参数必须包含:clientqueries 两个 key,其中 client 指定固定值为 redash
    • 完整的 query 内容示例如下:
    /json?client=redash&queries=select * from typeTable where id between (1..10) 

注意事项

由于 Redash 对 URL 方式的参数要进行编码校验,所以一些特殊字符需要手工编码才能通过校验,比如 query 中出现 ://,+,& 等字符,需要替换为 %3a%2f%2f,%2b,%26 才能通过校验。

例如,DolphinDB 中的分布式数据库路径 dfs://dbpath,需要用 URL 编码替换为 dfs%3a%2f%2fdbpath 才能通过 Redash 的校验,实际代码如下:

  • 需要提交的 query:

    /json?client=redash&queries=login('admin','123456');select avg(ofr-bid) from loadTable('dfs://TAQ','quotes') group by minute(time) as minute  
  • 实际写到 Redash 的编辑器中要替换为:

    /json?client=redash&queries=login('admin','123456');select avg(ofr-bid) from loadTable('dfs%3a%2f%2fTAQ','quotes') group by minute(time) as minute