如何在talend中插入父记录和子记录?

时间:2018-06-05 16:31:43

标签: talend

我有一个场景,我需要插入父表后跟子表,其中父表id在子表中设置为外键。 例: 在我需要为子表中的学生插入标记之后,将记录插入学生表。这必须按顺序和单一工作进行。

3 个答案:

答案 0 :(得分:0)

您必须先在父表中插入所有记录,然后在提交此表后,您应该加载子表记录。 主要的是在加载后提交父表,这样它就不会违反父子关系。 如果完成或需要任何澄清,请回复我。

答案 1 :(得分:0)

您可以将其拆分为两个作业,并为业务流程创建一个主作业。 这就是我的建议。创建一个包含两个tRunJobs的主作业(一个加载父项,一个加载子项)。父作业将使用传入数据填充父表,但也会将数据从tBufferOutput组件传递到主作业。此数据将被送入下一个作业(加载子表)。 希望这会有所帮助。

答案 2 :(得分:0)

如果我理解正确,学生可以做的一般数据(家长)和学生标记(孩子):

  • 如果两个表都有自动增量ID :在父项中插入后,使用像studentID这样的列(来自输入)作为子插入的查找键
    • 第一个subjob有tuniq来获取重复的一般数据一次和tfilter(或tmap)来获得只需要的列
    • 第二个subjob是显而易见的(使用源中的密钥查找,如果没有在下面看到)

overview

  • 如果源中没有列可以是ID :这里有一些想法......

使用ETL概念在tmp文件中加载具有localy生成的ID

class YourComponent extends Component {
  state = {
    isLoading: true,
    // the other states
  };

  componentDidMount() {
    loadImageFunction().then() // Whatever you want to do
    .then(() => this.setState({ isLoading: false }));
  }

  render() {
    if (this.state.isLoading) {
      return <div></div>;
    }
    return <div>Your images go in here...</div>;
  }
}

或从第二个tMap中使用tMysqlLastInsertId作为查找从DataBase获取lastID

显然,如果您的方案不同,请发送具体信息