-- ロールに適切な権限を付与する
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;
システムビューでテンプレートの使用状況を追跡する:
SELECT database_name, schema_name, template_name,
create_time, last_modified_time
FROM sys_redshift_template;
-- 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;
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;
-- 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
-- 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;