2017-03-02 1 views
1

S3の2つの異なるバケットからRedshiftテーブルにデータをロードしようとしています。各バケットには、名前に日付を持つディレクトリがあり、各ディレクトリには多数のファイルが含まれていますが、マニフェストはありません。AWS Redshift:S3の多くのバケットからデータをロード

例S3構造:

# Bucket 1 
s3://bucket1/20170201/part-01 
s3://bucket1/20170201/part-02 

s3://bucket1/20170202/part-01 

s3://bucket1/20170203/part-00 
s3://bucket1/20170203/part-01 

# Bucket 2 
s3://bucket2/20170201/part-00 

s3://bucket2/20170202/part-00 
s3://bucket2/20170202/part-01 

s3://bucket2/20170203/part-00 

はのは、20170201と20170202のための両方のバケットからデータをロードする必要があるとしましょう。ソリューションの1つは、バケットと日付のペアごとに4回のCOPYコマンドを実行できます。しかし、私はそれが単一のCOPY呼び出し内で実行できるかどうか不思議です。私はマニフェストファイルがいくつかの異なるファイル(異なるバケットからのものを含む)を指定できることを見てきました。しかし: - 私は、S3上の一時ファイルを作成しないようにしたい

  1. ではなく、場所をファイルマニフェストに代わり、完全なパス接頭辞を使用するオプションは、そこにある
  2. と私はそれを文字列として渡すSQLで何とかマニフェストを使用することができます?

答えて

2

異なるバケット、パスとファイルを指定するためにマニフェストファイルを使用できます。

Using a Manifest to Specify Data Filesドキュメントは、例を示します。

{ 
    "entries": [ 
    {"url":"s3://mybucket-alpha/2013-10-04-custdata", "mandatory":true}, 
    {"url":"s3://mybucket-alpha/2013-10-05-custdata", "mandatory":true}, 
    {"url":"s3://mybucket-beta/2013-10-04-custdata", "mandatory":true}, 
    {"url":"s3://mybucket-beta/2013-10-05-custdata", "mandatory":true} 
    ] 
} 

ドキュメントにも書かれています:

マニフェストのURLだけではなく、バケット名やファイルの完全なオブジェクトパスを指定する必要があります。接頭辞。

マニフェストファイルを使用しての意図は、ファイルがAmazonで赤方偏移にをロードされたかを正確にを知ることです。これは、定期的に利用可能になるファイルをロードする場合に特に便利です。たとえば、ファイルが5分ごとに表示され、COPYコマンドを実行して特定の接頭辞からデータをロードすると、どのファイルがすでにロードされているかは不明です。これにより、潜在的にファイルをダブルロードします。

対策は、ロードするファイルを明確に指定したマニフェストファイルを使用することです。これは明らかに、ファイルを見つけて、マニフェストファイルを作成してから、COPYコマンドを起動するためのコードが必要です。

マニフェストファイルを使用せずに異なるバケット/パスからコンテンツを読み込むことはできません。

関連する問題