Всем привет. может не совсем в тему, но все таки.

Я использую kafka jdbc connector для oracle базы. Он вычитывает данные из таблицы и пушит в топик. Я пишу sql запрос, без where блока и использую incremental mode, то есть он завязывается на какую-то колонку в таблице и добавляет к запросу where блок с этой колонкой. Так же есть проперти query suffix, там можно добавить что-то к запросу, в postgre я добавлял LIMIT 75, поэтому коннектор вычитывал по 75 строк и пушил в топик. Теперь к проблеме на проде у нас oracle 11g, FETCH там ещё не завезли и у меня нет идей, как написать запрос, который будет вычитывать всю базу от начала до конца по 75 строк?

10 ответов

12 просмотров

В оракле всегда ограничивали выборку псевдостолбцом rownum. Но работать им, сохраняя параллелизм очень затруднительно. Его нельзя ограничивать снизу: условие rownum > n никогда не выполнится, нужно оборачивать запрос и фильтровать во внешнем запросе или использовать CTE. А создание фильтра в подзапросе средствами кафка, наверное, невозможно, так что фильтр сломается. Возможно, надо сгенерить запрос вручную и отправлять его каждый раз с новым фильтром по выбранному полю, лучше через bind-переменную, чтобы не хард-парсить. Но думаю, производительность очень сильно пострадает, я бы не стал рассчитывать на быструю выгрузку даже десятков гигабайт. Разве jdbc коннектор нельзя настроить, скажем, параметром fetchSize, чтобы решить проблему на уровне драйвера и брать все нужные данные в одном запросе? Это в любом случае будет быстрее, чем выполнение множества запросов с ограничением количества строк

Привет, для jdbc source connector есть batch.max.rows - дефолтное значение 100. Т.е. если я правильно понимаю вычитывает по 100 строк.

batch.max.rows Maximum number of rows to include in a single batch when polling for new data. This setting can be used to limit the amount of data buffered internally in the connector. Type: int Default: 100 Importance: low

Serge Paschanin
batch.max.rows Maximum number of rows to include i...

У меня эта опция на source jdbc коннекторе при подключении к MySQL не работала, пришлось ограничивать силами jdbc драйвера. Добавлял параметр Fetch, как выше писалось

Кирилл- Автор вопроса
Serge Paschanin
Привет, для jdbc source connector есть batch.max.r...

не совсем, тк коннектор работает с многими базами, то нужно для ограничения фетча писать свою имплементацию, т.к во всех бд по разному, а batch ограничивает кол-во строк, которое за раз запишется в топик, но вычитывать из бд будет все данные

Serge Paschanin
batch.max.rows Maximum number of rows to include i...

Ну вот по MySQL мне вот это помогло jdbc:mysql://{{HOST}}:{{PORT}}/{{DB}}?&selectMethod=cursor&defaultFetchSize=100&useCursorFetch=true

Кирилл- Автор вопроса
Юра Ходырев
Ну вот по MySQL мне вот это помогло jdbc:mysql://{...

Для оракла такое не нашел, мб знаешь?

Кирилл
Для оракла такое не нашел, мб знаешь?

Вижу только нечто отдаленно напоминающее maxStatements, но не готов сказать на 100%, что это оно

Кирилл
Для оракла такое не нашел, мб знаешь?

https://docs.oracle.com/cd/E11882_01/appdev.112/e13995/oracle/jdbc/OracleDriver.html

Похожие вопросы

Обсуждают сегодня

Добрый вечер, Пока не совсем понимаю как наладить общение между телеграм ботом и ПО для работы с сим боксом. По самому боту так понял: - Нужен некий баланс, который можно поп...
Magic
6
сделал сайт, прикрутил в боте сайт, и виджет логина. как автоматически логинить пользователя в аккаунт(телеграм), при входе с бота?
Александра Чернивецкая
5
Объясните, пожалуйста, почему компилятор ругается на использование в условии неинициализированной переменной: int x; Task.Run(async () => { x = await somefunc(); }).Wait...
Александр
5
Ребят, подскажите, пожалуйста, почему в префиксе к ассетам, которые генерируются через фильтр | theme в шаблоне, стал вдруг появляться index.php? Вот так выглядит ссылка на а...
Виталий
1
Всем привет. Ребята, подскажите, пожалуйста. у ботов есть ограничение на отправку сообщений - 30 сообщений в секунду, эти ограничения накладываются на все сообщения? или на со...
Artem Stormageddon
4
Блин, ребята, сори за тупые вопросы. А можно ли как-то открыть вебапку по нажатию на кнопку в меню(которое появляется слева, команды)?
Artem Stormageddon
3
а плаксы из-под питона умеют только в комфортных условиях что-то выдавить из себя?)
Lencore
9
Но, может, есть уже проверенная? Наши требования такие: 1. Сообщения должны приходить из Инста в CRM оду 2. Должна быть возможность подключить несколько экаунтов Инстаграм. Р...
Alexander Sharoiko MSE / Александр Шаройко
13
Это может быть все-таки не флудвейт? у меня ботфазер принимает изменения и отображает даже что они изменились, на видео видно что он прислал якобы уже измененное описание, н...
OVERLINK
13
Коллеги, может знает кто, можно ли цвет бейджа счётчика в BackendMenu менять без бубнов?
Alex Blaze
3
Карта сайта