如何通过NiFi与AWS RDS Postgres进行最佳互动

时间:2018-01-09 05:44:14

标签: python amazon-rds apache-nifi

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

使用RDS,我该怎么办?类似的东西(我将如何在AWS上执行此操作)?还是我坚持使用ExecuteScript?如果它是后者,是否有一个Python示例如何执行此操作?

2 个答案:

答案 0 :(得分:1)

根据反馈可能不清楚问题,但这是获得与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的入站规则(在下,您应该放置EC2实例的安全组)。

答案 1 :(得分:0)

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

使用ReplaceText处理器用sql insert语句替换流文件的内容:

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