我正在尝试使用NiFi在具有类似表格结构的两个数据库之间传输数据。数据结构示例:
User: {varchar name, integer id}.
没有"最大值列"因此无法确定是否有新数据。所以每次我创建"快照"全表内容。问题是,目标数据库中是否应插入或更新特定记录尚不清楚。
我创建了两个处理器分支:带插入和更新。仅插入适用于新记录,仅更新现有记录。但是(!)PutSQL处理器可以处理大量的流文件。 例如,批量大小为100,处理器每天工作一次。假设昨天有98条记录。它们将被插入。今天有200条记录(昨天有98条记录,有102条新记录)。在此流程中,如果NiFi尝试更新前100个记录并插入它们,则两个操作都将失败:前98个记录应该更新,而最后2个应该插入。
如何解决这个问题?我知道可以使用批量1,但它的工作速度太慢。
答案 0 :(得分:1)
我建议在你的SQL语句中解决这个问题,因为NiFi不会知道记录的先前状态。如果您的数据库支持MERGE
,Oracle,SQL 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,使它们以表中存在的用户为条件。