通过Apache NiFi流插入或更新数据库记录

时间:2017-03-28 17:35:29

标签: sql apache-nifi

我正在尝试使用NiFi在具有类似表格结构的两个数据库之间传输数据。数据结构示例:

User: {varchar name, integer id}.

没有"最大值列"因此无法确定是否有新数据。所以每次我创建"快照"全表内容。问题是,目标数据库中是否应插入或更新特定记录尚不清楚。

我创建了两个处理器分支:带插入和更新。仅插入适用于新记录,仅更新现有记录。但是(!)PutSQL处理器可以处理大量的流文件。 例如,批量大小为100,处理器每天工作一次。假设昨天有98条记录。它们将被插入。今天有200条记录(昨天有98条记录,有102条新记录)。在此流程中,如果NiFi尝试更新前100个记录并插入它们,则两个操作都将失败:前98个记录应该更新,而最后2个应该插入。

如何解决这个问题?我知道可以使用批量1,但它的工作速度太慢。

1 个答案:

答案 0 :(得分:1)

我建议在你的SQL语句中解决这个问题,因为NiFi不会知道记录的先前状态。如果您的数据库支持MERGEOracleSQL Server插入,.state('campaign', { url: "/campaign/{campaignId:int}", templateUrl: campaign_template, controller: 'CampaignCtrl', parent: 'org', abstract: true, resolve: { campaign: function(CampaignService, $stateParams) { console.log('$stateParams is populated here!', $stateParams) return CampaignService.get($stateParams.campaignId) .then(function(campaign) { return campaign; }); } } 语句将是理想的。否则,您可以为源表中的每个记录制作INSERT和UPDATE,使它们以表中存在的用户为条件。