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

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

10 ответов

6 просмотров

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

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

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

Можно ли загрузить скрипт py в бота чтобы он работал по нему? как это сделать?
huskadam #RCC Фанат? @hitlerpvp
13
'frakturBold' => ['𝖆', '𝖇', '𝖈', '𝖉', '𝖊', '𝖋', '𝖌', '𝖍', '𝖎', '𝖏', '𝖐', '𝖑', '𝖒', '𝖓', '𝖔', '𝖕', '𝖖', '𝖗', '𝖘', '𝖙', '𝖚', '𝖛', '𝖜', '𝖝', '𝖞', '𝖟', '𝕬', '𝕭', '𝕮', '𝕯'...
Roma
4
Ребят, а за скок можно впарить анон чат с апишкой и веб админкой ?
Eugene Неелов
15
Всем привет! Напишите пожалуйста, кто мог бы оффлайн преподавать некоторые курсы по Odoo в Алматы в одном из ВУЗов? Мы сейчас вместе с Odoo запускаем университетскую программу...
Adil Dauletkhan
2
Добрый день, не подскажите, если в OC-V3 поменять страндартную директорию /storage/ на /storage2/ - не будет сильно много проблем ?
Max Dubovsky
32
Ты просто гитлеровскую эстетику плохо понимаешь. Он же всё под Цезаря делал. А это как бы запрещённый приём в политике. Пиджаки они зачем все носят? Чтобы показать что они тип...
Ivan Kropotkin
4
Добрый день, подскажите как правильно сделать filter в backend-e. Есть модель (товар) у который связь belongsToMany (компания), компаний > 4k, поэтому выборку типа ->all(); н...
Max Dubovsky
7
Каким то образом можно определить ширину экрана пользователя перед загрузкой partial-а? Надо рассчитать ширину кадров слайдера для ресайза картинок для container-fluid.
Point 111
22
А как заставить поиск искать? Есть такая формочка <select class="form-control custom-select" name="brand_id" data-handler="onGetBrands"></select>
Денис Александрович
5
с помощью чего можно бота добавить как админа в чат? (условно в боте есть кнопка, нажатие на которую приводит тебя к выбору чата и выдаче прав боту)
ηє νєямσяє
5
Карта сайта