テスト
aaaa
aaaa
こちらの記事にて、Auto Copy JOBを設定する方法を記載しました。
その際に、Query Editor V2にてAuto Copy JOBを設定するには以下のクエリを実行します。
COPY データベース.スキーマ.テーブル(
カラム,
カラム
) FROM 's3://バケット/フォルダ/フォルダ/フォルダ/'
IAM_ROLE 'arn:aws:iam::xxxxxxxxxxxxx:role/service-role/AmazonRedshift-CommandsAccessRole-xxxxxxxxxxx'
CSV
IGNOREHEADER 1
DELIMITER ','
JOB CREATE xxxxxxxxxxxxxxxxxx
AUTO ON
;
この時に、S3のパスを設定するのですがある意味使えるようで使えないような仕様があります。
もし仮に、以下のS3パスのフォルダ以下にファイルが追加されたらAuto Copy JOBが動作するようにしたいとします。
s3://test-bucket/test-folder-1/test-folder-2/
この場合、test-folder-2以下にファイル名が重複しないファイルが追加されるたびにAuto Copy JOBが動作します。
ですが、ここで注意点があります。もしS3パスの最後の /
を取るとどの様な挙動になるでしょうか。
s3://test-bucket/test-folder-1/test-folder-2
この場合も、test-folder-2以下にファイルが追加されるとAuto Copy JOBが動作します。
しかし、以下のS3パスのファイルも取り込んでしまいます。
S3パスの最後にきっちり /
を指定しない場合、前方一致したフォルダのファイルも取りこもうとしてしまいます。
この仕様は特定のケースで利用できそうではありますが、バグを発生させかねないのでS3のパスをきっちり指定し、S3のフォルダ構造やファイルの持ち方をよく検討したほうが良さそうです。
(先の例はCOPYコマンドでカラムを指定している場合、取り込みの時にファイル構造とテーブル構造が一致していないと取り込むことはできませんが、パーティション分けしているファイル等、同じ構造のファイルを似通った名前のフォルダに保存しているとこのような事が起きやすいのでは?というか、起こしてしまいました。)
Redshift Serverlessにて、S3にファイルが追加された際にCOPYが自動実行される機能、Auto Copyの設定手順について
S3のバケットポリシーを以下のように設定する
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Auto-Copy-Policy-01",
"Effect": "Allow",
"Principal": {
"Service": "redshift.amazonaws.com"
},
"Action": [
"s3:GetBucketNotification",
"s3:PutBucketNotification",
"s3:GetBucketLocation"
],
"Resource": "arn:aws:s3:::xxxxxxxxxx",
"Condition": {
"StringLike": {
"aws:SourceAccount": "123456"
},
"ArnEquals": {
"aws:SourceArn": "arn:aws:redshift:ap-northeast-1:12345678:integration:*"
}
}
}
]
}
上記のポリシーで変更すべき点は以下になる
Query Editor V2にて、COPY JOBを作成するようにAUTO COPY JOBを設定する
COPY データベース.スキーマ.テーブル(
カラム,
カラム
) FROM 's3://バケット/フォルダ/フォルダ/フォルダ/'
IAM_ROLE 'arn:aws:iam::xxxxxxxxxxxxx:role/service-role/AmazonRedshift-CommandsAccessRole-xxxxxxxxxxx'
CSV
IGNOREHEADER 1
DELIMITER ','
JOB CREATE xxxxxxxxxxxxxxxxxx
AUTO ON
;
すでにCOPY JOBを作成している場合は、2行を追加
ここまでの設定が完了すれば、ジョブが動作する状態になっている
Auto Copy JOBを利用するうえでよく利用するSQLを以下に記載
COPY JOB LIST
COPY JOB SHOW ジョブ名
COPY JOB DROP ジョブ名
SELECT
status,
user_id,
query_id,
table_name,
TRUNC(start_time),
data_source
FROM
sys_load_history
WHERE copy_job_id != 0
ORDER BY start_time DESC
SELECT
*
FROM
SYS_LOAD_DETAIL
ORDER BY start_time DESC
データ分析基盤を運用していくうえで、AWS外から送られてくるファイルをS3に連携することはユースケースとしてよくあると思います
ファイルが追加されればテーブルへ自動的に反映される機能は非常にありがたく、便利に使っていければと
注意点や課題として
reactでライブラリをインストールする際に、迷ったのでメモ
ブログテンプレートからAPIを作成しました。
おつかれさまでした🎉
最初に「APIプレビュー」をしてみましょう。
入稿したコンテンツはAPI経由で取得し、Viewに繋ぎ込みます。APIプレビューでは実際のAPIレスポンスを確認でき、あなたの開発を加速させます。
👇まずはここをクリックします。
APIプレビュー画面が開いたら、「取得」ボタンでリクエストを試してみましょう。
この記事の内容がAPIで取得できていることがわかります。
APIプレビューで確認したレスポンスを参考に、あなた自身のWebサイトを構築しましょう。
microCMSはAPIでコンテンツを取得するため、お好きな言語・フレームワークで画面を構築できます。
その他にサーバーサイドSDK(PHP / Go / Ruby)やモバイルSDK(iOS / Android)もございます。
お困りなことや疑問点などございましたらお気軽にご連絡ください。
サポート窓口:support@microcms.io
よくある質問:https://help.microcms.io/ja/knowledge