exponenta event banner

усилие

Импорт результатов инструкции SQL в базу данных MySQL в 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 , которая содержит метаданные об импортированных данных.

Примеры

свернуть все

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

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

datasource = "MySQLNative";
username = "root";
password = "matlab";
conn = mysql(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-запроса в базу данных MySQL ® с помощью собственного интерфейса MySQL. Управление параметрами импорта путем создания SQLImportOptions объект. Затем настройте параметры импорта для различных столбцов в SQL-запросе. Импорт данных с помощью fetch функция.

В этом примере используется employees_database.mat файл, содержащий столбцы first_name, hire_date, и DEPARTMENT_NAME. В примере предполагается, что вы подключаетесь к базе данных MySQL версии 5.7.22 с помощью драйвера MySQL Connector/C + + версии 8.0.15.

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

datasource = "MySQLNative";
username = "root";
password = "matlab";

conn = mysql(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' | 'DEPARTMENT_NAME' | 'MANAGER_ID' | '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","Name","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' | 'department_name' | 'MANAGER_ID' | '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
    _____________    ____________________________    _______________

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

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

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

Закройте подключение к базе данных.

close(conn)

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

В этом примере предполагается, что вы подключаетесь к базе данных MySQL ® версии 5.7.22 с помощью драйвера MySQL Connector/C + + версии 8.0.15.

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

datasource = "MySQLNative";
username = "root";
password = "matlab";

conn = mysql(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 = struct with fields:
                    LastName: [5×1 string]
                      Gender: [5×1 string]
                         Age: [5×1 double]
                    Location: [5×1 string]
                      Height: [5×1 double]
                      Weight: [5×1 double]
                      Smoker: [5×1 logical]
                    Systolic: [5×1 double]
                   Diastolic: [5×1 double]
    SelfAssessedHealthStatus: [5×1 string]

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

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

Закройте подключение к базе данных.

close(conn)

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

В этом примере используется outages.csv файл, содержащий данные об отключении. Также в примере предполагается, что вы подключаетесь к базе данных MySQL ® версии 5.7.22 с помощью драйвера MySQL Connector/C + + версии 8.0.15.

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

datasource = "MySQLNative";
username = "root";
password = "matlab";

conn = mysql(datasource,username,password);

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

outages = readtable("outages.csv");

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

tablename = "outages";
sqlwrite(conn,tablename,outages, ...
    'ColumnType',["varchar(120)","datetime","numeric(38,16)", ...
    "numeric(38,16)","datetime","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}
    {1208×1 double}
    { 656×1 double}
    {  58×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)

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

свернуть все

Подключение к базе данных собственного интерфейса MySQL, указанное как 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 функция импортирует данные. Дополнительные сведения см. в разделе Ограничения.

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

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

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

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

свернуть все

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

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

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

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

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

BIT

logical

TINYINT

double

SMALLINT

double

BIGINT

double

REAL

double

DOUBLE

double

DECIMAL

double

NUMERIC

double

CHAR

string

VARCHAR

string

LONGVARCHAR

string

TIMESTAMP

datetime

DATE

datetime

TIME

duration

YEAR

double

ENUM

categorical

JSON

char

Метаданные, возвращаемые в виде таблицы с этими переменными.

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

VariableType

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

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

FillValue

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

Массив ячеек с отсутствующими значениями данных

MissingRows

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

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

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

RowNames имущества metadata содержит имена переменных в импортированных данных.

Ограничения

Аргумент пары имя-значение 'VariableNamingRule' имеет следующие ограничения:

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

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

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

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

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

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

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

Приложение

fetch импортирует данные с помощью командной строки. Для интерактивного импорта данных используйте приложение Database Explorer.

Представлен в R2020b