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"

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

Задайте 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®

    • Amazon Aurora®

    • Google® Cloud SQL, который запускает экземпляр MySQL или PostgreSQL

    • MariaDB®

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

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

Смотрите также

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

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

Введенный в R2017b