今天來介紹的是如何透過 NiFi 來與 Athena 和 Redshift 來取得或寫入資料,其實兩個設定都很類似,怎麼說呢?讓我們繼續看下去。
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,待會就可以輕鬆設定完成。
首先我們現在 Controller Service 新增2個 DBCPConnectionPool
,個別 for Athena 和 Redshift:
再來,我們先對 AthenaConnectionPool
來做設定,只要設定好三個參數:
jdbc:awsathena://AwsRegion=[region];User=[AwsAccessKeyID];Password=[AwsSecretAccessKey];S3OutputLocation=[s3_folder]
,記得要填上自己的 key 相關資訊com.simba.athena.jdvc.Driver
設定完沒問題就可按下 Apply,接著 RedshiftConnectionPool
也是同樣的設定方式:
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 相關資訊com.amazon.redshift.jdbc42.Driver
全部設定完後,就可以 Enabled 起來了。接著如何在 Processor 做應用呢?我們這邊套用PutSQL
作為簡單範例,先來看一下它的設定:
其實其他相關的 SQL Processor 都是一樣的操作,ex. QueryDatabaseTableRecord
, ExecuteSQL
等,都是只要指定好先前建立好的 Controller Service,接著就可以用 SQL 去對服務的資料做操作,這樣是不是十分簡單呢?
今天這篇比較要去注意的是 JDBC Driver 的下載與設定,因為有牽動到 Controller Service,所以相較於其他服務是比較繁瑣的,因為沒有原生的 Processor 可以做使用。
但只要設定好其實用起來並不會太難,同時你也會發現這樣的設定流程與我們先前在整合 RDB 的操作其實很類似,都是要透過 JDBC Driver 才能去做 DB 等載體去做操作,所以倘若未來有沒支援的 Processor 時,或許 JDBC 這樣的方式能解決你的問題。