sql - 是否可以通过 REST API 从 Metabase MBQL / SQL 查询中获取原始数据?
问题描述
是否有接受 MBQL/SQL 查询并返回原始数据的 Metabase REST API?
我可以通过 API 在两步过程中执行 MBQL 查询,方法是执行通过 Metabase Web 应用程序 UI 创建问题的中间步骤,然后查询问题,但我还没有想出如何将 MBQL 与 REST 结合起来API 一步到位。
我想通过在 API 请求中使用 MBQL 而不是 UI 生成的问题来完成一些项目:
- 更好的版本管理,因为可以使用代码将 MBQL 查询签入源代码控制
- 更好的隔离,因为 API 调用不会依赖于可以改变的问题
以下是有关如何执行两步过程的一些信息。
两步过程
两步过程是:
- 使用 Web 应用程序创建 MBQL/SQL 元数据库问题
- 使用 REST API 查询使用 Card 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 “问题”对象,因此对以下卡片 API 进行 API 调用:
- API端点:
POST /api/card/:card-id/query/:export-format
在这个网址中:
:card-id
是:question-id
来自 Web UI URL:export-format
可以是json
或其他格式
API 文档中提供了有关 API 的更多信息:
https://github.com/metabase/metabase/blob/master/docs/api-documentation.md
问题
有没有办法通过在 API 请求中一步发送 MBQL/SQL 查询来直接执行此操作而无需预先存在的问题/卡片?
解决方案
通过 API 可以使用原始 SQL 和 MBQL 进行查询POST /api/dataset/
。端点的文档提到了query
请求定义,但没有定义它。
我最终做了更多的研究并在 Metabase Discourse 论坛上提问。以下示例由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
见oauth2more/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
见oauth2more/metabase。
推荐阅读
- php - 有逗号就单独捕获,没有RegEx就整体捕获
- ms-access - Google Drive 和 MS Access
- firebase - 无法解析 Android 应用程序模块 gradle 配置。解决或重新同步
- php - 如何获取UAPI源码,如何集成Cpanel.php文件
- angular - validate E-mail with white space with regular expression with angular form-builders
- python - Python 中的 2D EWT(经验小波变换)
- swift - 调整 UIView 内按钮的不透明度,不透明度为 0.5
- linux - 如何保留 QEMU VM 映像中的更改?
- c++ - 在我的情况下,如何删除代码重复 const_iterator 和迭代器?
- c++ - 关于将现有图转换为 BGL