我有一张像这样的桌子
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
筛选器已应用,tenant1的内容将丢失。
我想出的可能的解决办法(没有一个能让我真正满意,都显得笨拙):
-
不并行化配置表,然后迭代每个条目。然而,这可能需要一些相当昂贵的转换来重新运行(最好只计算一次)。
-
-
另一个可能的解决方案是通过工作流运行器(如Oozie/Airflow)从外部对配置进行参数化,但是,这会触发很多作业(以防有很多租户在场)。记住代价高昂的转换。
你看到一条优雅的出路了吗?