talend - 列值输出的文件名
talend - filename of output from a column value
我有一份工作:
t数据库输入 ->
tMap ->
tOutputDelimited
对于最后一个组件,我需要文件的文件名基于名为 TYPE 的列之一(每行始终相同)。名为 TYPE 的列的值为 'A1',这对于数据库中的所有记录都是相同的。
在此先致谢
您将需要两个子作业,因为具有基于流程中的列的文件名意味着该文件名是从另一个子作业中提取的。
您应该有第一个子作业,将名为 TYPE 的列的值放入上下文变量中
TDBInput->tJavaRow
TDBInput:只需使用 select 查询
从您的数据库中提取不同的 TYPE 列
tJavaRow:由于输出中只有一行,您可以将此值影响到上下文变量:context.myVar=input_row.myColumn;
然后将第一个子作业连接到第二个(tDatabaseInput -> tMap -> tOutputDelimited)
,并在文件名字段中的 tFileOutputDelimited 中使用此上下文变量
"/path/"+context.myVar+".ext"
有很多方法可以做到这一点,但这里是最简单且更具可读性的工作:
tMySqlConnection_1 : 获取到数据库服务器的连接
tMysqlInput_1:查询 table 并只获取这样的值:
select TYPE from my_table limit 1
tSetGlobalVar_1 : 键 = "file_name"
, 值 = (String)row1.type
tMysqlInput_2 : 根据需要修改 table
tMap_1:映射您的数据
tFileOutputDelimited_1 : 文件名 = "C:\Users\KKL\Desktop\"+((String)globalMap.get("file_name"))
我有一份工作:
t数据库输入 -> tMap -> tOutputDelimited
对于最后一个组件,我需要文件的文件名基于名为 TYPE 的列之一(每行始终相同)。名为 TYPE 的列的值为 'A1',这对于数据库中的所有记录都是相同的。
在此先致谢
您将需要两个子作业,因为具有基于流程中的列的文件名意味着该文件名是从另一个子作业中提取的。
您应该有第一个子作业,将名为 TYPE 的列的值放入上下文变量中
TDBInput->tJavaRow
TDBInput:只需使用 select 查询
从您的数据库中提取不同的 TYPE 列tJavaRow:由于输出中只有一行,您可以将此值影响到上下文变量:context.myVar=input_row.myColumn;
然后将第一个子作业连接到第二个(tDatabaseInput -> tMap -> tOutputDelimited)
,并在文件名字段中的 tFileOutputDelimited 中使用此上下文变量
"/path/"+context.myVar+".ext"
有很多方法可以做到这一点,但这里是最简单且更具可读性的工作:
tMySqlConnection_1 : 获取到数据库服务器的连接
tMysqlInput_1:查询 table 并只获取这样的值:
select TYPE from my_table limit 1
tSetGlobalVar_1 : 键 =
"file_name"
, 值 =(String)row1.type
tMysqlInput_2 : 根据需要修改 table
tMap_1:映射您的数据
tFileOutputDelimited_1 : 文件名 =
"C:\Users\KKL\Desktop\"+((String)globalMap.get("file_name"))