exponenta event banner

splitsqlquery

Разделить SQL-запрос с помощью подкачки

Описание

пример

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

пример

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

Примеры

свернуть все

Определите минимальную задержку прибытия с помощью большого набора полетных данных, хранящихся в базе данных. Доступ к базе данных в среде serial 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.

См. также

| | | | (Панель параллельных вычислений) | (Панель инструментов параллельных вычислений) | (Панель инструментов параллельных вычислений) | (Панель инструментов параллельных вычислений)

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

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