Nifi 为插入约束生成错误的列名
Nifi generates wrong column name for insert constraint
我使用 Nife 1.13.2 在 Oracle 和 PostgresQL 之间构建 ETL 过程。
有一个用于从 Oracle 检索数据的 ExecuteSQL 处理器和一个用于将数据插入 PostgresQL 的 table 的 PutDatabaseRecord 处理器。在 PostgresQL 的处理器中配置了 INSERT_IGNORE 选项。两个 table 中的键列名称都是 DOC_ID。但是由于插入操作,出于某种原因,Nifi 生成了错误的列名称,正如从以下行看到的那样:ON CONFLICT (DOCID) DO NOTHING
这是整个错误:
Failed to put Records to database for StandardFlowFileRecord[uuid=7ff8189a-2685-4f
9a-bab6-d0bc9b4f7ae0,claim=StandardContentClaim [resourceClaim=StandardResourceClaim[id=1623310567664-311, container=default, section=311], offset=604245, length=610377],offset=211592,name=7ff8189a-2685-4f9a-bab6-d0bc9b4f7ae0,size=6106].
Routing to failure.: java.sql.BatchUpdateException: Batch entry 0 INSERT INTO src.rtl_sales(doc_id, complete, out_sale_sum_disc, kpp_num, org_id, kpp_status, im) VALUES (1830335807, '2020-06-12 +03', '530.67'::numeric, 565900, 62, 4, NULL
) ON CONFLICT (DOCID) DO NOTHING was aborted: ERROR: column "docid" does not exist
这是 PostgresQL 中的 table:
这是队列中的部分 FlowFile:
我和妮菲怎么了?
OK,所以在PutDatabaseRecord:
中一定是Translate Field Names -> False
我使用 Nife 1.13.2 在 Oracle 和 PostgresQL 之间构建 ETL 过程。
有一个用于从 Oracle 检索数据的 ExecuteSQL 处理器和一个用于将数据插入 PostgresQL 的 table 的 PutDatabaseRecord 处理器。在 PostgresQL 的处理器中配置了 INSERT_IGNORE 选项。两个 table 中的键列名称都是 DOC_ID。但是由于插入操作,出于某种原因,Nifi 生成了错误的列名称,正如从以下行看到的那样:ON CONFLICT (DOCID) DO NOTHING
这是整个错误:
Failed to put Records to database for StandardFlowFileRecord[uuid=7ff8189a-2685-4f
9a-bab6-d0bc9b4f7ae0,claim=StandardContentClaim [resourceClaim=StandardResourceClaim[id=1623310567664-311, container=default, section=311], offset=604245, length=610377],offset=211592,name=7ff8189a-2685-4f9a-bab6-d0bc9b4f7ae0,size=6106].
Routing to failure.: java.sql.BatchUpdateException: Batch entry 0 INSERT INTO src.rtl_sales(doc_id, complete, out_sale_sum_disc, kpp_num, org_id, kpp_status, im) VALUES (1830335807, '2020-06-12 +03', '530.67'::numeric, 565900, 62, 4, NULL
) ON CONFLICT (DOCID) DO NOTHING was aborted: ERROR: column "docid" does not exist
这是 PostgresQL 中的 table:
这是队列中的部分 FlowFile:
我和妮菲怎么了?
OK,所以在PutDatabaseRecord:
中一定是Translate Field Names -> False