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

问题描述 投票:3回答:1

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

我可以通过API执行MBQL查询,分两步完成通过Metabase Web应用UI创建问题的中间步骤,然后查询问题,但我还没有想到如何将MBQL与REST相结合API只需一步。

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

  1. 更好的版本管理,因为可以使用代码将MBQL查询检入源代码管理
  2. 更好的隔离,因为API调用将不依赖于可以改变的问题

以下是有关如何执行两步流程的一些信息。

两步流程

这两步过程是:

  1. 使用Web应用程序创建MBQL / SQL元数据库问题
  2. 使用REST API查询使用Card API在Web应用程序中创建的现有问题

步骤1)通过Web UI创建问题

登录Web应用程序,然后单击顶部菜单中的“新问题”按钮。

一旦你的问题被创建,你将被引导到如下的URL,其中:question-id是一个整数。

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

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

步骤2)问题数据的REST API

API对Web UI“问题”对象使用术语“卡”,因此对以下Card API进行API调用:

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

在此网址中:

  • :card-id是来自Web UI URL的:question-id
  • :export-format可以是json或其他格式

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

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

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

sql rest metabase
1个回答
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. 有一个POST /api/dataset/json端点,但似乎不接受native属性。

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]]]
  }
}
最新问题
© www.soinside.com 2019 - 2024. All rights reserved.