oracle 如何使用Nifi从DB数据写入CSV文件,所有数据都经过排序,并且不同文件中没有相同的值?

xj3cbfub  于 2022-11-03  发布在  Oracle
关注(0)|答案(1)|浏览(342)

我在Oracle数据库中有一个以下格式的数据表,用于保存系统中的所有事务:
| 客户ID|交易ID|
| - -|- -|
| 第001章|事务标识_01|
| 第001章|事务标识_02|
| 002年|事务标识_03|
| 003年|事务标识_04|
如您所见,每个客户ID都可以在此表中生成许多事务。
现在,我需要使用Apache Nifi将每天的数据导出到CSV文件中。但要求是每个文件中需要有大约10 k个事务(这一点并不固定,可以多一点或少一点),行按客户ID排序。这应该很简单,我已经使用此处理器完成了此操作:

但是,还有一个额外的要求,即确保每个客户ID都应该在同一个文件中。不应该出现客户ID 005在文件1中有一些交易,而在文件2中有另一个交易的情况。
如果我需要用纯代码来写这个逻辑,我想我可以用分页来做DB查询,并且在写每个文件之前写一些代码来检查末尾的尾随数据,以便与下一页进行比较。但是当涉及到Nifi的实现时,我仍然不知道如何做。

c9x0cxw0

c9x0cxw01#

但是,还有一个额外的要求,即确保每个客户ID都应该在同一个文件中。不应该出现客户ID 005在文件1中有一些交易,而在文件2中有另一个交易的情况。
尝试使用I think ExecuteSQLRecord和一个自定义选择,它可以从Oracle获得您想要的内容,然后使用配置为使用客户ID作为分区列的PartitionRecord,这将打破记录集。
我不知道Oracle是如何做到这一点的,但这将是我在Postgres中的做法:
SELECT CUSTOMER_ID, ARRAY_AGG(TRANSACTION_ID) FROM TRANSACTIONS GROUP BY CUSTOMER_ID
这将产生:001, {trans_id_01, trans_id_02...},并确保数据库中的每个结果条目每行正好有一个客户,并且在单个列表中枚举了他们的所有事务。

相关问题