是否可以通过RESTAPI从元数据库MBQL/SQL查询中获取原始数据?

是否可以通过RESTAPI从元数据库MBQL/SQL查询中获取原始数据?,sql,rest,metabase,Sql,Rest,Metabase,是否存在接受MBQL/SQL查询并返回原始数据的Metabase REST API 我可以在两步流程中通过API执行MBQL查询,即通过Metabase web app UI创建问题,然后查询问题,但我还没有想到如何在一个步骤中将MBQL与REST API结合起来 我希望通过在API请求中使用MBQL而不是UI生成的问题来完成以下几项: 更好的版本管理,因为MBQL查询可以通过代码检入源代码管理 更好的隔离,因为API调用不会依赖于可以更改的问题 以下是有关如何执行两步流程的一些信息 二步法 这

是否存在接受MBQL/SQL查询并返回原始数据的Metabase REST API

我可以在两步流程中通过API执行MBQL查询,即通过Metabase web app UI创建问题,然后查询问题,但我还没有想到如何在一个步骤中将MBQL与REST API结合起来

我希望通过在API请求中使用MBQL而不是UI生成的问题来完成以下几项:

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

    二步法 这两个步骤是:

  • 使用web app创建MBQL/SQL元数据库问题
  • 使用RESTAPI查询使用卡片API在web应用程序中创建的现有问题
  • 步骤1)通过Web UI创建问题 登录web应用程序并单击顶部菜单中的“新建问题”按钮

    创建问题后,您将被定向到如下URL,其中
    :问题id
    是一个整数

    • Web UI端点:
      GET/question/:问题id
    注意这个值,并在下一步的API中使用它

    注意:创建卡的另一种方法是使用per。如果需要UI问题/卡片,这在某些场景中可能很有用,但我也试图避免首先创建卡片/问题,因为我不打算使用Metabase UI来使用它们。对我来说,避免使用卡片的原因包括需要执行额外的工作来验证卡片查询定义没有更改,但代码中仍然有SQL来创建卡片,并且在UI中生成许多不需要的问题卡片

    步骤2)问题数据的REST API API对Web UI“问题”对象使用术语“卡”,因此对以下卡API进行API调用:

    • API端点:
      POST/API/card/:card id/query/:导出格式
    在此URL中:

    • :卡id
      是Web UI URL中的
      :问题id
    • :导出格式可以是
      json
      或其他格式
    API文档中提供了有关API的更多信息:

    问题:
    有没有一种方法可以通过一步发送API请求中的MBQL/SQL查询来直接执行此操作,而不需要预先存在问题/卡片?

    通过原始SQL查询和MBQL都可以通过
    POST/API/dataset/
    API使用。端点的文档提到了
    查询
    请求定义,但没有对其进行定义

    最后,我在Metabase话语论坛上做了更多的研究和提问。以下示例由发布

    原始SQL查询

    我能够使用SDK成功地进行本机SQL查询,以发出以下请求:

    POST /api/dataset
    Content-Type: application/json
    X-Metabase-Session: <sessionId>
    
    {
      "database": 1,
      "native": {
        "query": "SELECT COUNT(*) FROM orders"
      },
      type: "native"
    }
    
    注:

  • 要设置
    X-Metabase-Session
    请参阅

  • 如果你分享你如何做第二部分,你的问题将对其他人更有帮助。谢谢你的反馈。我已经更新了这个问题,介绍了如何使用两步方法实现这一点,以及为什么我更喜欢使用一步方法。非常感谢!我在想我必须使用
    GET/api/embed/card/:token/query
    端点,并且很难确定从何处获取令牌。非常感谢!顺便问一下,你试过这个吗?它被描述为创建一张新卡,所以您可能可以通过两个步骤来完成,但都是通过api完成的。感谢@YakovL的注释。这确实是一种自动创建卡片的方法,值得注意,因此我将其添加到上面的主要问题中。在某些情况下,这可能是一个不错的选择。就我的特殊情况而言,使用信用卡没有任何好处,因此基于上述原因,我希望避免使用信用卡。
    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]]]
      }
    }