Spark 2.4.6 + JDBC Reader: если для раскрытия предиката задано значение false, читаются ли данные параллельно искрой из движка?

Я пытаюсь извлечь данные из большой таблицы в SAP HANA, размер которой составляет около 1,5 ТБ, и лучший способ - работать параллельно между узлами и потоками. Spark JDBC - идеальный кандидат для этой задачи, но для фактического параллельного извлечения требуется установить столбец раздела, нижнюю / верхнюю границу и количество разделов. Чтобы упростить операцию извлечения, я подумал о добавлении столбца добавленного раздела, который будет функцией row_number (), и использовать MIN (), MAX () как нижнюю / верхнюю границы соответственно. И тогда операционная группа просто должна будет предоставить необходимое количество разделов.

Проблема в том, что в HANA не хватает памяти, и очень вероятно, что row_number () слишком затратна для движка. Я могу только представить, что более 100 потоков запускают один и тот же запрос во время каждой выборки, чтобы применить фильтры where и получить соответствующий фрагмент.

Итак, мой вопрос: как будет вести себя Spark, если я отключу опцию предиката pushdown? он читается только одним исполнителем, а затем фильтры применяются на стороне искры? Или это волшебство, чтобы разделить часть извлечения из БД?

Что вы могли бы предложить для извлечения такой большой таблицы с помощью доступной программы чтения JDBC?

Заранее спасибо.


person Jorge Cespedes    schedule 15.09.2020    source источник


Ответы (1)


Перед выполнением вашего основного запроса из Spark запустите предварительный запрос, чтобы получить размер загружаемого набора данных, то есть, как вы упомянули Min (), Max () и т. Д.

Ожидая, что данные будут равномерно распределены между ключами Min и Max, вы можете разделить между исполнителями в Spark, указав Min / Max / Number of Executors.

В этом случае вам не нужно (вы хотите) изменять основной источник данных, добавляя дополнительные столбцы для поддержки приема данных.

person skjagini    schedule 15.09.2020
comment
Идея добавления нового вычисляемого столбца, такого как row_num, заключается в том, чтобы снять ответственность за определение подходящего столбца раздела для более чем 700 таблиц за пределами группы операций и просто потребовать, чтобы они сказали, что я хочу, чтобы это количество подключений одновременно к HANA для этой таблицы. - person Jorge Cespedes; 16.09.2020
comment
Если у вас есть возможность изменять количество разделов, это может быть 10 разделов сейчас и 20 в будущем. Или для разных вариантов использования могут потребоваться разные разделы - person skjagini; 16.09.2020