Amazon Web Services ブログ

Amazon Redshift Templates で運用を標準化する

本記事は 2026 年 3 月 2 日 に公開された「Standardize Amazon Redshift operations using Templates」を翻訳したものです。

この 1 年間で Amazon Redshift は運用の簡素化と生産性向上に役立つ機能を多数リリースしてきました。今回は、データエンジニアが日々直面する運用課題の一つ、複数のデータソースに対し、似たパラメータで繰り返し実行するデータロード操作の管理に取り組みます。本記事では、COPY コマンドの再利用可能なパラメータパターンを作成できる新機能、Redshift Templates を紹介します。冗長な記述を減らし、データ操作全体の一貫性を高めることができます。

課題: 大量のデータ操作における繰り返し作業

架空のデータアグリゲーション企業 AnyCompany は、50 社以上の小売クライアントから顧客取引データを処理しています。各クライアントは、以下のような類似構造の区切りテキストファイルを毎日送信します。

customer transactions | product catalogs | inventory updates

データ形式はクライアント間でほぼ統一されていますが (パイプ区切り、ヘッダー付き、UTF-8 エンコーディング)、データロードに必要な COPY コマンドの量が開発・保守の負担になっています。

データエンジニアリングチームが抱える課題は次のとおりです。

  • パラメータの繰り返し指定: 各 COPY コマンドで区切り文字、エンコーディング、エラー処理、圧縮設定を毎回指定する必要がある
  • 不整合のリスク: 複数のチームメンバーが COPY コマンドを記述するため、パラメータのわずかな違いがデータ取り込みの失敗につながる
  • 保守の負担: エラー閾値やエンコーディング設定を変更する際、ETL パイプライン全体で数百の COPY コマンドを個別に更新する必要がある
  • オンボーディングの複雑さ: 新しいチームメンバーが必要なパラメータとその最適値をすべて把握するのが難しい

さらに、一部のクライアントはやや異なる形式でデータを送信します。パイプの代わりにカンマ区切りを使用したり、ヘッダー構成が異なったりします。チームはデータロードロジックを全面的に書き換えることなく、こうした例外に柔軟に対応する必要があります。

Redshift Templates の紹介

Redshift Templates を使えば、COPY コマンドでよく使うパラメータを再利用可能なデータベースオブジェクトとして保存できます。テンプレートはデータ操作の設計図のようなもので、パラメータを一度定義すれば、複数の COPY コマンドから参照できます。

テンプレート管理のベストプラクティス

実装シナリオを見る前に、テンプレートの保守性とセキュリティに関するベストプラクティスを確認しましょう。

  1. 用途がわかる名前を付ける:
    CREATE TEMPLATE analytics.csv_client_data_load;
    CREATE TEMPLATE analytics.json_retail_data_load;
  2. 最小権限の原則を適用する:
    -- ロールに適切な権限を付与する
    GRANT USAGE FOR TEMPLATES IN SCHEMA analytics TO ROLE data_engineers;
    GRANT ALTER FOR TEMPLATES IN SCHEMA reporting TO ROLE senior_analysts;
    -- 不要なパーミッションを剥奪する
    REVOKE ALL ON TEMPLATE analytics.csv_load FROM PUBLIC;
  3. システムビューでテンプレートの使用状況を追跡する:
    SELECT database_name, schema_name, template_name, 
           create_time, last_modified_time
    FROM sys_redshift_template;
  4. 各テンプレートについて以下を文書化する:
    • 目的とユースケース
    • パラメータの説明
    • 所有者と連絡先
    • 変更履歴

ソリューション概要

AnyCompany が Redshift Templates を使ってデータロード操作を効率化する方法を見ていきましょう。

シナリオ 1: クライアントデータ取り込みの標準化

AnyCompany は複数の小売クライアントから統一フォーマットの取引ファイルを受け取っています。標準的なロードパラメータをまとめたテンプレートを作成します。

-- Create a reusable template for standard client data loads
CREATE TEMPLATE data_ingestion.standard_client_load
FOR COPY
AS
DELIMITER '|'
IGNOREHEADER 1
ENCODING UTF8
MAXERROR 100
COMPUPDATE OFF
STATUPDATE ON
ACCEPTINVCHARS
TRUNCATECOLUMNS;

テンプレートで定義しているパラメータは次のとおりです。

  • DELIMITER '|' はパイプ区切りファイルを指定
  • IGNOREHEADER 1 はヘッダー行をスキップ
  • ENCODING UTF8 は文字エンコーディングを設定
  • MAXERROR 100 は最大 100 件のエラーを許容し、軽微なデータ品質問題への耐性を確保
  • COMPUPDATE OFF はロード中の自動圧縮分析を無効にしてパフォーマンスを向上
  • STATUPDATE ON はクエリ最適化のためにテーブル統計を最新に維持
  • ACCEPTINVCHARS は無効な UTF-8 文字をエラーにせず置換
  • TRUNCATECOLUMNS は列幅を超えるデータをエラーにせず切り詰め

標準的なクライアントからのデータロードはシンプルになります。

-- Load transaction data from Client A
COPY transactions_client_a
FROM 's3://amzn-s3-demo-bucket/client-a/transactions/'
IAM_ROLE default
USING TEMPLATE data_ingestion.standard_client_load;
-- Load transaction data from Client B
COPY transactions_client_b
FROM 's3://amzn-s3-demo-bucket/client-b/transactions/'
IAM_ROLE default
USING TEMPLATE data_ingestion.standard_client_load;
-- Load product catalog from Client C
COPY products_client_c
FROM 's3:// amzn-s3-demo-bucket/client-c/products/'
IAM_ROLE default
USING TEMPLATE data_ingestion.standard_client_load;

各 COPY ステートメントで指定するのは以下の 4 つだけです。

  1. ターゲットテーブル
  2. Amazon Simple Storage Service (Amazon S3) の格納場所
  3. 認証用のデフォルト AWS Identity and Access Management (IAM) ロール
  4. テンプレートの参照

フォーマットやエラー処理のパラメータはテンプレートにまとめられているため、データロード全体で一貫性を保てます。

シナリオ 2: パラメータオーバーライドによるクライアント固有の差異への対応

AnyCompany には、パイプ区切りではなくカンマ区切りのファイルを送信するクライアント (Client D と E) がいます。テンプレートを一から作り直す代わりに、既存の設定を活かしつつ特定のパラメータだけをオーバーライドできます。

-- Load data from Client D with comma delimiter (overriding template)
COPY transactions_client_d
FROM 's3://amzn-s3-demo-bucket/client-d/transactions/'
IAM_ROLE default
DELIMITER ','  -- デリミターをオーバーライド
USING TEMPLATE data_ingestion.standard_client_load;
-- Load data from Client E with comma delimiter and no header
COPY transactions_client_e
FROM 's3://amzn-s3-demo-bucket/client-e/transactions/'
IAM_ROLE default
DELIMITER ','      -- デリミターをオーバーライド
IGNOREHEADER 0     -- ヘッダー文字列をオーバーライド
USING TEMPLATE data_ingestion.standard_client_load;

Redshift Templates のパラメータ優先順位は次の順とおりです。

  1. コマンド固有のパラメータ (最も優先される): COPY コマンドで明示的に指定したパラメータが最優先
  2. テンプレートパラメータ (次に優先される): オーバーライドされていない場合、テンプレートで定義されたパラメータを使用
  3. Amazon Redshift のデフォルトパラメータ : コマンドにもテンプレートにも指定がない場合、デフォルト値を適用

3 層の優先順位により、標準化と柔軟性を両立できます。重要な部分では一貫性を維持しつつ、例外にも適切に対応できます。

シナリオ 3: テンプレート保守の簡素化

テンプレート導入から 6 か月後、AnyCompany のデータ品質チームは、上流システムからのデータ品質の問題に対応するため、エラー閾値を 100 から 500 に引き上げることを推奨しました。テンプレートを使えば、変更は簡単です。

-- Update the template to increase error tolerance
ALTER TEMPLATE data_ingestion.standard_client_load
SET MAXERROR TO 500;

コマンド 1 つで、テンプレートを使用する今後のすべての COPY 操作のエラー処理動作が即座に更新されます。数百の ETL スクリプトを調べたり、一部のパイプラインで更新漏れが発生するリスクもありません。要件の変化に応じて新しいパラメータを追加することもできます。

-- Add compression parameter to improve load performance
ALTER TEMPLATE data_ingestion.standard_client_load
ADD GZIP;

不要になったテンプレートを削除するには次のようにします。

DROP TEMPLATE data_ingestion.standard_client_load;

シナリオ 4: 開発環境と本番環境で異なるテンプレート

AnyCompany は開発環境と本番環境でエラー許容度の異なるテンプレートを使い分けています。

-- Development template with lenient error handling
CREATE TEMPLATE data_ingestion.dev_client_load
FOR COPY
AS
DELIMITER '|'
IGNOREHEADER 1
ENCODING UTF8
MAXERROR 1000        -- More lenient for testing
COMPUPDATE OFF
STATUPDATE OFF;      -- Skip stats updates in dev
-- Production template with strict error handling
CREATE TEMPLATE data_ingestion.prod_client_load
FOR COPY
AS
DELIMITER '|'
IGNOREHEADER 1
ENCODING UTF8
MAXERROR 50          -- Stricter for production
COMPUPDATE OFF
STATUPDATE ON;       -- Keep stats current in prod

開発環境と本番環境でテンプレートを分けることで、本番ではデータ品質の問題を早期に検出しつつ、開発・テスト時には柔軟に対応できます。

主なメリット

テンプレートの主なメリットは次のとおりです。

  • 一貫性と標準化: テンプレートにより、同じパラメータと設定が毎回使用されるため、操作間の一貫性を維持できます。複数のユーザーが同じデータパイプラインを扱う大規模な組織で特に有効です。
  • 使いやすさと時間の節約: 毎回パラメータを手動で指定する代わりに、定義済みのテンプレートを参照するだけで済みます。手入力によるミスも減らせます。
  • パラメータオーバーライドによる柔軟性: テンプレートで標準化しつつも、例外や特殊なケースでは COPY コマンドでパラメータを直接オーバーライドできます。
  • 保守の簡素化: パラメータや設定の変更が必要な場合、テンプレートを更新するだけで、すべての利用箇所に変更が反映されます。個々のコマンドを手動で更新する場合と比べて、保守の手間を大幅に削減できます。
  • コラボレーションとナレッジ共有: テンプレートはナレッジベースとして機能し、経験豊富なユーザーが開発したベストプラクティスや最適な設定を蓄積できます。新メンバーのオンボーディングを促進し、学習コストを下げつつ実績ある設定を一貫して利用できます。

業界別のユースケース

テンプレートはさまざまな業界で活用できます。

金融サービス: 規制データロードの標準化

金融機関が複数の支店から統一フォーマットの取引データをロードする場合の例です。

-- Create template for branch transaction loads
CREATE TEMPLATE compliance.branch_transaction_load
FOR COPY
AS
FORMAT CSV
DELIMITER ','
IGNOREHEADER 1
ENCODING UTF8
DATEFORMAT 'YYYY-MM-DD'
TIMEFORMAT 'YYYY-MM-DD HH:MI:SS'
MAXERROR 0           -- Zero tolerance for compliance data
COMPUPDATE OFF;
-- Load data from different branches
COPY branch_transactions_east
FROM 's3://amzn-s3-demo-source-bucket/east-branch/transactions/'
IAM_ROLE default
USING TEMPLATE compliance.branch_transaction_load;
COPY branch_transactions_west
FROM 's3://amzn-s3-demo-source-bucket/west-branch/transactions/'
IAM_ROLE default
USING TEMPLATE compliance.branch_transaction_load;

ヘルスケア: 厳格な基準に基づく患者データのロード

ヘルスケア分析企業が複数の病院システムからの患者データ取り込みを標準化する例です。

-- Create template for HIPAA-compliant data loads
CREATE TEMPLATE healthcare.patient_data_load
FOR COPY
AS
FORMAT CSV
DELIMITER '|'
IGNOREHEADER 1
ENCODING UTF8
ACCEPTINVCHARS
TRUNCATECOLUMNS
MAXERROR 10
COMPUPDATE OFF;
-- Apply to different hospital systems
COPY hospital_a_patients
FROM 's3://amzn-s3-demo-destination-bucket/hospital-a/patients/'
IAM_ROLE default
USING TEMPLATE healthcare.patient_data_load;
COPY hospital_b_patients
FROM 's3://amzn-s3-demo-destination-bucket/hospital-b/patients/'
IAM_ROLE default
USING TEMPLATE healthcare.patient_data_load;

小売: JSON データロードの標準化

小売企業がさまざまなサプライヤーから JSON 形式の商品カタログを処理する例です。

-- Create template for JSON product data
CREATE TEMPLATE retail.json_product_load
FOR COPY
AS
FORMAT JSON 'auto'
TIMEFORMAT 'auto'
ENCODING UTF8
MAXERROR 100
COMPUPDATE OFF;
-- Load from different suppliers
COPY products_supplier_a
FROM 's3://amzn-s3-demo-logging-bucket/supplier-a/products/'
IAM_ROLE default
USING TEMPLATE retail.json_product_load;
COPY products_supplier_b
FROM 's3://amzn-s3-demo-logging-bucket/supplier-b/products/'
IAM_ROLE default
USING TEMPLATE retail.json_product_load;

まとめ

本記事では、Redshift Templates を紹介し、さまざまなシナリオでデータロード操作を標準化・簡素化する方法を示しました。よく使う COPY コマンドのパラメータを再利用可能なデータベースオブジェクトにまとめることで、繰り返しのパラメータ指定をなくし、チーム間の一貫性を確保し、保守を一元化できます。要件が変わった場合も、テンプレートを 1 回更新するだけで変更がすべての操作に反映されるため、運用負荷を抑えつつパラメータオーバーライドによる柔軟性も維持できます。

Redshift Templates を使ってデータ取り込みワークフローを改善しましょう。まずは最もよく使うデータロードパターンでテンプレートを作成し、徐々にパイプライン全体に適用範囲を広げてください。コードの見通しが良くなり、オンボーディングが速くなり、保守が楽になります。Redshift Templates の詳細や追加の設定オプションについては、Amazon Redshift のドキュメントを参照してください。

著者について

Nidhi Nayak

Nidhi Nayak

Nidhi は、AWS のシニアテクニカルアカウントマネージャー兼データ分析スペシャリストです。分析およびデータサービスに関する深い専門知識を持ち、パフォーマンス、スケーラビリティ、コスト効率に優れたクラウドアーキテクチャの最適化を支援しています。

Raza Hafeez

Raza Hafeez

Raza は、Amazon Redshift のシニアプロダクトマネージャーです。エンタープライズデータウェアハウスの構築と最適化に 13 年以上の経験を持ち、お客様がデータの力を最大限に活用できるよう支援しています。エンタープライズデータウェアハウスの AWS Modern Data Architecture への移行を専門としています。

Raks Khare

Raks Khare

Raks は、ペンシルベニア州を拠点とする AWS のシニアアナリティクススペシャリストソリューションアーキテクトです。さまざまな業界や地域のお客様が AWS プラットフォーム上で大規模なデータ分析ソリューションを構築するのを支援しています。仕事以外では、新しい旅行先やグルメスポットの開拓、家族との時間を楽しんでいます。


この記事は Kiro が翻訳を担当し、Solutions Architect の Akira Shimosako がレビューしました。