Прежде всего:
Вам не нужно для предварительного разделения данных в процессе ETL. Утилита LOAD будет обрабатывать данные для вас. Ваш процесс Python может либо записать данные для загрузки в плоский файл, либо записать напрямую в канал (из которого читает утилита LOAD). Почти в каждом случае проще позволить базе данных обрабатывать разделение данных для вас.
Комментарий Инфоцентра о том, что сплиттеры занимают циклы ЦП, вероятно, не стоит беспокоиться. Как правило, это применимо только в экстремальных ситуациях, когда существует гораздо больше разделов базы данных (то есть, когда вам нужно иметь несколько процессов, разделяющих данные) и когда загрузка ЦП на узлах базы данных очень высока.
С точки зрения НАГРУЗКИ количество времени, которое вы сэкономите, предварительно разделив данные, ничтожно мало. Ограничивающим фактором при загрузке данных является запись данных на диск, а не их разбиение. Если перезагрузка данных - ваш основной метод восстановления, я бы не стал сильно беспокоиться об этом.
Если все это не убеждает вас, и вы действительно хотите пойти по пути разделения вашего ETL-процесса, DB2 предоставляет API (в C), который приложения могут вызывать для обработки это: db2GetDistMap () и db2GetRowPartNum (). Вы можете написать собственный модуль Python для этого.
Это наиболее полезно в тех случаях, когда приложение использует SQL для вставки строк в таблицу (в отличие от использования утилиты LOAD) и порождает несколько потоков для записи данных в каждый раздел независимо (т. Е. Каждый поток выполняет преобразование и загрузка параллельно). Если вы не можете распараллелить часть преобразования, не беспокойтесь об этом.
Очевидно, что есть много переменных, поэтому YMMV.