fetch

Импортируйте результаты SQL-оператора в базе данных PostgreSQL в MATLAB

Описание

пример

results = fetch(conn,sqlquery) возвращает все строки данных после выполнения SQL-оператора sqlquery для connection объект. fetch импортирует данные в пакетах.

пример

results = fetch(conn,sqlquery,opts) настраивает опции для того, чтобы импортировать данные от выполняемого SQL-запроса при помощи SQLImportOptions объект.

пример

results = fetch(___,Name,Value) задает дополнительные опции с помощью одного или нескольких аргументов пары "имя-значение" и любой из предыдущих комбинаций входных аргументов. Например, 'MaxRows',5 импорт пять строк данных.

пример

[results,metadata] = fetch(___) также возвращает metadata таблица, которая содержит информацию о метаданных об импортированных данных.

Примеры

свернуть все

Импортируйте все данные о продукте от таблицы базы данных PostgreSQL в MATLAB® с помощью собственного интерфейса PostgreSQL и fetch функция. Затем определите самую высокую себестоимость единицы продукции среди продуктов в таблице.

Создайте собственное соединение с базой данных интерфейса PostgreSQL к базе данных PostgreSQL с помощью источника данных, имени пользователя и пароля. База данных содержит таблицу productTable.

datasource = "PostgreSQLDataSource";
username = "dbdev";
password = "matlab";
conn = postgresql(datasource,username,password);

Импортируйте все данные от productTable при помощи объекта связи и SQL-запроса. Затем отобразите первые три строки импортированных данных.

sqlquery = "SELECT * FROM productTable";
data = fetch(conn,sqlquery);
head(data,3)
ans=3×5 table
    productnumber    stocknumber    suppliernumber    unitcost    productdescription
    _____________    ___________    ______________    ________    __________________

          9          1.2597e+05          1003            13        "Victorian Doll" 
          8          2.1257e+05          1001             5        "Train Set"      
          7          3.8912e+05          1007            16        "Engine Kit"     

Определите самую высокую себестоимость единицы продукции для всех продуктов в таблице.

max(data.unitcost)
ans = 24

Закройте соединение с базой данных.

close(conn)

Настройте настройки импорта при импортировании данных от результатов SQL-запроса на базе данных PostgreSQL с помощью собственного интерфейса PostgreSQL. Управляйте настройками импорта путем создания SQLImportOptions объект. Затем настройте настройки импорта для различных столбцов в SQL-запросе. Импортируйте данные с помощью fetch функция.

Этот пример использует employees_database.mat файл, который содержит столбцы first_name, hire_date, и department_name. Пример использует базу данных версии 9.405 базы данных PostgreSQL и libpq версию драйвера 10.12.

Создайте собственное соединение с базой данных интерфейса PostgreSQL к базе данных PostgreSQL с именем источника данных, именем пользователя и паролем.

datasource = "PostgreSQLDataSource";
username = "dbdev";
password = "matlab";

conn = postgresql(datasource,username,password);

Загрузите информацию о сотруднике в рабочую область MATLAB®.

employeedata = load("employees_database.mat");

Создайте employees и departments таблицы базы данных с помощью информации о сотруднике.

emps = employeedata.employees;
depts = employeedata.departments;

sqlwrite(conn,"employees",emps)
sqlwrite(conn,"departments",depts)

Создайте SQLImportOptions объект с помощью SQL-запроса и databaseImportOptions функция. Этот запрос получает всю информацию для сотрудников, которые являются менеджерами по продажам или программистами.

sqlquery = strcat("SELECT * from employees e join departments d ", ...
    "on (e.department_id = d.department_id) WHERE ", ...
    "(job_id = 'IT_PROG' or job_id = 'SA_MAN')");
opts = databaseImportOptions(conn,sqlquery)
opts = 
  SQLImportOptions with properties:

           ExcludeDuplicates: false
          VariableNamingRule: 'preserve'

               VariableNames: {'employee_id', 'first_name', 'last_name' ... and 13 more}
               VariableTypes: {'double', 'string', 'string' ... and 13 more}
       SelectedVariableNames: {'employee_id', 'first_name', 'last_name' ... and 13 more}
                  FillValues: { NaN,  <missing>,  <missing>  ... and 13 more }

             VariableOptions: Show all 16 VariableOptions

Отобразите текущие настройки импорта для переменных, выбранных в SelectedVariableNames свойство SQLImportOptions объект.

vars = opts.SelectedVariableNames;
varOpts = getoptions(opts,vars)
varOpts = 
    1x16 SQLVariableImportOptions array with properties:

   Variable Options:
                         (1) |          (2) |         (3) |       (4) |            (5) |         (6) |       (7) |      (8) |              (9) |         (10) |            (11) |        (12) |              (13) |              (14) |           (15) |          (16)
         Name: 'employee_id' | 'first_name' | 'last_name' |   'email' | 'phone_number' | 'hire_date' |  'job_id' | 'salary' | 'commission_pct' | 'manager_id' | 'department_id' | 'temporary' | 'department_id_1' | 'department_name' | 'manager_id_1' | 'location_id'
         Type:      'double' |     'string' |    'string' |  'string' |       'string' |  'datetime' |  'string' | 'double' |         'double' |     'double' |        'double' |   'logical' |          'double' |          'string' |       'double' |      'double'
  MissingRule:        'fill' |       'fill' |      'fill' |    'fill' |         'fill' |      'fill' |    'fill' |   'fill' |           'fill' |       'fill' |          'fill' |      'fill' |            'fill' |            'fill' |         'fill' |        'fill'
    FillValue:           NaN |    <missing> |   <missing> | <missing> |      <missing> |         NaT | <missing> |      NaN |              NaN |          NaN |             NaN |           0 |               NaN |         <missing> |            NaN |           NaN

	To access sub-properties of each variable, use getoptions

Измените типы данных для hire_date, department_name, и first_name переменные с помощью setoptions функция. Затем отобразите обновленные настройки импорта. Для КПД, изменение тип данных hire_date переменная к string. Поскольку department_name определяет конечное множество повторяющихся значений, измените тип данных этой переменной к categorical. Поскольку first_name хранит текстовые данные, измените тип данных этой переменной к char.

opts = setoptions(opts,"hire_date","Type","string");
opts = setoptions(opts,"department_name","Type","categorical");
opts = setoptions(opts,"first_name","Type","char");

vars = opts.SelectedVariableNames;
varOpts = getoptions(opts,vars)
varOpts = 
    1x16 SQLVariableImportOptions array with properties:

   Variable Options:
                         (1) |          (2) |         (3) |       (4) |            (5) |         (6) |       (7) |      (8) |              (9) |         (10) |            (11) |        (12) |              (13) |              (14) |           (15) |          (16)
         Name: 'employee_id' | 'first_name' | 'last_name' |   'email' | 'phone_number' | 'hire_date' |  'job_id' | 'salary' | 'commission_pct' | 'manager_id' | 'department_id' | 'temporary' | 'department_id_1' | 'department_name' | 'manager_id_1' | 'location_id'
         Type:      'double' |       'char' |    'string' |  'string' |       'string' |    'string' |  'string' | 'double' |         'double' |     'double' |        'double' |   'logical' |          'double' |     'categorical' |       'double' |      'double'
  MissingRule:        'fill' |       'fill' |      'fill' |    'fill' |         'fill' |      'fill' |    'fill' |   'fill' |           'fill' |       'fill' |          'fill' |      'fill' |            'fill' |            'fill' |         'fill' |        'fill'
    FillValue:           NaN |           '' |   <missing> | <missing> |      <missing> |   <missing> | <missing> |      NaN |              NaN |          NaN |             NaN |           0 |               NaN |       <undefined> |            NaN |           NaN

	To access sub-properties of each variable, use getoptions

Выберите эти три измененных переменные с помощью SelectVariableNames свойство.

opts.SelectedVariableNames = ["first_name","hire_date","department_name"];

Импортируйте и отобразите результаты SQL-запроса с помощью fetch функция.

employees_data = fetch(conn,sqlquery,opts)
employees_data=10×3 table
     first_name            hire_date          department_name
    _____________    _____________________    _______________

    {'Diana'    }    "2007-02-07 00:00:00"         IT        
    {'Valli'    }    "2006-02-05 00:00:00"         IT        
    {'David'    }    "2005-06-25 00:00:00"         IT        
    {'Bruce'    }    "2007-05-21 00:00:00"         IT        
    {'Alexander'}    "2006-01-03 00:00:00"         IT        
    {'Eleni'    }    "2008-01-29 00:00:00"         Sales     
    {'Gerald'   }    "2007-10-15 00:00:00"         Sales     
    {'Alberto'  }    "2005-03-10 00:00:00"         Sales     
    {'Karen'    }    "2005-01-05 00:00:00"         Sales     
    {'John'     }    "2004-10-01 00:00:00"         Sales     

Удалите employees и departments таблицы базы данных с помощью execute функция.

execute(conn,"DROP TABLE employees")
execute(conn,"DROP TABLE departments")

Закройте соединение с базой данных.

close(conn)

Укажите, что данные возвращают формат и количество импортированных строк для результатов SQL-запроса. Импортируйте данные с помощью SQL-запроса и fetch функция.

Этот пример использует базу данных версии 9.405 базы данных PostgreSQL и libpq версию драйвера 10.12.

Создайте собственное соединение с базой данных интерфейса PostgreSQL к базе данных PostgreSQL с именем источника данных, именем пользователя и паролем.

datasource = "PostgreSQLDataSource";
username = "dbdev";
password = "matlab";

conn = postgresql(datasource,username,password);

Загрузите терпеливую информацию в рабочую область MATLAB®.

patients = readtable('patients.xls');

Создайте patients таблица базы данных с помощью терпеливой информации.

tablename = "patients";
sqlwrite(conn,tablename,patients)

Выберите все данные из patients таблица базы данных и импорт пять строк из таблицы как структура. Используйте 'DataReturnFormat' аргумент пары "имя-значение", чтобы задать возврат данных как структура. Кроме того, используйте 'MaxRows' аргумент пары "имя-значение", чтобы задать пять строк. Отобразите импортированные данные.

sqlquery = strcat("SELECT * FROM ",tablename);
results = fetch(conn,sqlquery,'DataReturnFormat',"structure", ...
    'MaxRows',5)
results=5×1 struct array with fields:
    lastname
    gender
    age
    location
    height
    weight
    smoker
    systolic
    diastolic
    selfassessedhealthstatus

Удалите patients таблица базы данных с помощью execute функция.

sqlquery = strcat("DROP TABLE ",tablename);
execute(conn,sqlquery)

Закройте соединение с базой данных.

close(conn)

Получите информацию о метаданных при импортировании данных от SQL-запроса. Импортируйте данные с помощью fetch функционируйте и исследуйте информацию о метаданных при помощи записи через точку.

Этот пример использует outages.csv файл, который содержит данные об отключении электричества. Кроме того, пример использует базу данных версии 9.405 базы данных PostgreSQL и libpq версию драйвера 10.12.

Создайте собственное соединение с базой данных интерфейса PostgreSQL к базе данных PostgreSQL с именем источника данных, именем пользователя и паролем.

datasource = "PostgreSQLDataSource";
username = "dbdev";
password = "matlab";

conn = postgresql(datasource,username,password);

Загрузите информацию об отключении электричества в рабочую область MATLAB®.

outages = readtable("outages.csv");

Создайте outages таблица базы данных с помощью информации об отключении электричества. Используйте 'ColumnType' аргумент пары "имя-значение", чтобы настроить типы данных переменных в outages таблица.

tablename = "outages";
sqlwrite(conn,tablename,outages, ...
    'ColumnType',["varchar(120)","timestamp","numeric(38,16)", ...
    "numeric(38,16)","timestamp","varchar(150)"])

Импортируйте данные в рабочее пространство MATLAB и возвратите информацию о метаданных об импортированных данных.

sqlquery = "SELECT * FROM outages";
[results,metadata] = fetch(conn,sqlquery);

Просмотрите имена переменных в импортированных данных.

metadata.Properties.RowNames
ans = 6×1 cell
    {'region'         }
    {'outagetime'     }
    {'loss'           }
    {'customers'      }
    {'restorationtime'}
    {'cause'          }

Просмотрите тип данных каждой переменной в импортированных данных.

metadata.VariableType
ans = 6×1 cell
    {'string'  }
    {'datetime'}
    {'double'  }
    {'double'  }
    {'datetime'}
    {'string'  }

Просмотрите недостающее значение данных для каждой переменной в импортированных данных.

metadata.FillValue
ans=6×1 cell array
    {1×1 missing}
    {[NaT      ]}
    {[      NaN]}
    {[      NaN]}
    {[NaT      ]}
    {1×1 missing}

Просмотрите индексы недостающих данных для каждой переменной в импортированных данных.

metadata.MissingRows
ans=6×1 cell array
    {  0×1 double}
    {  0×1 double}
    {604×1 double}
    {328×1 double}
    { 29×1 double}
    {  0×1 double}

Отобразите первые восемь строк импортированных данных, которые содержат недостающие временные стоимости восстановления. data содержит временные стоимости восстановления в пятой переменной. Используйте числовые индексы, чтобы найти строки с недостающими данными.

index = metadata.MissingRows{5,1};
nullrestoration = results(index,:);
head(nullrestoration)
ans=8×6 table
      region            outagetime          loss     customers     restorationtime          cause       
    ___________    ____________________    ______    __________    _______________    __________________

    "SouthEast"    23-Jan-2003 00:49:00    530.14    2.1204e+05          NaT          "winter storm"    
    "NorthEast"    18-Sep-2004 05:54:00         0             0          NaT          "equipment fault" 
    "MidWest"      20-Apr-2002 16:46:00     23141           NaN          NaT          "unknown"         
    "NorthEast"    16-Sep-2004 19:42:00      4718           NaN          NaT          "unknown"         
    "SouthEast"    14-Sep-2005 15:45:00    1839.2    3.4144e+05          NaT          "severe storm"    
    "SouthEast"    17-Aug-2004 17:34:00     624.1    1.7879e+05          NaT          "severe storm"    
    "SouthEast"    28-Jan-2006 23:13:00    498.78           NaN          NaT          "energy emergency"
    "West"         20-Jun-2003 18:22:00         0             0          NaT          "energy emergency"

Удалите outages таблица базы данных с помощью execute функция.

sqlstr = "DROP TABLE ";
sqlquery = strcat(sqlstr,tablename);
execute(conn,sqlquery)

Закройте соединение с базой данных.

close(conn)

Входные параметры

свернуть все

Собственный компонент PostgreSQL соединяет интерфейсом с соединением с базой данных в виде connection объект.

SQL-оператор в виде вектора символов или строкового скаляра. SQL-оператор может быть любым допустимым SQL-оператором, включая вложенные запросы. SQL-оператор может быть хранимой процедурой, такой как {call sp_name (parm1,parm2,...)}. Для хранимых процедур, которые возвращают один или несколько наборов результатов, используйте fetch функция.

Типы данных: char | string

Настройки импорта базы данных в виде SQLImportOptions объект.

Аргументы в виде пар имя-значение

Задайте дополнительные разделенные запятой пары Name,Value аргументы. Name имя аргумента и Value соответствующее значение. Name должен появиться в кавычках. Вы можете задать несколько аргументов в виде пар имен и значений в любом порядке, например: Name1, Value1, ..., NameN, ValueN.

Пример: results = fetch(conn,sqlquery,'MaxRows',50,'DataReturnFormat','structure') импорт 50 строк данных как структура.

Максимальное количество строк, чтобы возвратиться в виде разделенной запятой пары, состоящей из 'MaxRows' и положительный числовой скаляр. По умолчанию, fetch функция возвращает все строки в выполняемый SQL-запрос. Используйте этот аргумент пары "имя-значение", чтобы ограничить количество строк, импортированных в MATLAB®.

Пример: 'MaxRows',10

Типы данных: double

Данные возвращают формат в виде разделенной запятой пары, состоящей из 'DataReturnFormat' и одно из этих значений:

  • 'table'

  • 'cellarray'

  • 'numeric'

  • 'structure'

Используйте 'DataReturnFormat' аргумент пары "имя-значение", чтобы задать тип данных results данные. Чтобы задать целочисленные классы для числовых данных, используйте opts входной параметр.

Можно задать значение с помощью вектора символов или строкового скаляра.

Пример: 'DataReturnFormat','cellarray' импортирует данные как массив ячеек.

Переменное правило именования в виде разделенной запятой пары, состоящей из 'VariableNamingRule' и одно из этих значений:

  • "preserve" — Сохраните большинство имен переменных когда fetch функция импортирует данные. Для получения дополнительной информации смотрите раздел Limitations.

  • "modify" — Удалите символы non-ASCII из имен переменных когда fetch функция импортирует данные.

Пример: 'VariableNamingRule',"modify"

Типы данных: string

Выходные аргументы

свернуть все

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

Используйте 'MaxRows' аргумент пары "имя-значение", чтобы задать количество строк данных, чтобы импортировать. Используйте 'DataReturnFormat' аргумент пары "имя-значение", чтобы задать тип данных данных о результате.

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

Когда вы импортируете данные, fetch функция преобразует тип данных каждого столбца от базы данных PostgreSQL до типа данных MATLAB. Эта таблица сопоставляет тип данных столбца базы данных к конвертированному типу данных MATLAB.

Тип данных PostgreSQLТип данных MATLAB

Boolean

logical

Smallint

double

Integer

double

Bigint

double

Decimal

double

Numeric

double

Real

double

Double precision

double

Smallserial

double

Serial

double

Bigserial

double

Money

double

Varchar

string

Char

string

Text

string

Bytea

string

Timestamp

datetime

Timestampz

datetime

Abstime

datetime

Date

datetime

Time

duration

Timez

duration

Interval

calendarDuration

Reltime

calendarDuration

Enum

categorical

Cidr

string

Inet

string

Macaddr

string

Uuid

string

Xml

string

Информация о метаданных, возвращенная как таблица с этими переменными.

Имя переменнойОписание переменнойТипы данных переменных

VariableType

Тип данных каждой переменной в импортированных данных

Массив ячеек из символьных векторов

FillValue

Значение недостающих данных для каждой переменной в импортированных данных

Массив ячеек пропавших без вести значений данных

MissingRows

Индексы для каждого вхождения недостающих данных в каждой переменной импортированных данных

Массив ячеек числовых индексов

По умолчанию, fetch функция импортирует текстовые данные как вектор символов и числовые данные как двойное. FillValue пустой символьный массив (для текстовых данных) или NaN (для числовых данных) по умолчанию. Чтобы изменить недостающее значение данных в другое значение, используйте SQLImportOptions объект.

RowNames свойство metadata таблица содержит имена переменных в импортированных данных.

Ограничения

Аргумент пары "имя-значение" 'VariableNamingRule' имеет эти ограничения:

  • fetch функция возвращает ошибку, когда вы задаете 'VariableNamingRule' аргумент пары "имя-значение" и набор 'DataReturnFormat' аргумент пары "имя-значение" cellarrayСтруктура, или numeric.

  • fetch функция возвращает предупреждение, когда вы устанавливаете VariableNamingRule свойство SQLImportOptions возразите против "preserve" и набор 'DataReturnFormat' аргумент пары "имя-значение" structure.

  • fetch функция возвращает ошибку, когда вы используете 'VariableNamingRule' аргумент пары "имя-значение" с SQLImportOptions объект opts.

  • Когда 'VariableNamingRule' аргумент пары "имя-значение" установлен в значение 'modify':

    • Имена переменных Properties'RowNames' , и VariableNames зарезервированные идентификаторы для table тип данных.

    • Длина каждого имени переменной должна быть меньше номера, возвращенного namelengthmax.

Альтернативная функциональность

Приложение

fetch функционируйте данные об импорте с помощью командной строки. Чтобы импортировать данные в интерактивном режиме, используйте приложение Database Explorer.

Введенный в R2020b