Talend中如何将tMysqlInput查询结果作为tMongoDBInput的输入
嘿,作为Talend新手碰到这个连接问题太正常啦,我给你拆解下怎么在单个作业里实现这个需求,步骤超清晰的:
实现步骤
1. 配置tMysqlInput获取单个值
- 先把
tMysqlInput拖到作业画布上,配置好你的MySQL连接信息,然后编写能返回单行单列的SELECT语句,比如:
记得先在数据库客户端测试下这个语句,确保它确实只返回一行一列的结果。SELECT target_id FROM user_info WHERE user_name = 'test_user'
2. 用tSetGlobalVar存储查询结果
- 拖一个
tSetGlobalVar组件过来,用Row > Main把它和tMysqlInput连接起来 - 打开
tSetGlobalVar的配置界面,点击「Edit schema」,确保它的schema和tMysqlInput的输出完全一致(就是那单个列,比如列名是target_id) - 在「Variables」区域添加一个变量,比如命名为
mysql_target_id,然后在「Value」列选择对应的列(比如row1.target_id),这样就把MySQL查到的单个值存成全局变量了。
3. 在tMongoDBInput中引用全局变量查询
- 拖入
tMongoDBInput,配置好你的MongoDB连接信息 - 在查询配置的「Query」框里,用全局变量构造查询条件。比如你要查询
user_id等于MySQL返回值的文档,就这么写:
这里的{ "user_id": "${globalMap.get(\"mysql_target_id\")}" }${globalMap.get("mysql_target_id")}是Talend的语法,运行时会自动替换成我们从MySQL拿到的实际值。
4. 验证输出结果
- 可以在
tMongoDBInput后面接一个tLogRow组件,用Main连接起来,这样运行作业后就能在控制台看到MongoDB返回的所有符合条件的文档了;如果需要把结果写入其他地方,也可以换成tMongoDBOutput或者其他输出组件。
另外给你个小补充:如果担心全局变量的作用域问题,也可以用上下文变量来实现——先在作业的「Contexts」里定义一个变量,然后用tJavaRow把MySQL查到的值赋值给上下文变量,不过用tSetGlobalVar是最直接简单的方式啦。
内容的提问来源于stack exchange,提问作者Dan Bmd
相关产品推荐
相关产品推荐

