Быстро прочитать миллион записей с сервера SQL с помощью хранимой процедуры и записать его в CSV, используя Java и Spring Boot - PullRequest
0 голосов
/ 17 октября 2019

У нас есть хранимая процедура, которая используется для выбора миллиона записей. Хранимая процедура выглядит примерно так:

CREATE PROCEDURE ABC(@CustID varchar(20))
AS
BEGIN

WITH temporaryTable as (SELECT ab,bc,... FROM Table); // a very huge select query

SELECT a,b, ..., l FROM temporaryTable OUTER JOIN(some_table1)...  union all SELECT m,n,..., z FROM temporaryTable OUTER JOIN(some_table2); // two very huge select query with union

END

Мне было поручено извлечь результат с помощью этой хранимой процедуры и записать его в файл CSV с использованием Java и Spring Boot.

Я пыталсяспособ spring-data-jpa @ NamedStoredProcedureQuery для получения результата и записи его в CSV с помощью opencsv , но это слишком медленно. Я использовал setFirstResult () & setMaxResult () методы, но не увидел никакой разницы ( возможно, для этого требуется, чтобы хранимая процедура была настроена по-другому, хотя я не уверен. )

Сейчас я пытаюсь использовать StoredProcedureItemReader Spring Batch (все еще настраиваю ...) для чтения данных и FlatFileItemWriter для записи в CSV, но я новичок в этом и неуверен, поможет ли это или нет, хотя я думаю, что эта ссылка (https://docs.spring.io/spring-batch/4.1.x/reference/html/scalability.html#scalability) может помочь.

Мне нужно направление, в котором я могу получить желаемый результат.

Спасибои как всегда, любой полезный жест от сообщества будет высоко оценен !!!

1 Ответ

0 голосов
/ 23 октября 2019

Вместо этого я бы просто использовал шаг Reader-> Writer с JdbcCursorItemReader для вашего Reader и FlatFileItemWriter для вашего Writer.

sql для Reader будет просто вашим SELECT из вашего вопроса. И Writer будет использовать DelimitedLineAggregator для создания выходных данных CSV.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...