【问题标题】:PutSQL date format error cannot convert date value to timestampPutSQL 日期格式错误无法将日期值转换为时间戳
【发布时间】:2019-12-12 14:58:55
【问题描述】:

我正在使用 apache nifi 使用自定义 SQL 脚本查询 Teradata 数据库并将结果存储在 Oracle 数据库中。
我在nifi中使用的数据流如下:

  1. ExecuteSQL(执行 SQL 选择脚本)
  2. UpdateRecord(添加 3 个未包含在原始 sql 选择中的附加列,即 id、created_dt 和 updated_dt)
  3. ConvertAvroToJson(这里没有什么特别的,只是将 Avro 转换为 json)
  4. ConvertJsonToSQL(这里没有什么特别的,只是将 Json 转换为 SQL 插入查询)
  5. UpdateAttribute(使用 以下格式 ${sql.args.39.value:toDate("yyyy-MM-dd"):format("yyyy-MM-dd")} 和 ${sql.args.40.value:toDate("yyyy-MM-dd"):format("yyyy-MM-dd")} )
  6. PutSQL(执行从前一个流程创建的插入语句)


第 6 步是我遇到以下错误的地方,我尝试了一些在线资源,但没有帮助。 对于一个非常简单的用例,我花了几天时间才弄明白,我认为越来越接近了,但我需要一些关于如何正确配置和在日期列上插入数据的建议。

错误日志

 due to java.sql.SQLDataException: The value of the sql.args.39.value is '2019-12-12', which cannot be converted to a timestamp; routing to failure: java.sql.SQLDataException: The value of the sql.args.39.value is '2019-12-12', which cannot be converted to a timestamp

数据库架构
created_dt 日期 更新日期

UpdateAttribute 传出数据
“created_dt”:“2019-12-12”,
“updated_dt”:“2019-12-12”

sql.args.39.type
93
sql.args.39.value
2019-12-12

【问题讨论】:

    标签: apache-nifi


    【解决方案1】:

    在查询本身中转换您的值,而不是通过 UpdateAttribute 处理器。它将被视为一个字符串。例如,

    INSERT INTO Table (crea_dt, ...)
    VALUES (${crea_dt:toDate("yyyy-MM-dd"):format("yyyy-MM-dd")}, ...)
    

    【讨论】:

    • 感谢您的建议,我实际上正在考虑这样做,但我不知道如何在 INSERT 查询中插入演员表。关于我如何做到这一点的任何建议?
    【解决方案2】:

    使用 UpdateAtribute 将 sql.args.39.type 更改为 91,而不是步骤 5。 93 是 TIMESTAMP,需要 DATE 类型。

    有关更多信息,您可以阅读有关java.sql.types 的更多信息。

    【讨论】:

      【解决方案3】:

      尝试将时间“00:00:00”作为字符串添加到日期以使其成为时间戳,例如${sql.args.39.value:toDate("yyyy-MM-dd"):format("yyyy-MM-dd 00:00:00")}

      【讨论】:

        猜你喜欢
        • 2016-11-26
        • 1970-01-01
        • 2011-03-05
        • 2019-02-25
        • 1970-01-01
        • 2021-03-13
        • 2015-08-19
        • 2020-02-23
        • 1970-01-01
        相关资源
        最近更新 更多