1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Redshiftの新機能、S3からの自動コピー(preview)を試してみた

Last updated at Posted at 2022-12-01

はじめに

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)作成

左ペインの”プロビジョニングされたクラスターダッシュボード”をクリックします。
image.png

上にバナーがでてくるので、右端のボタンをクリックします。
image.png

Preview trackに以下を選択。
image.png

最安価インスタンスで作成しました。
image.png

作成したIAMロールを関連付けます。
image.png

あとはデフォルトで作成します。作成されるまでしばらくかかりました。
image.png

クエリエディタで、以下のSQLを実行してテーブルを作成します。

CREATE TABLE "public"."climbing" (
  episode INTEGER
  , name VARCHAR(100) 
  , elevation INTEGER 
);

image.png

この時点で、コピーJOBの一覧コマンドも実行できました。まだ作成前なので空が返ってきます。
image.png

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

image.png

COPY JOB LISTを実行すると、以下のような結果になりました。
image.png

COPY JOB SHOW xxxで、以下のような結果が出てきました。定義時のコマンドのようです。
image.png

ファイル追加

フォルダにファイルを追加する前のテーブルは以下の通り空の状態です。
image.png

フォルダにファイルを置きました。
image.png

少し待つと、テーブル内にデータが入ってきました。
image.png

2つ目のファイルを置くと、2つ目のファイルのみ追加されました。
image.png
image.png

取込の履歴

STL_LOAD_COMMITSの中に、定義時およびファイル単位で入っていました。各ファイルごとにsliceも行うようで、1ファイルあたり2レコード発生していました。
image.png

その他、SYS_COPY_JOBSYS_LOAD_HISTORYには、最初の定義のみが入っており、都度アップロードで実行されるCOPYについての履歴はありませんでした。

ファイルの上げなおし

3回目のファイルを上げると同時に、1,2回目のファイルも上げなおしてみました。
image.png
1,2回目のファイルのデータは増えずに、3回目のファイルだけ追加されました。
image.png

STL_LOAD_COMMITSを確認すると、3ファイル目のみ追加されていました。
image.png

ファイルパスで取り込み可否を判断していて、更新日時では見ていないようです。

ファイルの削除

S3上の元ファイルを削除しても、テーブルに変化はありませんでした。COPYだけですので、"削除トリガーでデータを消す"のようなことはやられていませんでした。

データの削除

テーブルを空にして、過去に挙げたファイルと新しいファイルをフォルダに置いてみます。
image.png
image.png
過去に取り込んでいないファイルのデータのみ、入ってきました。
image.png

JOBの削除

COPY JOB DROP xxxでJOBが削除できます。
image.png

実行後はCOPY JOB LISTからは無くなり、COPY JOB SHOW xxxはJOBがないためエラーとなりました。

この状態で、未取込のファイルを置いてみます。
image.png

JOBが無くなっていますので、待っても取り込まれないことが確認できました。
image.png

おわりに

外部DBとシステム間連携で取り込むツール等ありますが、担当がファイルを受領してアップ、という運用を行われている方には、大変ありがたいアップデートでしょう。
早く一般利用開始になってほしい機能と感じました。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?