Spec-Zone.ru › MariaDB

Типы таблиц CONNECT - Специальные "виртуальные" таблицы

Специальные типы таблиц, поддерживаемые CONNECT, — это виртуальный тип таблицы (ВИР — представленный в MariaDB 10.0.15), тип таблицы списка каталогов (DIR), тип таблицы управления Windows Management Instrumentation (WMI) и тип «MAC-адрес» (MAC).

Эти таблицы являются «виртуальными таблицами», то есть у них нет физических данных, а вместо этого данные результата генерируются с помощью специальных алгоритмов. Обратите внимание, что это близко к тому, что представляют собой представления, поэтому их можно считать специальными представлениями.

Тип DIR

Таблица типа DIR возвращает список имен файлов и описаний в виде набора результатов. Для создания таблицы DIR используйте оператор CREATE TABLE, например:

create table source (
  DRIVE char(2) NOT NULL,
  PATH varchar(256) NOT NULL,
  FNAME varchar(256) NOT NULL,
  FTYPE char(4) NOT NULL,
  SIZE double(12,0) NOT NULL flag=5,
  MODIFIED datetime NOT NULL)
engine=CONNECT table_type=DIR file_name='..\\*.cc';

При использовании в запросе таблица возвращает тот же список информации о файлах, что и оператор системы «DIR *.cc», если он выполняется в той же текущей директории (в данном случае предположительно ..\)

Например, запрос:

select fname, size, modified from source
  where fname like '%handler%';

Отображает:

fname size modified
handler 152177 2011-06-13 18:08:29
sql_handler 25321 2011-06-13 18:08:31

Примечание: важным элементом в этой таблице является значение параметра флага (устанавливается последовательно с 0 по умолчанию), поскольку оно определяет, какой конкретный элемент информации возвращается в столбце:

Значение флага Информация
0 Дисковод (Windows)
1 Путь к файлу
2 Имя файла
3 Тип файла
4 Атрибут файла
5 Размер файла
6 Дата последнего доступа для записи
7 Дата последнего доступа для чтения
8 Дата создания файла

Параметр Subdir

При указании в операторе создания таблицы параметр subdir указывает на то, что помимо файлов, содержащихся в указанной директории, необходимо вывести все файлы, удовлетворяющие заданному шаблону имени файла, содержащиеся в поддиректориях указанной директории. Например, используя:

create table data (
  PATH varchar(256) NOT NULL flag=1,
  FNAME varchar(256) NOT NULL,
  FTYPE char(4) NOT NULL,
  SIZE double(12,0) NOT NULL flag=5)
engine=CONNECT table_type=DIR file_name='*.frm'
option_list='subdir=1';

select path, count(*), sum(size) from data group by path;

Вы получите следующий набор результатов, показывающий, сколько таблиц создано в базах данных MariaDB и какова общая длина файлов FRM:

path count(*) sum(size)
\CommonSource\mariadb-5.2.7\sql\data\connect\ 30 264469
\CommonSource\mariadb-5.2.7\sql\data\mysql\ 23 207168
\CommonSource\mariadb-5.2.7\sql\data\test\ 22 196882

Параметр Nodir (Windows)

Булевый параметр Nodir может быть установлен в значение false (0 или no), чтобы добавить директории, соответствующие шаблону имени файла из перечисленных файлов (по умолчанию значение true). Это добавление в версию CONNECT 1.6. Ранее имена директорий, соответствующие шаблону, отображались в Windows. Директории никогда не отображались в Linux.

Примечание: способ получения имен файлов делает невозможность позиционного доступа к ним. Поэтому таблицы DIR не могут быть индексированы или отсортированы при использовании позиций.

Обратите внимание, особенно при использовании параметра subdir, что запросы к таблицам DIR медленные и могут длиться практически вечно, если они выполняются на директории, содержащей большое количество файлов в ней и ее поддиректориях.

Таблицы dir могут быть использованы для заполнения списка файлов, используемых для создания таблицы multiple=2. Однако это не так полезно, как это было раньше, когда multiple 3 не существовало.

Тип таблицы управления Windows Management Instrumentation "WMI"

Примечание: Этот тип таблицы доступен только в Windows.

WMI предоставляет интерфейс операционной системы, посредством которого инструментальные компоненты предоставляют информацию. Некоторые инструменты Microsoft для извлечения информации через WMI — это командная консоль WMIC и приложение WMI CMI Studio.

Тип таблицы WMI CONNECT позволяет администраторам и операторам, не имеющим возможности программирования или скриптинга на основе WMI, получить преимущества от WMI, даже не изучая его. Это позволяет представлять эту информацию в виде таблиц, которые можно запросить, преобразовать, скопировать в документы или другие таблицы.

Для создания таблицы WMI, отображающей информацию, полученную от поставщика WMI, необходимо указать имя пространства имен и имя класса, которые характеризуют информацию, которую вы хотите получить. Лучший способ найти их — использовать WMI CIM Studio, который имеет инструменты для просмотра пространств имен и классов и отображает имена свойств этого класса.

Имена столбцов таблиц должны быть именами (регистронезависимыми) свойств, которые вы хотите получить. Например:

create table alias (
  friendlyname char(32) not null,
  target char(50) not null)
engine=CONNECT table_type='WMI'
option_list='Namespace=root\\cli,Class=Msft_CliAlias';

Таблицы WMI возвращают одну строку для каждого экземпляра связанной информации. Приведенный выше пример полезен для получения эквивалента класса псевдонима команды WMIC, а также для получения списка часто используемых классов.

Поскольку большинство полезных классов принадлежат пространству имен 'root\cimv2', это значение по умолчанию для таблиц WMI, когда пространство имен не указано. Некоторые классы имеют много свойств, имена и типы которых могут быть неизвестны при создании таблицы. Чтобы найти их, вы можете использовать приложение WMI CMI Studio, но это редко требуется, так как CONNECT может их извлечь.

Фактически, спецификация класса также содержит значения по умолчанию для некоторых пространств имен. Для пространства имен «root\cli» имя класса по умолчанию — «Msft_CliAlias», а для пространства имен «root_cimv2» значение по умолчанию — «Win32_ComputerSystemProduct». Поскольку многие имена классов начинаются с «Win32_», нет необходимости указывать его, и указание класса как «Product» фактически использует класс «Win32_Product».

Например, если вы определите таблицу как:

create table CSPROD engine=CONNECT table_type='WMI';

Она вернет информацию о текущей машине, используя класс ComputerSystemProduct пространства имен CIMV2. Например:

select * from csprod;

Вернет результат, подобный:

Column Строка 1
Caption Компьютерный продукт
Description Компьютерный продукт
IdentifyingNumber LXAP50X32982327A922300
Name Aspire 8920
SKUNumber
UUID 00FC523D-B8F7-DC12-A70E-00B0D1A46136
Vendor Acer
Version Aspire 8920

Примечание: Это транспонированное отображение, которое может быть получено с помощью некоторых графических интерфейсов.

Получение информации о столбцах

Проблема при создании таблицы WMI заключается в определении ее столбцов. Действительно, даже зная пространство имен и класс необходимой информации, сложно определить имена и типы ее свойств. Однако, поскольку CONNECT может получить эту информацию от поставщика WMI, вы можете просто отказаться от определения столбцов, и CONNECT выполнит эту работу.

В качестве альтернативы вы можете получить эту информацию, используя таблицу каталога (см. ниже).

Учет производительности

Некоторые поставщики WMI могут отвечать очень медленно. Это не проблема для тех, которые возвращают мало экземпляров объектов, таких как те, которые возвращают информацию о компьютере, материнской плате или BIOS. Они обычно возвращают только одну строку (экземпляр). Однако некоторые из них могут возвращать много строк, в частности, класс "CIM_DataFile". Вот почему необходимо быть осторожным с ними.

Во-первых, можно ограничить размер выделенных результатов, используя параметр 'Estimate' в операторе создания таблицы. Для предотвращения усечения результатов CONNECT выделяет результат размером 100 строк, что достаточно для почти всех таблиц. Параметр 'Estimate' позволяет уменьшить этот размер для всех классов, возвращающих только несколько строк, и в некоторых редких случаях увеличить его, чтобы избежать усечения.

Однако нельзя ограничить время, которое требуется некоторым поставщикам WMI для ответа, в частности, классу CIM_DATAFILE. Действительно, в документации Microsoft говорится об этом:

«Избегайте перечисления или запроса всех экземпляров CIM_DataFile на компьютере, так как объем данных, вероятно, повлияет на производительность или приведет к остановке работы компьютера».

Безусловно, даже такой простой запрос, как:

select count(*) from cim where drive = 'D:' and path like '\\MariaDB\\%';

склонен длиться практически вечно (вероятно, из-за условия LIKE). Вот почему, если вы не запрашиваете определенные элементы, следует рассмотреть использование типа таблицы DIR вместо этого.

Синтаксис запросов WMI

Запросы к поставщикам WMI выполняются с использованием языка WQL, а не языка SQL. CONNECT выполняет задачу построения запроса WQL. Однако из-за ограничений синтаксиса WQL, условие WHERE будет сгенерировано только при соблюдении следующих ограничений:

  1. Нет функций.
  2. Нет сравнения между двумя столбцами.
  3. Нет выражений (в настоящее время ограничение CONNECT).
  4. Нет предикат BETWEEN и IN.

Фильтрация с помощью условий WHERE, не удовлетворяющих этим условиям, все равно будет выполнена только MariaDB, за исключением случая класса CIM_Datafile по вышеуказанной причине.

Однако есть один момент, который еще не освещен, синтаксис указания дат в запросах. WQL не распознает даты как числовые элементы, но преобразует их во внутренний формат дат, указанных как текст. Многие форматы распознаются, как описано в документации Microsoft, но только один полезен, так как общий для WQL и MariaDB SQL. Вот пример запроса к таблице под названием "cim", созданной с помощью:

create table cim (
  Name varchar(255) not null,
  LastModified datetime not null)
engine=CONNECT table_type='WMI'
option_list='class=CIM_DataFile,estimate=5000';

Дата должна быть указана в формате, в котором хранятся значения CIM DATETIME (WMI использует форматы дат и времени, определенные рабочей группой по распределенным задачам управления).

select * from cim where drive = 'D:' and path = '\\PlugDB\\Bin\\'
     and lastmodified > '20120415000000.000000+120';

Этот синтаксис должен быть строго соблюден. Текст имеет формат:

yyyymmddHHMMSS.mmmmmmsUUU

Это: год, месяц, день, час, минута, секунда, миллисекунда и отклонение от UTC в минутах со знаком. Этот формат независим от локали, поэтому вы можете написать запрос, который будет выполняться на любой машине.

Примечание 1: Тип таблицы WMI доступен только в версиях CONNECT для Windows.

Примечание 2: Таблицы WMI являются только для чтения.

Примечание 3: Таблицы WMI не индексируются.

Примечание 4: WMI рассматривает все строки как регистронезависимые.

Тип таблицы MAC-адрес «MAC»

Примечание: Этот тип таблицы доступен только в Windows.

Этот тип используется для отображения различной общей информации о компьютере и, в частности, о его сетевых картах. Для создания такой таблицы используйте синтаксис:

create table tabname (column definition)
engine=CONNECT table_type=MAC;

Имена столбцов могут быть выбраны произвольно, потому что их значение, т.е. отображаемые значения, поступают из указанного параметра Флаг. Допустимые значения для Флага:

Флаг Значение Тип
1 Имя хоста varchar(132)
2 Домен varchar(132)
3 Адрес DNS varchar(24)
4 Тип узла int(1)
5 Идентификатор области varchar(256)
6 Маршрутизация int(1)
7 Прокси int(1)
8 DNS int(1)
10 Имя varchar(260)
11 Описание varchar(132)
12 MAC-адрес char(24)
13 Тип int(3)
14 DHCP int(1)
15 IP-адрес char(16)
16 Маска подсети char(16)
17 ШЛЮЗ char(16)
18 Сервер DHCP char(16)
19 Имеет WINS int(1)
20 Основной WINS char(16)
21 Вторичный WINS char(16)
22 Получен арендованный срок datetime
23 Срок аренды истекает datetime

Примечание: Информация о столбцах, у которых значение Флага меньше 10, уникальна для компьютера, остальные относятся к сетевым картам компьютера.

Например, вы можете определить таблицу macaddr как:

create table macaddr (
  Host varchar(132) flag=1,
  Card varchar(132) flag=11,
  Address char(24) flag=12,
  IP char(16) flag=15,
  Gateway char(16) flag=17,
  Lease datetime flag=23)
engine=CONNECT table_type=MAC;

Если вы выполните запрос:

select host, address, ip, gateway, lease from macaddr;

Он вернёт, например:

Хост Адрес IP Шлюз Аренда
OLIVIER 00-A0-D1-A4-61-36 0.0.0.0 0.0.0.0 1970-01-01 00:00:00
OLIVIER 00-1D-E0-9B-90-0B 192.168.0.10 192.168.0.254 2011-09-18 10:28:5
Содержимое, воспроизведенное на этом сайте, является собственностью соответствующих владельцев, и это содержимое не предварительно проверяется MariaDB. Мнения, информация и мнения, выраженные в этом содержимом, не обязательно отражают точку зрения MariaDB или любой другой стороны.

© 2023 MariaDB
Licensed under the Creative Commons Attribution 3.0 Unported License and the GNU Free Documentation License.
https://mariadb.com/kb/en/connect-table-types-special-virtual-tables/

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API