是否可以通过REST API从Metabase MBQL查询中获取原始数据?

时间:2018-05-31 08:40:08

标签: sql rest metabase

是否有采用MBQL / SQL查询并返回原始数据的Metabase REST API?

我可以通过API执行MBQL查询,通过Metabase网络应用UI创建问题,然后查询问题的中间步骤,通过两步流程执行MBQL查询,但我还没有想到怎么做只需一步即可将MBQL与REST API结合使用。

我想通过在API请求中使用MBQL而不是UI生成的问题来完成一些项目:

  1. 更好的版本管理,因为可以使用代码
  2. 将MBQL查询检入源代码管理
  3. 更好的隔离,因为API调用不会依赖于可以更改的问题
  4. 以下是有关如何执行两步流程的一些信息。

    两步流程

    两步过程是:

    1. 使用网络应用程序创建MBQL / SQL元数据库问题
    2. 使用REST API查询使用Card API在Web应用程序中创建的现有问题
    3. 步骤1)通过Web UI创建问题

      登录网络应用并点击"新问题"顶部菜单中的按钮。

      创建问题后,您将被定向到以下网址,其中:question-id是整数。

      • Web UI端点:GET /question/:question-id

      请注意此值,并在下一步中将其用于API。

      步骤2)问题数据的REST API

      API使用术语" card"对于Web UI"问题"对象,因此对以下Card API进行API调用:

      • API端点:POST /api/card/:card-id/query/:export-format

      在此网址中:

      • :card-id是来自网络用户界面网址的:question-id
      • :export-format可以是json或其他格式

      API文档中提供了有关API的更多信息:

      https://github.com/metabase/metabase/blob/master/docs/api-documentation.md

      问题

      有没有办法直接通过在没有预先存在的问题/卡片的情况下在API请求中发送MBQL查询来直接执行此操作?

1 个答案:

答案 0 :(得分:0)

通过原始SQL和MBQL进行查询都可以通过POST /api/dataset/ API进行。端点的文档中提到了query请求定义,但未定义。

我最终做了更多研究,并在Metabase Discourse论坛上提问。以下示例由sbelak发布。

原始SQL查询

我能够使用go-metabase SDK成功地进行本机SQL查询。

POST /api/dataset
Content-Type: application/json

{
  "database": 1,
  "native": {
    "query": "select count(*) from ORDERS"
  },
  type: "native"
}
  

注意:

     
      
  1. POST /api/dataset未设置响应Content-Type标头。
  2.   
  3. 有一个POST /api/dataset/json端点,但是似乎不接受native属性。
  4.   

MBQL

POST /api/dataset
Content-Type: application/json

{
  "database": 1,
  "type": "query",
  "query": {
    "source-table": 2, 
    "breakout": [
      [
        "binning-strategy", ["field-id", 14], "default"
      ]
    ],
    "aggregation": [["avg", ["field-id", 17]]]
  }
}