splitsqlquery

Разделение запроса SQL с помощью пейджинга

Описание

пример

querybasket = splitsqlquery(conn,sqlquery) разделяет запрос SQL на корзину с несколькими запросами SQL. По умолчанию каждый SQL-запрос в корзине возвращает 100 000 строк в пакете. Получившееся количество запросов SQL в корзине зависит от размера исходных результатов запросов SQL.

пример

querybasket = splitsqlquery(conn,sqlquery,'SplitSize',splitsize) задает пользовательский размер пакета для количества строк, возвращаемых каждым SQL-запросом в корзине.

Примеры

свернуть все

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

Использование splitsqlquery можно разделить исходный запрос SQL на несколько запросов SQL-страниц. Затем вы можете получить доступ к большим данным в фрагментах при помощи fetch функция.

Чтобы запустить этот пример, необходимо сконфигурировать источник данных JDBC. Для получения дополнительной информации смотрите configureJDBCDataSource функция.

Создайте подключение базы данных к источнику данных JDBC MSSQLServerJDBCAuth. Этот источник данных настраивает драйвер JDBC для базы данных Microsoft ® SQL Server ® с проверкой подлинности Windows ®. Укажите пустые имя пользователя и пароль.

datasource = "MSSQLServerJDBCAuth";
username = "";
password = "";
conn = database(datasource,username,password);

Задайте SQL-запрос, чтобы выбрать все столбцы из airlinesmall таблица, содержащая 123 523 строки и 29 столбцов.

sqlquery = 'SELECT * FROM airlinesmall';

Разделите исходный запрос SQL на несколько страниц и отобразите их.

querybasket = splitsqlquery(conn,sqlquery)
querybasket = 

  2×1 string array

    " SELECT * FROM (SELECT * FROM airlinesmall) temp ORDER BY 1 OFFSET 0 ROWS FETCH NEXT 100000 ROWS ONLY"
    " SELECT * FROM (SELECT * FROM airlinesmall) temp ORDER BY 1 OFFSET 100000 ROWS FETCH NEXT 23523 ROWS ONLY"

Корзина запросов содержит запросы страниц в строковых массивах. The splitsqlquery функция разделяет запросы, используя количество строк по умолчанию (100000).

Определите airlinesdata переменная.

airlinesdata = [];

Определите минимальную задержку прибытия minArrDelay переменная.

minArrDelay = [];

Выполните запросы страницы SQL в querybasket при помощи for цикл и импорт данных в фрагменты. Выполните запросы SQL-страниц в корзине запросов и импортируйте большие данные с помощью fetch функция. Найдите и сохраните локальную минимальную задержку прибытия для каждого фрагмента.

for i = 1: length(querybasket)

    local_airlinesdata = fetch(conn,querybasket(i));

    local_minArrDelay = min(local_airlinesdata.ArrDelay);

    minArrDelay = [minArrDelay; local_minArrDelay];

end

Найдите минимальную задержку прибытия из всех сохраненных задержек.

minArrDelay = min(minArrDelay)
minArrDelay =

   -64

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

close(conn)

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

Чтобы инициализировать параллельный пул с подключением к базе данных JDBC, необходимо настроить источник данных JDBC. Для получения дополнительной информации смотрите configureJDBCDataSource функция.

Использование splitsqlquery можно разделить исходный запрос SQL на несколько запросов SQL-страниц. Затем вы можете получить доступ к большим данным в фрагментах путем выполнения каждого запроса SQL-страницы для отдельного работника в пуле.

При импорте больших данных эффективность зависит от SQL-запроса, объема данных, спецификаций машин и типа анализа данных. Для управления эффективностью используйте splitsize входной параметр splitsqlquery функция.

Если у вас есть лицензия MATLAB ® Parallel Server™, используйте parpool (Parallel Computing Toolbox) функция с профилем кластера по вашему выбору вместо gcp (Parallel Computing Toolbox) функция.

Создайте подключение базы данных к источнику данных JDBC MSSQLServerJDBCAuth. Этот источник данных настраивает драйвер JDBC для базы данных Microsoft ® SQL Server ® с проверкой подлинности Windows ®. Укажите пустые имя пользователя и пароль.

datasource = "MSSQLServerJDBCAuth";
username = "";
password = "";
conn = database(datasource,username,password);

Задайте SQL-запрос, чтобы выбрать все столбцы из airlinesmall таблица, содержащая 123 523 строки и 29 столбцов.

sqlquery = 'SELECT * FROM airlinesmall';

Разделите исходный запрос SQL на несколько страниц и отобразите их. Задайте размер разделения 10 000 строк.

splitsize = 10000;
querybasket = splitsqlquery(conn,sqlquery,'SplitSize',splitsize)
querybasket = 

  13×1 string array

    " SELECT * FROM (SELECT * FROM airlinesmall) temp ORDER BY 1 OFFSET 0 ROWS FETCH NEXT 10000 ROWS ONLY"
    " SELECT * FROM (SELECT * FROM airlinesmall) temp ORDER BY 1 OFFSET 10000 ROWS FETCH NEXT 10000 ROWS ONLY"
    " SELECT * FROM (SELECT * FROM airlinesmall) temp ORDER BY 1 OFFSET 20000 ROWS FETCH NEXT 10000 ROWS ONLY"
    " SELECT * FROM (SELECT * FROM airlinesmall) temp ORDER BY 1 OFFSET 30000 ROWS FETCH NEXT 10000 ROWS ONLY"
    " SELECT * FROM (SELECT * FROM airlinesmall) temp ORDER BY 1 OFFSET 40000 ROWS FETCH NEXT 10000 ROWS ONLY"
    " SELECT * FROM (SELECT * FROM airlinesmall) temp ORDER BY 1 OFFSET 50000 ROWS FETCH NEXT 10000 ROWS ONLY"
    " SELECT * FROM (SELECT * FROM airlinesmall) temp ORDER BY 1 OFFSET 60000 ROWS FETCH NEXT 10000 ROWS ONLY"
    " SELECT * FROM (SELECT * FROM airlinesmall) temp ORDER BY 1 OFFSET 70000 ROWS FETCH NEXT 10000 ROWS ONLY"
    " SELECT * FROM (SELECT * FROM airlinesmall) temp ORDER BY 1 OFFSET 80000 ROWS FETCH NEXT 10000 ROWS ONLY"
    " SELECT * FROM (SELECT * FROM airlinesmall) temp ORDER BY 1 OFFSET 90000 ROWS FETCH NEXT 10000 ROWS ONLY"
    " SELECT * FROM (SELECT * FROM airlinesmall) temp ORDER BY 1 OFFSET 100000 ROWS FETCH NEXT 10000 ROWS ONLY"
    " SELECT * FROM (SELECT * FROM airlinesmall) temp ORDER BY 1 OFFSET 110000 ROWS FETCH NEXT 10000 ROWS ONLY"
    " SELECT * FROM (SELECT * FROM airlinesmall) temp ORDER BY 1 OFFSET 120000 ROWS FETCH NEXT 3523 ROWS ONLY"

Корзина запросов содержит запросы страниц в строковых массивах. Каждый SQL-запрос в корзине, кроме последнего, возвращает 10 000 строк.

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

close(conn)

Запустите параллельный пул.

pool = gcp;
Starting parallel pool (parpool) using the 'local' profile ...
Connected to the parallel pool (number of workers: 6).

Инициализируйте параллельный пул с помощью источника данных JDBC.

c = createConnectionForPool(pool,datasource,username,password);

Определите airlinesdata переменная.

airlinesdata = [];

Определите минимальную задержку прибытия minArrDelay переменная.

minArrDelay = [];

Используйте parfor функция для параллелизации доступа к данным с помощью корзины запросов.

Для каждого работника:

  • Получите объект подключения к базе данных.

  • Выполните запрос страницы SQL из корзины запросов и импортируйте данные локально.

  • Найдите локальную минимальную задержку прибытия.

  • Сохраните локальную минимальную задержку прибытия.

parfor i = 1: length(querybasket)

    conn = c.Value;

    local_airlinesdata = fetch(conn,querybasket(i));

    local_minArrDelay = min(local_airlinesdata.ArrDelay);

    minArrDelay = [minArrDelay; local_minArrDelay];

end

Найдите минимальную задержку прибытия, используя сохраненные задержки от каждого работника.

minArrDelay = min(minArrDelay)
minArrDelay =

   -64

Закройте параллельный пул.

delete(pool)

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

свернуть все

Подключение к базе данных, заданное как connection объект, созданный с помощью database функция, connection объект, созданный с помощью mysql функции, или connection объект, созданный с помощью postgresql функция.

Оператор SQL, заданный как вектор символов или строковый скаляр.

Дополнительные сведения о языке запросов SQL см. в руководстве SQL.

Пример: SELECT * FROM invoice выбирает все столбцы и строки из invoice таблица.

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

Размер разделения запросов SQL, заданный как числовой скаляр. Укажите этот номер, чтобы разделить запрос SQL на пользовательское количество строк для каждого пакета.

Если общее количество строк, возвращенных из исходного SQL-запроса, меньше 100 000 (по умолчанию), splitsqlquery функция возвращает исходный запрос SQL. Используйте этот входной параметр для задания меньшего количества строк в пакете.

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

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

свернуть все

Корзина запросов SQL, возвращенная как строковые массивы. Каждый SQL-запрос в корзине возвращается как строковый скаляр в строковые массивы.

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

Ограничения

  • splitsqlquery функция поддерживает только эти базы данных:

    • Microsoft® SQL Server® 2012 и более поздние

    • Oracle®

    • MySQL®

    • PostgreSQL

    • SQLite

    • Amazon Redshift®

    • Амазонка Аврора®

    • Google® Облачный SQL, который запускает образец MySQL или PostgreSQL

    • MariaDB®

    Если на connection объект использует неподдерживаемую базу данных, splitsqlquery функция отображает предупреждение и возвращает исходный запрос SQL.

  • splitsqlquery функция не поддерживает MATLAB® интерфейс с SQLite.

См. также

| | | | (Parallel Computing Toolbox) | (Parallel Computing Toolbox) | (Parallel Computing Toolbox) | (Parallel Computing Toolbox)

Внешние веб-сайты

Введенный в R2017b