我正在测试NiFi,以替换我们当前的提取设置,该设置从一个表的多个MySQL分片中导入数据并将其存储在HDFS中。
我正在使用GenerateTableFetch
和ExecuteSQL
实现这一目标。
每个传入流文件将具有database.name
用于选择相关分片的DBCPConnectionPoolLookup
属性。
问题是,假设我有2个分片从表帐户的shard_1
和shard_2
中提取数据,还有updated_at
作为Maximum Value Columns
,这是不为每个分片存储table@updated_at
的状态。每个状态中的表只有1个条目。
当我签入数据源时,我看到shard_2流文件文件被删除而没有传递给ExecuteSQL。我的猜测是,因为首先执行shard_1查询,然后在shard_2查询到来时,才根据shard_1的updated_at检查记录,由于它返回空值,因此删除了文件。
有人遇到这个问题吗?还是我错过了什么?
答案 0 :(得分:1)
在将状态存储在数据库获取处理器(例如QueryDatabaseTable,GenerateTableFetch)中的方案之后,添加了通过DBCPConnectionPoolLookup选择不同数据库的功能。另外,获取数据库名称在RDBMS驱动程序之间有所不同,它可能在DatabaseMetaData或ResultSetMetaData中,可能在getCatalog()或getSchema()中,或都不在其中。
我写了NIFI-5590来介绍这一改进。