Импортируйте данные в рабочее пространство MATLAB от выполнения SQL-оператора
results = fetch(conn,sqlquery)
results = fetch(conn,sqlquery,opts)
results = fetch(___,Name,Value)
[results,metadata] = fetch(___)
настраивает опции для того, чтобы импортировать данные от выполняемого SQL-запроса при помощи объекта results
= fetch(conn
,sqlquery
,opts
)SQLImportOptions
.
задает дополнительные опции с помощью одного или нескольких аргументов пары "имя-значение" и любой из предыдущих комбинаций входных аргументов. Например, results
= fetch(___,Name,Value
)'MaxRows',5
импортирует пять строк данных.
connection
Импортируйте все данные о продукте от таблицы базы данных Microsoft® SQL Server® в MATLAB® при помощи объекта connection
. Затем определите самую высокую себестоимость единицы продукции среди продуктов в таблице.
Создайте соединение с базой данных ODBC к базе данных Microsoft® SQL Server® с аутентификацией Windows®. Задайте пустое имя пользователя и пароль. База данных содержит таблицу productTable
.
datasource = 'MS SQL Server Auth'; conn = database(datasource,'','');
Проверяйте соединение с базой данных. Если свойство Message
пусто, то связь успешна.
conn.Message
ans = []
Импортируйте все данные от productTable
при помощи объекта connection
и SQL-запроса, и отобразите импортированные данные.
sqlquery = 'SELECT * FROM productTable';
results = fetch(conn,sqlquery)
results = 15×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' 2 4.0031e+05 1002 9 'Painting Set' 4 4.0034e+05 1008 21 'Space Cruiser' 1 4.0035e+05 1001 14 'Building Blocks' 5 4.0046e+05 1005 3 'Tin Soldier' 6 4.0088e+05 1004 8 'Sail Boat' 3 4.01e+05 1009 17 'Slinky' 10 8.8865e+05 1006 24 'Teddy Bear' 11 4.0814e+05 1004 11 'Convertible' 12 2.1046e+05 1010 22 'Hugsy' 13 4.7082e+05 1012 17 'Pancakes' 14 5.101e+05 1011 19 'Shawl' 15 8.9975e+05 1011 20 'Snacks'
Определите самую высокую себестоимость единицы продукции для всех продуктов в таблице.
max(results.unitCost)
ans = 24
Закройте соединение с базой данных.
close(conn)
Настройте настройки импорта при импортировании данных от результатов SQL-запроса на базе данных. Управляйте настройками импорта путем создания объекта SQLImportOptions
. Затем настройте настройки импорта для различных столбцов в SQL-запросе. Импортируйте данные с помощью функции fetch
.
Этот пример использует файл employees_database.mat
, который содержит столбцы first_name
, hire_date
и DEPARTMENT_NAME
. Пример также использует базу данных Microsoft® SQL Server® Version 11.00.2100 и Драйвер Microsoft SQL Server 11.00.5058.
Создайте соединение с базой данных ODBC к базе данных Microsoft SQL Server с аутентификацией Windows®. Задайте пустое имя пользователя и пароль.
datasource = 'MS SQL Server Auth'; conn = database(datasource,'','');
Загрузите информацию о сотруднике в рабочую область 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 = ['SELECT * from employees e join departments d ' ... 'on (e.department_id = d.department_id) where job_id ' ... 'in (''IT_PROG'',''SA_MAN'')']; opts = databaseImportOptions(conn,sqlquery)
Отобразите текущие настройки импорта для переменных, выбранных в свойстве 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' | 'DEPARTMENT_NAME' | 'MANAGER_ID' | 'LOCATION_ID' Type: 'double' | 'char' | 'char' | 'char' | 'char' | 'char' | 'char' | 'double' | 'double' | 'double' | 'double' | 'double' | 'double' | 'char' | 'double' | 'double' FillValue: [NaN] | '' | '' | '' | '' | '' | '' | [NaN] | [NaN] | [NaN] | [NaN] | [NaN] | [NaN] | '' | [NaN] | [NaN] To access sub-properties of each variable, use getoptions
Измените типы данных для hire_date
, DEPARTMENT_NAME
и переменных first_name
с помощью функции setoptions
. Затем отобразите обновленные настройки импорта. Поскольку hire_date
хранит данные о дате и времени, измените тип данных этой переменной к datetime
. Поскольку DEPARTMENT_NAME
определяет конечное множество повторяющихся значений, измените тип данных этой переменной к categorical
. Кроме того, поменяйте имя этой переменной к нижнему регистру. Поскольку first_name
хранит текстовые данные, измените тип данных этой переменной к string
.
opts = setoptions(opts,'hire_date','Type','datetime'); opts = setoptions(opts,'DEPARTMENT_NAME','Name','department_name', ... 'Type','categorical'); opts = setoptions(opts,'first_name','Type','string'); 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' | 'department_name' | 'MANAGER_ID' | 'LOCATION_ID' Type: 'double' | 'string' | 'char' | 'char' | 'char' | 'datetime' | 'char' | 'double' | 'double' | 'double' | 'double' | 'double' | 'double' | 'categorical' | 'double' | 'double' FillValue: NaN | <missing> | '' | '' | '' | NaT | '' | NaN | NaN | NaN | NaN | NaN | 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
___________ ____________________ _______________
"Alexander" 03-Jan-2006 00:00:00 IT
"Bruce" 21-May-2007 00:00:00 IT
"David" 25-Jun-2005 00:00:00 IT
"Valli" 05-Feb-2006 00:00:00 IT
"Diana" 07-Feb-2007 00:00:00 IT
"John" 01-Oct-2004 00:00:00 Sales
"Karen" 05-Jan-2005 00:00:00 Sales
"Alberto" 10-Mar-2005 00:00:00 Sales
"Gerald" 15-Oct-2007 00:00:00 Sales
"Eleni" 29-Jan-2008 00:00:00 Sales
Удалите employees
и таблицы базы данных departments
с помощью функции execute
.
execute(conn,'DROP TABLE employees') execute(conn,'DROP TABLE departments')
Закройте соединение с базой данных.
close(conn)
Укажите, что данные возвращают формат и количество импортированных строк для результатов SQL-запроса. Импортируйте данные с помощью SQL-запроса и функции fetch
.
Этот пример использует базу данных Microsoft® SQL Server® Version 11.00.2100 и Драйвер Microsoft SQL Server 11.00.5058.
Создайте соединение с базой данных ODBC к базе данных Microsoft SQL Server с аутентификацией Windows®. Задайте пустое имя пользователя и пароль.
datasource = 'MS SQL Server Auth'; conn = database(datasource,'','');
Загрузите терпеливую информацию в рабочую область MATLAB®.
patients = readtable('patients.xls');
Создайте таблицу базы данных patients
с помощью терпеливой информации.
tablename = 'patients';
sqlwrite(conn,tablename,patients)
Выберите все данные из таблицы базы данных patients
и импортируйте пять строк из таблицы как структура. Используйте аргумент пары "имя-значение" 'DataReturnFormat'
, чтобы задать возврат данных о результате как структура. Кроме того, используйте аргумент пары "имя-значение" 'MaxRows'
, чтобы задать пять строк. Отобразите импортированные данные.
sqlquery = ['SELECT * FROM ' tablename]; results = fetch(conn,sqlquery,'DataReturnFormat','structure', ... 'MaxRows',5)
results = struct with fields:
LastName: {5×1 cell}
Gender: {5×1 cell}
Age: [5×1 double]
Location: {5×1 cell}
Height: [5×1 double]
Weight: [5×1 double]
Smoker: [5×1 double]
Systolic: [5×1 double]
Diastolic: [5×1 double]
SelfAssessedHealthStatus: {5×1 cell}
Удалите таблицу базы данных patients
с помощью функции execute
.
sqlquery = ['DROP TABLE ' tablename];
execute(conn,sqlquery)
Закройте соединение с базой данных.
close(conn)
Импортируйте данные о продукте от базы данных Microsoft® SQL Server® в MATLAB® при помощи связи ODBC и переменной в операторе SQL SELECT
.
Создайте соединение с базой данных ODBC к базе данных Microsoft® SQL Server® с аутентификацией Windows®. Задайте пустое имя пользователя и пароль. База данных содержит таблицу productTable
.
datasource = 'MS SQL Server Auth'; conn = database(datasource,'','');
Проверяйте соединение с базой данных. Если свойство Message
пусто, то связь успешна.
conn.Message
ans = []
Выберите все данные из productTable
путем определения описания продукта как переменной. Импортируйте данные от выполняемого запроса с помощью функции fetch
.
Оператор SQL SELECT
использует квадратные скобки, чтобы конкатенировать эти два вектора символов. Чтобы создать пару одинарных кавычек, которая появляется в операторе SQL SELECT
, задайте два набора четырех одинарных кавычек вокруг productdesc
. Внешние две метки формируют рисунок следующего вектора символов для конкатенации. Две внутренних метки обозначают кавычку в векторе символов.
productdesc = 'Painting Set'; sqlquery = ['SELECT * FROM productTable ' ... 'WHERE productDescription = ' '''' productdesc '''']; results = fetch(conn,sqlquery)
results = 1×5 table productNumber stockNumber supplierNumber unitCost productDescription _____________ ___________ ______________ ________ __________________ 2 4.0031e+05 1002 9 'Painting Set'
Вместо переменной используйте вектор символов 'Slinky'
, чтобы импортировать данные.
sqlquery = ['SELECT * FROM productTable ' ... 'WHERE productDescription = ' '''Slinky''']; results = fetch(conn,sqlquery)
results = 1×5 table productNumber stockNumber supplierNumber unitCost productDescription _____________ ___________ ______________ ________ __________________ 3 4.01e+05 1009 17 'Slinky'
Закройте соединение с базой данных.
close(conn)
Получите информацию о метаданных при импортировании данных от SQL-запроса. Импортируйте данные с помощью fetch
, функционируют и исследуют информацию о метаданных при помощи записи через точку.
Этот пример использует файл outages.csv
, который содержит данные об отключении электричества. Кроме того, пример использует базу данных Microsoft® SQL Server® Version 11.00.2100 и Драйвер Microsoft SQL Server 11.00.5058.
Создайте соединение с базой данных к базе данных Microsoft SQL Server с аутентификацией Windows®. Задайте пустое имя пользователя и пароль.
datasource = "MS SQL Server Auth"; conn = database(datasource,"","");
Загрузите информацию об отключении электричества в рабочую область MATLAB®.
outages = readtable("outages.csv");
Создайте таблицу базы данных outages
с помощью информации об отключении электричества.
tablename = "outages";
sqlwrite(conn,tablename,outages)
Импортируйте данные в рабочее пространство MATLAB и возвратите информацию о метаданных об импортированных данных.
sqlquery = "SELECT * FROM outages";
[results,metadata] = fetch(conn,sqlquery);
Просмотрите имена переменных в импортированных данных.
metadata.Properties.RowNames
ans = 6×1 cell array
{'Region' }
{'OutageTime' }
{'Loss' }
{'Customers' }
{'RestorationTime'}
{'Cause' }
Просмотрите тип данных каждой переменной в импортированных данных.
metadata.VariableType
ans = 6×1 cell array
{'char' }
{'char' }
{'double'}
{'double'}
{'char' }
{'char' }
Просмотрите недостающее значение данных для каждой переменной в импортированных данных.
metadata.FillValue
ans = 6×1 cell array
{0×0 char}
{0×0 char}
{[ NaN]}
{[ NaN]}
{0×0 char}
{0×0 char}
Просмотрите индексы недостающих данных для каждой переменной в импортированных данных.
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' '2003-01-23 00:49:00.000' 530.14 2.1204e+05 '' 'winter storm'
'NorthEast' '2004-09-18 05:54:00.000' 0 0 '' 'equipment fault'
'MidWest' '2002-04-20 16:46:00.000' 23141 NaN '' 'unknown'
'NorthEast' '2004-09-16 19:42:00.000' 4718 NaN '' 'unknown'
'SouthEast' '2005-09-14 15:45:00.000' 1839.2 3.4144e+05 '' 'severe storm'
'SouthEast' '2004-08-17 17:34:00.000' 624.1 1.7879e+05 '' 'severe storm'
'SouthEast' '2006-01-28 23:13:00.000' 498.78 NaN '' 'energy emergency'
'West' '2003-06-20 18:22:00.000' 0 0 '' 'energy emergency'
Удалите таблицу базы данных outages
с помощью функции execute
.
sqlstr = "DROP TABLE ";
sqlquery = strcat(sqlstr,tablename);
execute(conn,sqlquery)
Закройте соединение с базой данных.
close(conn)
conn
— Соединение с базой данныхconnection
Соединение с базой данных, заданное как объект connection
, создается с функцией database
.
sqlquery
— SQL-операторSQL-оператор, заданный как вектор символов или скаляр строки. SQL-оператор может быть любым допустимым SQL-оператором, включая вложенные запросы. SQL-оператор может быть хранимой процедурой, такой как {call sp_name (parm1,parm2,...)}
. Для хранимых процедур, которые возвращают один или несколько наборов результатов, используйте функцию fetch
. Для процедур, которые возвращают выходные аргументы, используйте runstoredprocedure
.
Для получения информации о языке SQL-запроса см. Пример по SQL.
Типы данных: char | string
opts
— Настройки импорта базы данныхSQLImportOptions
Настройки импорта базы данных, заданные как объект SQLImportOptions
.
Укажите необязательные аргументы в виде пар ""имя, значение"", разделенных запятыми.
Имя (Name) — это имя аргумента, а значение (Value) — соответствующее значение.
Name
должен появиться в кавычках. Вы можете задать несколько аргументов в виде пар имен и значений в любом порядке, например: Name1, Value1, ..., NameN, ValueN.
results = fetch(conn,sqlquery,'MaxRows',50,'DataReturnFormat','structure')
импортирует 50 строк данных как структура.'MaxRows'
— Максимальное количество строк, чтобы возвратитьсяМаксимальное количество строк, чтобы возвратиться, заданный как пара, разделенная запятой, состоящая из 'MaxRows'
и положительного числового скаляра. По умолчанию функция fetch
возвращает все строки в выполняемый SQL-запрос. Используйте этот аргумент пары "имя-значение", чтобы ограничить количество строк, импортированных в MATLAB®.
Пример: 'MaxRows',10
Типы данных: double
'DataReturnFormat'
— Данные возвращают формат'table'
(значение по умолчанию) | 'cellarray'
| 'numeric'
| 'structure'
Данные возвращают формат, заданный как пара, разделенная запятой, состоящая из 'DataReturnFormat'
и одно из этих значений:
'table'
'cellarray'
'numeric'
'structure'
Используйте аргумент пары "имя-значение" 'DataReturnFormat'
, чтобы задать тип данных данных о результате results
. Чтобы задать целочисленные классы для числовых данных, используйте входной параметр opts
.
Можно задать эти значения с помощью векторов символов или представить скаляры в виде строки.
Пример: 'DataReturnFormat','cellarray'
импортирует данные как массив ячеек.
results
— Данные о результатеДанные о результате, возвращенные как таблица, массив ячеек, структура или числовая матрица. Данные о результате содержат все строки данных из выполняемого SQL-оператора по умолчанию.
Используйте аргумент пары "имя-значение" 'MaxRows'
, чтобы задать количество строк данных, чтобы импортировать. Используйте аргумент пары "имя-значение" 'DataReturnFormat'
, чтобы задать тип данных данных о результате.
Когда выполняемый SQL-оператор не возвращает строк, данные о результате являются пустой таблицей.
metadata
— Информация о метаданныхИнформация о метаданных, возвращенная как таблица с этими переменными.
Имя переменной | Описание переменной | Типы данных переменных |
---|---|---|
| Тип данных каждой переменной в импортированных данных | Массив ячеек из символьных векторов |
| Значение недостающих данных для каждой переменной в импортированных данных | Массив ячеек пропавших без вести значений данных |
| Индексы для каждого вхождения недостающих данных в каждой переменной импортированных данных | Массив ячеек числовых индексов |
По умолчанию функция fetch
импортирует текстовые данные как вектор символов и числовые данные как двойное. FillValue
является пустым символьным массивом (для текстовых данных) или NaN
(для числовых данных) по умолчанию. Чтобы изменить недостающее значение данных на другое значение, используйте объект SQLImportOptions
.
Свойство RowNames
таблицы metadata
содержит имена переменных в импортированных данных.
Аргумент пары "имя-значение" 'MaxRows'
имеет эти ограничения:
Если вы используете Microsoft® Access™, нативный интерфейс ODBC не поддержан.
Не вся поддержка драйверов базы данных, определяющая максимальный номер строк перед выполнением запросов. Для неподдерживаемого драйвера измените свой SQL-запрос, чтобы ограничить максимальное количество строк, чтобы возвратиться. Синтаксис SQL меняется в зависимости от драйвера. Для получения дополнительной информации консультируйтесь с документацией драйвера.
Порядок записей в вашей базе данных не остается постоянным. Сортировка данных с помощью SQL команда ORDER BY
в операторе sqlquery
.
Для Microsoft Excel® таблицы в sqlquery
являются рабочими листами Excel. По умолчанию некоторые имена рабочего листа включают символ $
. Чтобы выбрать данные из рабочего листа с этим форматом имени, используйте SQL-оператор формы SELECT * FROM "Sheet1$
" (или 'Sheet1$'
).
Прежде чем вы измените таблицы базы данных, гарантируете, что база данных не открыта для редактирования. При попытке отредактировать базу данных, в то время как это открыто, вы получаете эту ошибку MATLAB:
[Vendor][ODBC Driver] The database engine could not lock table 'TableName' because it is already in use by another person or process.
Система управления базами данных PostgreSQL поддерживает многомерные поля, но сбой операторов SQL SELECT
при получении этих полей, если вы не задаете индекс.
Некоторые базы данных требуют, чтобы вы включали символ, такой как #
, до и после даты в запросе, можно следующим образом:
execute(conn,'SELECT * FROM mydb WHERE mydate > #03/05/2005#')
Выполнение функции fetch
с входным параметром opts
и набором аргумента пары "имя-значение" 'DataReturnFormat'
к значению 'numeric'
не имеет никакого эффекта. Соответствующее предупреждающее сообщение появляется в Командном окне.
Функция fetch
импортирует данные с помощью командной строки. Чтобы импортировать данные в интерактивном режиме, используйте приложение Database Explorer.
Поведение изменяется в R2018b
Функция fetch
возвращает результаты как таблицу вместо массива ячеек по умолчанию. В предшествующих релизах, когда функция fetch
нашла, что никакие данные не импортировали, она возвратила массив ячеек, содержащий вектор символов 'No Data'
. Теперь, когда функция находит, что никакие данные не импортируют, она возвращает пустую таблицу.
Поведение изменяется в R2018b
Функция fetch
игнорирует эти настройки базы данных:
'DataReturnFormat'
'NullNumberRead'
'NullStringRead'
Можно установить тип данных импортированных данных при помощи аргумента пары "имя-значение" 'DataReturnFormat'
функции fetch
. Для большего количества индивидуальной настройки типов данных и значений заливки для недостающих данных в импортированных данных, используйте объект SQLImportOptions
.
close
| database
| databaseImportOptions
| execute
| getoptions
| reset
| setoptions
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.