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

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

10 ответов

11 просмотров

В оракле всегда ограничивали выборку псевдостолбцом 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

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

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

Ребята, всем привет. Подскажите, пожалуйста, можно ли как-то через бота понять, что этого бота добавили в группу\канал и выдали ему права администратора?
Artem Stormageddon
9
А не хотим ли мы развлечься? 😉 Но так чтобы с пользой для наших профессиональных навыков?? 👨‍🎓👩‍🎓 Предлагаю на октябрь запланировать тестовый запуск новой командной игры "Игр...
Andrii Kurdiumov
2
Это переведённый текст с английского. Я не говорю на русском, но могу использовать переводчик Телеграм. Приветствую! Я начинающий веб-разработчик и все еще учусь. В настояще...
𐩱𐩪𐩣𐩱𐩲𐩺𐩡
2
у кого сколько оперативы на базе данных ?
АДИЛЬБЕК
4
Привет всем! Почему этот код не срабатывает при добавлении или удалении пользователя из чата? bot.on('chat_member', async (ctx) => { console.log(ctx); }) bot.launch({allo...
Alexander
5
Через бот апи возможно получить ID стикерпака? Не ссылку.
Vexylon [АФК до 09.09]
5
В тг можно спарсить всех кто пишет в группе? Если список участников скрыт
S
3
Привет Хочу сделать аналог iCloud’а для своих проектов, чтобы пользовательская информация хранилась в облаке, была доступна во всех сервисах, её можно было подсасывать везде)...
Виталий
9
Доброе утро, мультиязычные сайты делал кто-нибудь? Какие подводные камни? Нужно чего нибудь допом ставить? Как поступить? В теории сделать две папки ru en и туда кидать страни...
Racoon Mitya
2
Ребят, а двух-факторку для плагина Users и для бэкенда октября кто-то прикручивал? Поделитесь опытом
Constantine Anikin
4
Карта сайта