如何最好地通过 NiFi 与 AWS RDS Postgres 交互

How best to interact with AWS RDS Postgres via NiFi

我有一个 FlowFile,我想将属性插入到 RDS 中。如果这是一台本地机器,我会创建一个 DBCPConnectionPool,引用一个 JDBC 驱动程序等

使用 RDS,我应该做什么?类似的东西(我将如何在 AWS 上执行此操作)?还是我一直在使用 ExecuteScript?如果是后者,是否有 Python 如何执行此操作的示例?

假设您要插入数据库的所有值都在流文件属性中。

使用ReplaceText处理器将流文件的内容替换为sql插入语句:

insert into mytable (id, message, start_date) values(?, ?, ?)

然后使用具有以下属性的PutSQL处理器来指定sql语句

的三个参数(?
sql.args.1.type   = 2               # NUMERIC
sql.args.1.value  = ${MY_ATTR_ID}   # get value from attribute or context variable MY_ATTR_ID

sql.args.2.type   = 12              # VARCHAR
sql.args.2.value  = ${MY_ATTR_MSG}

sql.args.3.type   = 93              # TIMESTAMP
sql.args.3.value  = ${MY_ATTR_DATE}
sql.args.3.format = yyyy-MM-dd HH:mm:ss.SSS

此处列出了所有 jdbc 数据类型:

https://docs.oracle.com/javase/7/docs/api/constant-values.html#java.sql.Types.ARRAY

根据反馈,问题可能不明确,但这里是获得与 Amazon RDS 实例通信的 NiFi(运行 在 AWS EC2 实例上)的答案:

  1. 在 EC2 实例上,下载最新的 JDBC 驱动程序 (wget "https://driver.jar")
  2. (如果需要)将 JDBC 驱动程序移动到安全文件夹中。
  3. 创建 DBCPConnectionPool,将完全解析的文件路径引用到 driver.jar(有用:使用 readlink -f driver.jar 获取路径)。
  4. 不要忘记——在您的 AWS 安全组下,添加允许您的 EC2 实例访问 RDS 的入站规则(在 Source 下,您应该将安全组您的 EC2 实例)。