Fivetranを用いたELT作業【その1】

## 【概要】
##### Fivetran、S3(Icebergテーブル)、OracleDBを用いてELTを実施いたします。今回記事ではまずFivetranとS3の疎通確認を行います。
## 【イメージ図】
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3528832/13e6c9fc-4afc-fa04-acb7-3270c7d1a601.png)

## 【Fivetranとは？】
Fivetranとはデータ統合自動化サービスです。
データベース、ファイル等のデータソースからデータ抽出し、データ同期先へのロードを自動化することが可能です。
変換/加工処理をデータ同期先であるデータウェアハウス上で行うこともできます。

## 【Fivetran⇔S3疎通作業】
#### ①Icebergテーブルの作成
AWS_Athenaからクエリを実行し、IcebergテーブルをS3上に作成します。

```:テーブル作成クエリ
CREATE TABLE 【作成するテーブル名】 (
  id int,
  data string,
  category string) 
PARTITIONED BY (category, bucket(16,id)) 
LOCATION 's3://【バケット名称】/【ディレクトリ名称】' 
TBLPROPERTIES (
  'table_type'='ICEBERG',
  'format'='parquet',
  'write_compression'='snappy',
  'optimize_rewrite_delete_file_threshold'='10'
)
```
下記画像の通り、Icebergテーブルが作成される。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3528832/f2da62a8-c151-b489-1767-5ca857cb26c2.png)

#### ②Fivetran接続作業
②-1: 「Add destination」を押下する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3528832/dd28a05d-ce96-287f-b1cd-79c989e00532.png)

②-2: Destination名を入力し、左下の「Add」を押下する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3528832/931b244d-b937-378b-d9eb-08e0e61122b3.png)

②-3: 「S3 Data Lake」を選択する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3528832/887123f5-95e9-9c99-f33b-8f7da30daf78.png)

②-4: 各項目を入力していく。
【Bucket】
対象のS3バケット名を入力する。

【Fivetran Role ARN】
AWS上でFivetranからAWS上で必要なサービスへの許可Roleを作成し、FivetranにRoleを割り当てる。
※後ほどRoleの設定方法を記載いたします。

【S3 Prefix Path(optional)】
対象のS3バケット配下のディレクトリのパスを入力する。

【Bucket Region】
対象のS3バケットのリージョン名を入力する。
例)東京リージョンの場合：ap-northeast-1
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3528832/f7a2fa3f-301f-7d8b-66cb-b70c93de05ce.png)

【External ID】
AWSでRoleを作成する際に使用します。
デフォルトで入力されています。

【Data processing location】
Japanを選択します。

【Cloud service provider】
AWSのS3を使用するため、AWSを選択します。
※デフォルトでAWSになっていると思います。

【Time zone】
Japan Standard Time JSTを選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3528832/17dc2751-f25e-c144-db3e-4aea05e0b7f8.png)

②-5: AWSでRoleを作成する。
下記ポリシーを二つ作成する。
```:Fivetran-S3
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "AllowListBucketOfASpecificPrefix",
            "Effect": "Allow",
            "Action": [
                "s3:ListBucket"
            ],
            "Resource": [
                "arn:aws:s3:::【バケット名称】"
            ],
            "Condition": {
                "StringLike": {
                    "s3:prefix": [
                        "iceberg-folder/*"
                    ]
                }
            }
        },
        {
            "Sid": "AllowAllObjectActionsInSpecificPrefix",
            "Effect": "Allow",
            "Action": [
                "s3:DeleteObjectTagging",
                "s3:ReplicateObject",
                "s3:PutObject",
                "s3:GetObjectAcl",
                "s3:GetObject",
                "s3:DeleteObjectVersion",
                "s3:PutObjectTagging",
                "s3:DeleteObject",
                "s3:PutObjectAcl"
            ],
            "Resource": [
                "arn:aws:s3:::【バケット名称】/iceberg-folder/*"
            ]
        }
    ]
}
```

```:Fivetran-S3-Glue-Policy
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "SetupFormTest",
            "Effect": "Allow",
            "Action": [
                "glue:DeleteDatabase"
            ],
            "Resource": [
                "arn:aws:glue:【リージョン】:【アカウントID】:database/fivetran*",
                "arn:aws:glue:【リージョン】:【アカウントID】:catalog",
                "arn:aws:glue:【リージョン】:【アカウントID】:table/fivetran*/*",
                "arn:aws:glue:【リージョン】:【アカウントID】:userDefinedFunction/fivetran*/*"
            ]
        },
        {
            "Sid": "AllConnectors",
            "Effect": "Allow",
            "Action": [
                "glue:GetDatabase",
                "glue:UpdateDatabase",
                "glue:CreateTable",
                "glue:GetTables",
                "glue:CreateDatabase",
                "glue:UpdateTable",
                "glue:BatchDeleteTable",
                "glue:DeleteTable",
                "glue:GetTable"
            ],
            "Resource": [
                "arn:aws:glue:【リージョン】:【アカウントID】:*"
            ]
        }
    ]
}
```

②-6: ②-5で作成したポリシーをアタッチしたロールを作成する。

「ロールを作成」を押下する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3528832/ab862b3f-3000-af12-3928-02961bd99ddd.png)

「AWSアカウント」を選択する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3528832/10c48b65-a688-b201-d4eb-aa21bc66c13f.png)

「別のAWS アカウント」の「アカウントID」欄に、セットアップガイドに記載のあるFivetranのアカウントID「834469178297」を入力しますを入力します。
また、[外部IDを要求する]にチェックを選択します。
入力する外部IDは、②-4のセットアップの画面に表示されたExternal IDを入力します。設定後、[次へ]を押下します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3528832/da74eef6-186d-7ab2-6b1e-9888a494e0be.png)

②-7: 許可ポリシーとして先ほど作成した2つのIAMポリシーを選択し、[次へ]を押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3528832/13c48a98-c186-374e-cad9-ab2a8b86f3b6.png)

②-8: ロール名を記入し、[ロールを作成]を押下します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3528832/b65dbe18-3d52-cd03-3972-ddb5024c9416.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3528832/093bc6bb-eefc-3877-5293-55ff685b825a.png)

②-9: 作成したロールからARNをコピーして取得します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3528832/c6cc1983-bee1-d73f-1402-b8e017cc9e74.png)

②-10: Fivetranの設定画面に戻り、「Fivetran Role ARN」の欄に②-9でコピーしたARNを貼り付け、「Save & Test」を押下する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3528832/e3a562ba-434e-9572-a03f-e028b0637ee3.png)

②-11:「All connection tests passed!」と表示されれば接続テスト完了です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3528832/16afb8ae-cbfa-fa96-f48d-63025e438c06.png)



## 【まとめ】
ここまででFivetranとS3との連携は完了です。
次回はFivetarnとOracleデータベースの連携作業に移ります。

##
株式会社ジールでは、「ITリテラシーがない」「初期費用がかけられない」「親切・丁寧な支援がほしい」「ノーコード・ローコードがよい」「運用・保守の手間をかけられない」などのお客様の声を受けて、オールインワン型データ活用プラットフォーム「ZEUSCloud」を月額利用料にてご提供しております。
ご興味がある方は是非下記のリンクをご覧ください：
https://www.zdh.co.jp/products-services/cloud-data/zeuscloud/?utm_source=qiita&utm_medium=referral&utm_campaign=qiita_zeuscloud_content-area