You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于Ruby调用Metabase API:如何添加过滤器获取问题数据

解决方案

一、通过Metabase API传递多值过滤器

针对你需要查询GRID表并按指定字段多值过滤的需求,可通过两种HTTP请求方式实现:

1. 基于已保存问题(Card)的参数化查询

如果已创建针对GRID表的保存问题,直接调用该问题的查询API并传入过滤参数:

  • 请求方式:POST
  • 地址:https://你的Metabase域名/api/card/{card_id}/query
  • 请求头:需携带X-Metabase-Session(登录后获取的会话Token)、Content-Type: application/json
  • 请求体示例:
{
  "parameters": [
    {
      "type": "category",
      "target": ["dimension", ["field", 你的字段ID, null]],
      "value": [513, 556, 928]
    }
  ]
}

说明:type需匹配字段类型(数值型用number,分类字段用category),target对应目标过滤字段,value为多值数组。

2. 直接执行原生SQL查询

无需依赖保存的问题,直接通过/api/dataset端点执行参数化SQL:

  • 请求方式:POST
  • 地址:https://你的Metabase域名/api/dataset
  • 请求体示例:
{
  "native": {
    "query": "SELECT * FROM GRID WHERE \"你的字段名\" IN (?, ?, ?)",
    "params": [513, 556, 928]
  },
  "type": "native"
}

说明:用参数化查询避免SQL注入,替换你的字段名为实际字段名称。

二、处理100万+行的大数据量获取

直接返回JSON会导致超时或内存溢出,推荐以下两种高效方式:

1. 导出为CSV文件并流式处理

Metabase支持将查询结果导出为CSV,适合大数据量场景:

  • 请求方式:POST
  • 地址:https://你的Metabase域名/api/card/{card_id}/export/csv
  • 请求头:携带会话Token,可添加Accept: text/csv
  • Rails中流式写入文件的代码示例:
require 'net/http'
require 'uri'

uri = URI("https://你的Metabase域名/api/card/123/export/csv")
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true

request = Net::HTTP::Post.new(uri)
request["X-Metabase-Session"] = "你的会话Token"
request["Content-Type"] = "application/json"
request.body = { parameters: [{ type: "category", target: ["dimension", ["field", 你的字段ID, null]], value: [513,556,928] }] }.to_json

# 流式写入文件,避免内存占用过高
File.open("grid_data.csv", "wb") do |file|
  http.request(request) do |response|
    response.read_body do |chunk|
      file.write(chunk)
    end
  end
end

后续可使用CSV.foreach逐行解析文件,降低内存压力。

2. 分页查询(适合需实时处理的场景)

通过limit和offset参数分批获取数据,示例请求体:

{
  "parameters": [...],
  "limit": 1000,
  "offset": 0
}

循环递增offset值,直到返回结果为空即可完成全量数据获取。

注意事项

  • 确保Metabase用户拥有GRID表的查询/导出权限
  • 会话Token可通过POST /api/session接口获取,请求体为{ "username": "你的账号", "password": "你的密码" }
  • 若遇超时,可在Metabase后台调整MB_API_REQUEST_TIMEOUT等配置参数

内容的提问来源于stack exchange,提问作者cefsdp

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 06:32:16