【问题标题】:Issue with UUID datatype when laoding postgres table using Apache NiFi使用 Apache NiFi 加载 postgres 表时出现 UUID 数据类型问题
【发布时间】:2018-08-06 12:59:38
【问题描述】:

数据库

  • Postgres 9.6
  • 包含多个具有 UUID 列(包含每条记录的 ID)的表

NiFi

  • 最新版本 (1.7.1)
  • 使用 Avro 1.8.1(据我所知)

问题描述

使用 ExecuteSQL 处理器调度表时,出现以下错误消息:

ExecuteSQL[id=09033e32-e840-1aed-3062-6e8cbc5551ba] ExecuteSQL[id=09033e32-e840-1aed-3062-6e8cbc5551ba] 由于 createSchema 无法处理会话:未知 SQL 类型 1111 / uuid(表:国家, column: id) 无法转换为 Avro 类型;处理器在管理上产生了 1 秒:java.lang.IllegalArgumentException:createSchema:未知 SQL 类型 1111 / uuid(表:国家,列:id)无法转换为 Avro 类型

请注意,流文件不会从传入队列中删除,也不会发送到“失败”关系,从而导致失败尝试的无限循环。

尝试解决问题

  • 我尝试启用 ExecuteSQL 处理器的 Use Avro Logical Types 属性,但出现了同样的错误。

可能但不是首选的解决方案

  • 我目前对每个表执行 SELECT *。一个可能的解决方案(我认为)是指定每一列,并让查询将 uuid 转换为字符串。虽然这可行,但我强烈希望不必单独列出每一列。

最后一点

【问题讨论】:

    标签: postgresql uuid avro apache-nifi


    【解决方案1】:

    我相信 UUID 不是标准的 JDBC 类型,它是 Postgres 特有的。

    JDBC 类型类显示 SQL 类型 1111 为“OTHER”:

     /**
         * The constant in the Java programming language that indicates
         * that the SQL type is database-specific and
         * gets mapped to a Java object that can be accessed via
         * the methods <code>getObject</code> and <code>setObject</code>.
         */
            public final static int OTHER           = 1111;
    

    所以我不确定 NiFi 怎么知道在这里做什么,因为它可能是任何东西,具体取决于 DB 的类型。

    【讨论】:

      【解决方案2】:

      您是否尝试过创建将列定义为 ::text 的视图?

      SELECT
          "v"."UUID_COLUMN"::text AS UUID_COLUMN
      FROM
      ...
      
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-04-05
        • 2019-01-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多