Можно ли получить необработанные данные из запроса Metabase MBQL через REST API? - PullRequest
0 голосов
/ 31 мая 2018

Существует ли Metabase REST API, который принимает запрос MBQL / SQL и возвращает необработанные данные?

Я могу выполнить запрос MBQL через API в двухэтапном процессе, выполнив промежуточный этап созданияВопрос через пользовательский интерфейс веб-приложения Metabase, а затем запрашивает Вопрос, но я не понял, как объединить MBQL с REST API за один шаг.

Некоторые элементы, которые я хотел бы выполнить, имеяMBQL в запросе API вместо сгенерированного пользовательского интерфейса Вопрос:

  1. лучшее управление версиями, поскольку запрос MBQL можно проверить в системе контроля версий с помощью кода
  2. лучшей изоляции в качестве APIвызов не будет зависеть от вопроса, который может измениться

Вот некоторая информация о том, как выполнить двухэтапный процесс.

Двухэтапный процесс

Двухэтапный процесс:

  1. Использование веб-приложения для создания метабазы ​​вопроса MBQL / SQL
  2. Использование REST API для запроса существующего Вопроса, созданного в веб-приложении с использованиемКарта API

Шаг 1) Создание вопроса через веб-интерфейс

Войдите в веб-приложение и нажмите кнопку «Новый вопрос» в верхнем меню.

Как только ваш вопрос будет создан, вы будете перенаправлены на URL-адрес, подобный следующему, где :question-id является целым числом.

  • Конечная точка веб-интерфейса: GET /question/:question-id

Примечаниеэто значение и используйте его в API на следующем шаге.

Шаг 2) REST API для данных вопроса

API использует термин "карта" для ИнтернетаПользовательский интерфейс объекта «вопрос», поэтому вызовите API-интерфейс для следующего API карты:

  • Конечная точка API: POST /api/card/:card-id/query/:export-format

В этом URL:

  • :card-id - это :question-id из URL-адреса веб-интерфейса
  • :export-format может быть json или другого формата

Более подробная информация об API доступнав документации API:

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

Вопрос

Можно ли сделать это напрямую, отправив запрос MBQL в запросе APIза один разтеп без уже существующего Вопроса / Карты?

1 Ответ

0 голосов
/ 18 марта 2019

Запросы через raw SQL и MBQL доступны через API POST /api/dataset/.В документации для конечной точки упоминается определение запроса query, но оно не определяется.

В итоге я провел еще несколько исследований и задал вопрос на форуме Metabase Discourse.Следующие примеры были опубликованы sbelak .

Необработанный SQL-запрос

Мне удалось успешно выполнить собственный SQL-запрос, используя go-метабаза SDK.

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]]]
  }
}
...