У меня есть таблица типа
tenant_id,start_date,end_date,use_fancy_transformation
1,20180101,20180201,true
2,20180103,20180115,false
и датафрейм типа
tenant_id,thing,date,value
1,1,20180105,1
2,2,20180107,2
1,2,20180120,2
Теперь есть некоторая бизнес-логика, которая должна выполнять разные вещи (условно).Простейший случай - экспорт данных за указанный диапазон дат из первой таблицы.Очевидно, диапазон дат для каждого арендатора различен.
Поэтому при выполнении (в псевдокоде) df.filter(date between(tenant2_start, tenant2_end).write.partitionBy("tenant_id", "current_date").parquet
применяется фильтр, а содержимое для арендатора 1. теряется.
Возможные решения, которые я придумала(никто не удовлетворяет меня, все кажутся неуклюжими):
- Не распараллеливание таблицы конфигурации, а затем повторение каждой записи.Однако это может потребовать некоторых довольно дорогостоящих преобразований для повторного запуска (которые оптимально будут вычисляться только один раз).
- Возможно выполнение только итераций на объекте конфигурации после дорогостоящих преобразований, но я не делаюдумаю, что это было бы хорошим решением, так как когда экспорт для первого арендатора работает, но не выполняется для второго, тогда искра / пряжа перезапустится с нуля и пересчитает оба.
- Другим возможным решением будет параметризация конфигурации извне с помощью рабочего потока (например, Oozie / Airflow), однако это вызывает много заданий (в случае присутствия большого количества арендаторов).Помните дорогостоящие преобразования.
Видите ли вы элегантный выход?