CONNECT - Файлы, полученные с помощью запросов Rest
Начиная с CONNECT версии 1.07.0001, файлы данных JSON, XML и, возможно, CSV могут быть получены в качестве результатов запросов REST при создании или запросе таких таблиц. Это делается внутри CONNECT с помощью программы CURL, обычно доступной на всех системах (если нет, просто установите её).
Это также можно сделать с помощью пакета Microsoft Casablanca (cpprestsdk). Для этого сначала установите пакет, как описано в https://github.com/microsoft/cpprestsdk. Затем создайте библиотеку GetRest (dll или подобное), как описано в Создание библиотеки GetRest.
Примечание: Если оба пакета доступны, предпочтительно используется cpprestsdk, поскольку он быстрее. Это можно изменить, указав «curl=1» в списке опций.
Примечание: Если вы хотите использовать эту функцию со старой распределенной версией MariaDB, не имеющей REST, её можно добавить как модуль OEM, как описано в Добавление функции REST в качестве библиотеки, вызываемой таблицей OEM.
Создание таблиц с использованием REST
Для этого укажите HTTP веб-клиента и, возможно, URI запроса в инструкции CREATE TABLE. Например, для запроса, возвращающего данные JSON:
CREATE TABLE webusers ( id bigint(2) NOT NULL, name char(24) NOT NULL, username char(16) NOT NULL, email char(25) NOT NULL, address varchar(256) DEFAULT NULL, phone char(21) NOT NULL, website char(13) NOT NULL, company varchar(256) DEFAULT NULL ) ENGINE=CONNECT DEFAULT CHARSET=utf8 TABLE_TYPE=JSON FILE_NAME='users.json' HTTP='http://jsonplaceholder.typicode.com' URI='/users';
Как и в стандартных таблицах JSON, возможна обнаружение, то есть вы можете позволить CONNECT определить столбцы, проанализировав файл JSON. Здесь вы можете просто сделать:
CREATE TABLE webusers ENGINE=CONNECT DEFAULT CHARSET=utf8 TABLE_TYPE=JSON FILE_NAME='users.json' HTTP='http://jsonplaceholder.typicode.com' URI='/users';
Например, выполнение:
SELECT name, address FROM webusers2 LIMIT 1;
возвращает:
| name | address |
|---|---|
| Leanne Graham | Kulas Light Apt. 556 Gwenborough 92998-3874 -37.3159 81.1496 |
Здесь мы видим, что для некоторых сложных элементов, таких как address, который является объектом Json, содержащим значения и объекты, CONNECT по умолчанию просто выводит их текст, разделенный пробелами. Но можно попросить его более глубоко проанализировать результат json, добавив опцию DEPTH. Например:
CREATE OR REPLACE TABLE webusers ENGINE=CONNECT DEFAULT CHARSET=utf8 TABLE_TYPE=JSON FILE_NAME='users.json' HTTP='http://jsonplaceholder.typicode.com' URI='/users' OPTION_LIST='Depth=2';
Тогда таблица будет создана как:
CREATE TABLE `webusers3` ( `id` bigint(2) NOT NULL, `name` char(24) NOT NULL, `username` char(16) NOT NULL, `email` char(25) NOT NULL, `address_street` char(17) NOT NULL `JPATH`='$.address.street', `address_suite` char(9) NOT NULL `JPATH`='$.address.suite', `address_city` char(14) NOT NULL `JPATH`='$.address.city', `address_zipcode` char(10) NOT NULL `JPATH`='$.address.zipcode', `address_geo_lat` char(8) NOT NULL `JPATH`='$.address.geo.lat', `address_geo_lng` char(9) NOT NULL `JPATH`='$.address.geo.lng', `phone` char(21) NOT NULL, `website` char(13) NOT NULL, `company_name` char(18) NOT NULL `JPATH`='$.company.name', `company_catchPhrase` char(40) NOT NULL `JPATH`='$.company.catchPhrase', `company_bs` varchar(36) NOT NULL `JPATH`='$.company.bs' ) ENGINE=CONNECT DEFAULT CHARSET=utf8 `TABLE_TYPE`='JSON' `FILE_NAME`='users.json' `OPTION_LIST`='Depth=2' `HTTP`='http://jsonplaceholder.typicode.com' `URI`='/users';
Позволяя получить все значения результата Json, например:
SELECT name, address_city city, company_name company FROM webusers3;
Что приводит к:
| Имя | Город | Компания |
|---|---|---|
| Leanne Graham | Gwenborough | Romaguera-Crona |
| Ervin Howell | Wisokyburgh | Deckow-Crist |
| Clementine Bauch McKenziehaven | Romaguera-Jacobson | |
| Patricia Lebsack | South Elvis | Robel-Corkery |
| Chelsey Dietrich | Roscoeview | Keebler LLC |
| Mrs. Dennis Schulist | South Christy | Considine-Lockman |
| Kurtis Weissnat | Howemouth | Johns Group |
| Nicholas Runolfsdottir V | Aliyaview | Abernathy Group |
| Glenna Reichert | Bartholomebury | Yost and Sons |
| Clementina DuBuque | Lebsackbury | Hoeger LLC |
Конечно, полную таблицу создания (полученную с помощью SHOW CREATE TABLE) можно позже отредактировать, чтобы ваша таблица возвращала именно то, что вам нужно. Подробнее о том, что и как нужно указать, см. в типе JSON-таблицы.
Обратите внимание, что такие таблицы только для чтения. Кроме того, данные будут извлекаться из веб-сайта каждый раз при запросе к таблице с помощью оператора SELECT. Это нормально, если результат меняется каждый раз, например, когда вы запрашиваете прогноз погоды. Но если вы хотите использовать полученный файл многократно без перезагрузки, просто создайте другую таблицу на том же файле, не указывая опцию HTTP.
Примечание: для JSON-таблиц указание имени файла необязательно и по умолчанию равно tabname.type. Однако вы должны указать его, если хотите использовать файл позже для других таблиц.
Посмотрите тип JSON-таблицы для изменений, которые произойдут в новых версиях CONNECT (распределённых в начале 2021 года).
© 2023 MariaDB
Licensed under the Creative Commons Attribution 3.0 Unported License and the GNU Free Documentation License.
https://mariadb.com/kb/en/connect-files-retrieved-using-rest-queries/