【问题标题】:Apache NIFI - Fail INSERTING using PutDatabaseRecord in a table with a Enum columnApache NIFI - 在具有枚举列的表中使用 PutDatabaseRecord 插入失败
【发布时间】:2022-10-14 03:22:13
【问题描述】:

我正在使用 Apache Nifi 学习/做我的第一个 ETL,但我有一个问题,我正在迁移的数据来自 JSON 文件并进入 Postgres 数据库,但在插入部分失败

数据库中的一列被定义为枚举:

CREATE TYPE "Insurer" AS ENUM ('INSURER-A', 'INSURER-B');

  • 该表的列名为insurer,类型为Insurer

  • 并且 JSON 数据将字段保险人作为字符串 'INSUER-A'

当然,提示说我需要进行某种类型的铸造......但我不知道如何去做,有什么建议吗?

【问题讨论】:

    标签: database etl apache-nifi


    【解决方案1】:

    我假设您正在使用设置了Infer Schema 的记录阅读器。如果是这样,NiFi 无法知道字符串/文本字段是数据库端的枚举。更糟糕的是,JDBC 本身不支持 Enum 类型,它们被视为字符串。所以在这种情况下,NiFi 和 Postgres 驱动程序都认为该字段是一个字符串并将其视为字符串,但 Postgres DB 抱怨它不是正确的类型。

    您可以通过自己指定架构来解决此问题。例如,使用指定here 的“心情”枚举,您可以使用以下模式:

    然后NiFi会知道传入的数据是enum类型。然而,这揭示了 NiFi 中的一个错误,我们不会将枚举类型转换为 JDBC 字符串类型而是报告错误。我已经写了NIFI-10635 来介绍这个修复,我希望它会出现在即将发布的 NiFi 1.19.0 版本中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-03-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多