是否有一个元数据库 REST API 接受 MBQL/SQL 查询并返回原始数据?
我可以通过 API 在两步过程中执行 MBQL 查询,方法是执行通过元数据库 Web 应用程序 UI 创建问题的中间步骤,然后查询问题,但我还没有弄清楚如何在一个步骤中将 MBQL 与 REST API 相结合。
我想通过在 API 请求中使用 MBQL 而不是 UI 生成的问题来完成一些项目:
- 更好的版本管理,因为可以使用代码将 MBQL 查询签入源代码管理
- 更好的隔离,因为 API 调用将不依赖于可以更改的问题
以下是有关如何执行两步过程的一些信息。
两步流程
两步过程是:
- 使用 Web 应用创建 MBQL/SQL 元数据库问题
- 使用 REST API 查询通过卡片 API 在 Web 应用中创建的现有问题
步骤1(通过Web UI创建问题
登录网络应用程序,然后单击顶部菜单中的"新问题"按钮。
创建问题后,您将被定向到如下所示的URL,其中:question-id
是一个整数。
- Web UI 终结点:
GET /question/:question-id
记下此值,并在下一步的 API 中使用它。
注意:创建卡的替代方法是使用每个 YakovL 的
POST /api/card
API 端点。这在某些情况下可能很有用,因为 UI 问题/卡片是可取的,但我也试图避免首先创建创建卡片/问题,因为我不打算使用 Metabase UI 来使用它们。对我来说,避免使用卡片的原因包括需要执行额外的工作来验证卡片查询定义是否未更改,但仍在代码中使用 SQL 来创建卡片,并在 UI 中生成大量不需要的问题卡。
步骤 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 查询来直接执行此操作,而无需预先存在的问题/卡片?
通过原始 SQL 和 MBQL 进行查询都可以通过POST /api/dataset/
API 进行。终结点的文档提到了query
请求定义,但没有定义它。
我最终做了更多的研究,并在元数据库话语论坛上提问。以下示例由 sbelak 发布。
原始 SQL 查询
我能够使用 go-metabase SDK 成功进行本机 SQL 查询,以发出以下请求:
POST /api/dataset
Content-Type: application/json
X-Metabase-Session: <sessionId>
{
"database": 1,
"native": {
"query": "SELECT COUNT(*) FROM orders"
},
type: "native"
}
笔记:
POST /api/dataset
不会设置响应Content-Type
标头。- 有一个
POST /api/dataset/json
终结点,但它似乎不接受native
属性。 - 要设置
X-Metabase-Session
请参阅 github.com/goauth/metabase。
MBQL
POST /api/dataset
Content-Type: application/json
X-Metabase-Session: <sessionId>
{
"database": 1,
"type": "query",
"query": {
"source-table": 2,
"breakout": [
[
"binning-strategy", ["field-id", 14], "default"
]
],
"aggregation": [["avg", ["field-id", 17]]]
}
}
笔记:
- 要设置
X-Metabase-Session
请参阅 github.com/goauth/metabase。