在Bonobo中使用条件服务的最佳方法是什么?

时间:2018-03-31 16:21:05

标签: python database postgresql etl bonobo-etl

我想使用Bonobo将数据从一个Postgres数据库移动到另一个不同服务上的数据库。我已经配置了连接,并希望在提取过程中使用一个连接,在加载过程中使用一个。

这是我的测试设置:

source_connection_config_env = 'DEV'
source_connection_config = get_config(source_connection_config_env)

target_connection_config_env = 'TRAINING'
target_connection_config = get_target_connection_config(target_connection_config_env)

...

def get_services(**options):
    if connection == 'source':
        return {
            'sqlalchemy.engine': create_postgresql_engine(**{
                    'host': source_connection_config.source_postres_connection['HOST'],
                    'name': source_connection_config.source_postres_connection['DATABASE'],
                    'user': source_connection_config.source_postres_connection['USER'],
                    'pass': source_connection_config.source_postres_connection['PASSWORD']
                })
        }

    if connetion == 'target':
        return {
            'sqlalchemy.engine': create_postgresql_engine(**{
                    'host': target_connection_config.target_postres_connection['HOST'],
                    'name': target_connection_config.target_postres_connection['DATABASE'],
                    'user': target_connection_config.target_postres_connection['USER'],
                    'pass': target_connection_config.target_postres_connection['PASSWORD']
                })
        }

我不确定改变联系的最佳位置在哪里,或者实际上如何实现。

提前致谢!

1 个答案:

答案 0 :(得分:0)

据我了解,您希望在同一个图表中同时使用源连接和目标连接(我希望我能做到这一点)。

所以你不能有条件,因为它只返回一个。

相反,我会以两种方式返回两者:

alpha

然后在转换中使用不同的连接:

def get_services(**options):
    return {
        'engine.source': create_postgresql_engine(**{...}),
        'engine.target': create_postgresql_engine(**{...}),
    }

请注意,服务名称只是字符串,没有强制执行约定或命名模式。 ' sqlalchemy.engine'名称只是默认名称,但只要您使用实际使用的名称配置转换,就不必同意。