Day18 NiFi - 与 AWS Athena & AWS Redshift 对接设定

今天来介绍的是如何透过 NiFi 来与 Athena 和 Redshift 来取得或写入资料,其实两个设定都很类似,怎麽说呢?让我们继续看下去。

Athena & Redshift Introduction

Athena 是一个底层为 Presto 为底所建立起来的 Search Engine,它帮助 User 可以轻松透过 SQL 来查询 s3 的资料。

而 Redshift 是 AWS 的 DataWarehouse,他是以 PostgreSQL 为底,它本身可以储存资料,也可以透过 Redshift Spenctrum 来建立 external table 对 S3 资料做查询,一样支援用 SQL 做查询等操作。

简单来说,两个差别在於 Athena 本身不储存 data,因为他是去对 S3 的资料做操作; Redshift 本身则是会储存资料。此外,Redshift 因为他是以 PostgreSQL 为底,所以两边 SQL 在有些 Query 会有点小差异。

事前作业

简单概要介绍一下两个服务之後,接下来该如何在 Nifi 来使用他们呢?这边我先帮大家整理了一个表格,待会就会用到:

Athena Redshit
JDBC Driver link Athena JDBC Redshift JDBC
Driver Class Name com.simba.athena.jdvc.Driver com.amazon.redshift.jdbc42.Driver
DB Connection URL jdbc:awsathena://AwsRegion=[region];User=[AwsAccessKeyID];Password=[AwsSecretAccessKey];S3OutputLocation=[s3_folder] jdbc:redshift://nifi-redshift-cluster-testing.creydll8nevp.ap-northeast-1.redshift.amazonaws.com:5439/dev;AccessKeyID=[access_key_id];SecretAccessKey=[secret_access_key];Region=[region]

待会如果我们要在 NiFi 对这两个服务做操作的时候,需要先下载这两个服务的 JDBC Driver,读者们可以点阅相关连结做下载。此外,我也有整理个别 JDBC Driver 的 class name 以及 connection URL,待会就可以轻松设定完成。

How to use?

首先我们现在 Controller Service 新增2个 DBCPConnectionPool,个别 for Athena 和 Redshift:

再来,我们先对 AthenaConnectionPool 来做设定,只要设定好三个参数:

  • Database Conncetion URL
    填入 jdbc:awsathena://AwsRegion=[region];User=[AwsAccessKeyID];Password=[AwsSecretAccessKey];S3OutputLocation=[s3_folder],记得要填上自己的 key 相关资讯
  • Database Driver Calss Name
    填入 com.simba.athena.jdvc.Driver
  • Database Driver Location(s)
    填上刚刚下载的 JDBC Driver 在 Container 上的哪一个路径。

设定完没问题就可按下 Apply,接着 RedshiftConnectionPool 也是同样的设定方式:

  • Database Conncetion URL
    填入 jdbc:redshift://nifi-redshift-cluster-testing.creydll8nevp.ap-northeast-1.redshift.amazonaws.com:5439/dev;AccessKeyID=[access_key_id];SecretAccessKey=[secret_access_key];Region=[region],记得要填上自己的 key 相关资讯
  • Database Driver Calss Name
    填入 com.amazon.redshift.jdbc42.Driver
  • Database Driver Location(s)
    填上刚刚下载的 JDBC Driver 在 Container 上的哪一个路径。

全部设定完後,就可以 Enabled 起来了。接着如何在 Processor 做应用呢?我们这边套用PutSQL作为简单范例,先来看一下它的设定:

  • JDBC Connection Pool
    选择刚刚建立好的 DB Connection Controller Service
  • SQL Statement
    这边可以如同 Athena 或 Redshift 来去执行 SQL 指令,如此一来就会取得对应的 Record。

其实其他相关的 SQL Processor 都是一样的操作,ex. QueryDatabaseTableRecord, ExecuteSQL 等,都是只要指定好先前建立好的 Controller Service,接着就可以用 SQL 去对服务的资料做操作,这样是不是十分简单呢?

小总结

今天这篇比较要去注意的是 JDBC Driver 的下载与设定,因为有牵动到 Controller Service,所以相较於其他服务是比较繁琐的,因为没有原生的 Processor 可以做使用。
但只要设定好其实用起来并不会太难,同时你也会发现这样的设定流程与我们先前在整合 RDB 的操作其实很类似,都是要透过 JDBC Driver 才能去做 DB 等载体去做操作,所以倘若未来有没支援的 Processor 时,或许 JDBC 这样的方式能解决你的问题。

Reference


<<:  Day18 Redis架构实战-持久化RDB

>>:  Day 18 - 用 canvas 制作电子贺卡

[day26]批次实作-缴款纪录收档

上一篇完成了缴款纪录的查询,确认缴款纪录是否完成。 为了查询方便,每日批次去抓取前两日资料写入自己的...

Day 07 - Spring Boot 常用依赖

正如Day 04 - Spring Boot 的前世今生所说,Spring Boot 为了简化设定提...

[Day 6]从零开始学习 JS 的连续-30 Days---判断流程

流程判断 if : 判断式的开头,只有一组且不须其他判断式一起使用。 else if : 判断式的第...

[Day13] swift & kotlin 实作篇!(4) 图片资源

swift 首先我们来看看图片资源设定 撰写app的过程中 图片档案要非常小心 不要侵犯到别人的智慧...

Day01: 01 - 前置准备: 版面设计、安装、开启专案

Hello! 我是Charlie。 在这「30天肝出购物网站」系列文章中,我将与大家分享如何使用Dj...