はじめに
re:Invent 2022での発表の一つに、S3に置いたファイルをRedshiftに自動的にCOPYコマンドで取り込んでくれる機能がプレビューで開始、というのがありましたので早速試してみました。
概要
-
プレビューの段階ですので、本運用に使うのは避けてください。
- 2023/2/28に終了する予定とのこと
- 今までのcopyコマンドの末尾に、以下を入れるだけ。
JOB CREATE my-copy-job-name
AUTO ON
- 過去に取り込まれたファイルパスは、再取り込みされない。
- 新しく上げなおしても、取込対象外
- 取込の結果は
STL_LOAD_COMMITS
で確認できる。
参考
作成の仕方は以下より。
コマンドの書き方は以下にあります。
やってみた
COPY用IAMロール作成
使用するロールを作成します。
AWSTemplateFormatVersion: "2010-09-09"
Resources:
RSRole:
Type: AWS::IAM::Role
Properties:
RoleName: for-rspreview
Path: "/"
AssumeRolePolicyDocument:
Version: 2012-10-17
Statement:
- Effect: Allow
Principal:
Service:
- "redshift.amazonaws.com"
Action:
- sts:AssumeRole
ManagedPolicyArns:
- arn:aws:iam::aws:policy/AmazonRedshiftFullAccess
- arn:aws:iam::aws:policy/AmazonS3FullAccess
Redshift(preview)作成
左ペインの”プロビジョニングされたクラスターダッシュボード”をクリックします。
あとはデフォルトで作成します。作成されるまでしばらくかかりました。
クエリエディタで、以下のSQLを実行してテーブルを作成します。
CREATE TABLE "public"."climbing" (
episode INTEGER
, name VARCHAR(100)
, elevation INTEGER
);
この時点で、コピーJOBの一覧コマンドも実行できました。まだ作成前なので空が返ってきます。
JOB作成
以下のコマンドを、クエリエディタで実行します。
COPY public.climbing
FROM 's3://[バケット名]/yama-no-susume' CSv
IAM_ROLE 'arn:aws:iam::123456789012:role/for-rspreview'
IGNOREHEADER 1
JOB CREATE addclimbinglogjob
AUTO ON
COPY JOB LIST
を実行すると、以下のような結果になりました。
COPY JOB SHOW xxx
で、以下のような結果が出てきました。定義時のコマンドのようです。
ファイル追加
フォルダにファイルを追加する前のテーブルは以下の通り空の状態です。
2つ目のファイルを置くと、2つ目のファイルのみ追加されました。
取込の履歴
STL_LOAD_COMMITS
の中に、定義時およびファイル単位で入っていました。各ファイルごとにsliceも行うようで、1ファイルあたり2レコード発生していました。
その他、SYS_COPY_JOB
やSYS_LOAD_HISTORY
には、最初の定義のみが入っており、都度アップロードで実行されるCOPYについての履歴はありませんでした。
ファイルの上げなおし
3回目のファイルを上げると同時に、1,2回目のファイルも上げなおしてみました。
1,2回目のファイルのデータは増えずに、3回目のファイルだけ追加されました。
STL_LOAD_COMMITS
を確認すると、3ファイル目のみ追加されていました。
ファイルパスで取り込み可否を判断していて、更新日時では見ていないようです。
ファイルの削除
S3上の元ファイルを削除しても、テーブルに変化はありませんでした。COPYだけですので、"削除トリガーでデータを消す"のようなことはやられていませんでした。
データの削除
テーブルを空にして、過去に挙げたファイルと新しいファイルをフォルダに置いてみます。
過去に取り込んでいないファイルのデータのみ、入ってきました。
JOBの削除
実行後はCOPY JOB LIST
からは無くなり、COPY JOB SHOW xxx
はJOBがないためエラーとなりました。
JOBが無くなっていますので、待っても取り込まれないことが確認できました。
おわりに
外部DBとシステム間連携で取り込むツール等ありますが、担当がファイルを受領してアップ、という運用を行われている方には、大変ありがたいアップデートでしょう。
早く一般利用開始になってほしい機能と感じました。