【Informatica CDI】S3からSnowflakeへのデータロード
はじめに
データ事業本部ビッグデータチームのkasamaです。今回はS3からSnowflakeへのデータロードを試してみたいと思います。S3からSnowflakeへはInformaticaを使わずともSnowflakeのCOPYコマンドでできますが、Infomaticaだとノーコードでできるという利点があります。
以下を参考に進めます。
前提条件
1. Snowflakeの初期設定
まずはSnowflake側でSQLを実行し、初期設定を行います。WAREHOUSEやユーザーはデフォルトを活用し、その他は今回用に作成します。
---> set Warehouse Context
USE WAREHOUSE compute_wh;
-- database作成
CREATE DATABASE IF NOT EXISTS cm_kasama_infa_db;
-- schema作成
CREATE SCHEMA IF NOT EXISTS cm_kasama_infa_db.s3_data;
-- table作成
CREATE OR REPLACE TABLE cm_kasama_infa_db.s3_data.calendar
(
full_date DATE,
day_name VARCHAR(10),
month_name VARCHAR(10),
day_number VARCHAR(2),
full_year VARCHAR(4),
holiday BOOLEAN
);
-- ETL用ロールの作成
CREATE ROLE etl_role;
-- ウェアハウスの使用権限
GRANT USAGE ON WAREHOUSE COMPUTE_WH TO ROLE etl_role;
-- データベースへのフル権限(現在と将来)
GRANT ALL ON DATABASE cm_kasama_infa_db TO ROLE etl_role;
GRANT ALL ON ALL SCHEMAS IN DATABASE cm_kasama_infa_db TO ROLE etl_role;
GRANT ALL ON FUTURE SCHEMAS IN DATABASE cm_kasama_infa_db TO ROLE etl_role;
GRANT ALL ON ALL TABLES IN DATABASE cm_kasama_infa_db TO ROLE etl_role;
GRANT ALL ON FUTURE TABLES IN DATABASE cm_kasama_infa_db TO ROLE etl_role;
-- ユーザーにロール付与
GRANT ROLE etl_role TO USER KASAMA;
2. S3 サンプルデータの準備
以下の内容でCSVファイルを作成し、S3 BucketへUploadします。
full_date,day_name,month_name,day_number,full_year,holiday
2024-01-01,Monday,January,01,2024,true
2024-01-02,Tuesday,January,02,2024,false
2024-01-03,Wednesday,January,03,2024,false
2024-01-04,Friday,January,04,2024,true
3. Informatica CloudのSnowflake接続の作成
管理者画面の接続 → 新しい接続の作成からタイプSnowflake Data Cloudを選択し、接続情報を入力します。
※ 以下リンクに記載の通り、Snowflake Cloud Data Warehouseは古いコネクタのようですので、Snowflake Data Cloudを使用しましょう。
FAQ: What is the difference between Snowflake Data Cloud (Informatica Cloud) and Snowflake Cloud Data Warehouse (Informatica) connector in Informatica Cloud product ?

- 接続名: 任意のコネクタ名
タイプ: Snowflake Data Cloud - 認証: 標準
- ユーザー名: Snowflake上で
SELECT CURRENT_USER();で表示された値 - パスワード: 上記ユーザーに紐づくパスワード
- アカウント: Snowflakeの画面上で
アカウント→アカウントURLをコピーで取得できるURLのhttps://と.snowflakecomputing.comの間の値 - ウェアハウス: COMPUTE_WH
- ロール: etl_role
マッピング作成
- ソースの設定
- S3接続を選択
- ファイルパス:
source/snowflake/calendar.csv - ヘッダー行あり: チェック

- 式の定義
- フィールド名:
exp_full_date - タイプ:
date/time - 式:
To_Date(full_date, 'YYYY-MM-DD')
- フィールド名:

- ターゲットの設定
- Snowflake接続を選択
- テーブル:
calendar - 操作: Insert
- full_dateは先ほどの
exp_full_dateをマッピング

実行結果確認
マッピング実行し、問題なく成功しました。

Snowflake上でもデータ確認できました。
SELECT * FROM cm_kasama_infa_db.s3_data.calendar;

クリーンアップ(必要な場合)
-- データベースを削除
DROP DATABASE IF EXISTS cm_kasama_infa_db;
-- ロールの付与解除
REVOKE ROLE etl_role FROM USER KASAMA;
-- ロールを削除
DROP ROLE IF EXISTS etl_role;
最後に
接続情報にはいくつかパターンがあり、最も簡易的なパターンで試したので、プロジェクトで実際に扱う際は再度検討したいと思います。






