UNLOAD の例 - Amazon Redshift
パイプ区切りファイルへの VENUE のアンロード (デフォルト区切り文字)パーティション化された Parquet ファイルへの LINEITEM テーブルのアンロードVENUE テーブルを JSON ファイルにアンロードするCSV ファイルへの VENUE のアップロード区切り文字を使用した CSV ファイルへの VENUE のアンロードマニフェストファイルを使用した VENUE のアンロードMANIFEST VERBOSE を使用した VENUE のアンロードヘッダーを使用した VENUE のアンロードより小さいファイルへの VENUE のアンロードVENUE の逐次アンロードアンロードファイルからの VENUE のロード暗号化ファイルへの VENUE のアンロード暗号化ファイルからの VENUE のロードタブ区切りファイルへの VENUE データのアンロード固定幅のデータファイルへの VENUE のアンロードVENUE を一連のタブ区切り GZIP 圧縮ファイルにアンロードします。VENUE を GZIP 圧縮テキストファイルにアンロードする区切り文字を含むデータのアンロード結合クエリの結果のアンロードNULL AS を使用したアンロードALLOWOVERWRITE パラメータを使用してアンロードPARALLEL パラメータと MANIFEST パラメータを使用して EVENT テーブルをアンロードPARALLEL OFF パラメータと MANIFEST パラメータを使用して EVENT テーブルをアンロードPARTITION BY パラメータと MANIFEST パラメータを使用して EVENT テーブルをアンロードMAXFILESIZE、ROWGROUPSIZE、MANIFEST の各パラメータを使用して EVENT テーブルをアンロード

UNLOAD の例

これらの例は、UNLOAD コマンドのさまざまなパラメータを示しています。多くの例では、TICKIT サンプルデータを使用しています。詳細については、「サンプルデータベース」を参照してください。

注記

次の例では読みやすくするため、改行しています。credentials-args 文字列には改行やスペースを含めないでください。

パイプ区切りファイルへの VENUE のアンロード (デフォルト区切り文字)

次の例は、VENUE テーブルをアンロードし、データを s3://amzn-s3-demo-bucket/unload/ に書き込みます。

unload ('select * from venue') to 's3://amzn-s3-demo-bucket/unload/' iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole';

デフォルトでは、UNLOAD はスライスごとに 1 つ以上のファイルを書き込みます。ノードごとに 2 つのスライスを装備した 2 ノードクラスターを想定すると、前の例では amzn-s3-demo-bucket に以下のファイルが作成されます。

unload/0000_part_00 unload/0001_part_00 unload/0002_part_00 unload/0003_part_00

出力ファイルの違いをわかりやすくするため、ロケーションにプレフィックスを含めることができます。次の例は、VENUE テーブルをアンロードし、データを s3://amzn-s3-demo-bucket/unload/venue_pipe_ に書き込みます。

unload ('select * from venue') to 's3://amzn-s3-demo-bucket/unload/venue_pipe_' iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole';

結果として、unloadフォルダに以下の 4 つのファイルが生成されます。ここでも 4 つのスライスを想定しています。

venue_pipe_0000_part_00 venue_pipe_0001_part_00 venue_pipe_0002_part_00 venue_pipe_0003_part_00

パーティション化された Parquet ファイルへの LINEITEM テーブルのアンロード

次の例では、l_shipdate列によって分割された Parquet 形式で LINEITEM テーブルをアンロードします。

unload ('select * from lineitem') to 's3://amzn-s3-demo-bucket/lineitem/' iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole' PARQUET PARTITION BY (l_shipdate);

4 つのスライスがある場合、生成される Parquet ファイルはさまざまなフォルダに動的に分割されます。

s3://amzn-s3-demo-bucket/lineitem/l_shipdate=1992-01-02/0000_part_00.parquet 0001_part_00.parquet 0002_part_00.parquet 0003_part_00.parquet s3://amzn-s3-demo-bucket/lineitem/l_shipdate=1992-01-03/0000_part_00.parquet 0001_part_00.parquet 0002_part_00.parquet 0003_part_00.parquet s3://amzn-s3-demo-bucket/lineitem/l_shipdate=1992-01-04/0000_part_00.parquet 0001_part_00.parquet 0002_part_00.parquet 0003_part_00.parquet ...
注記

場合によっては、次の SQL ステートメントに示すように、UNLOAD コマンドで INCLUDE オプションを使用します。

unload ('select * from lineitem') to 's3://amzn-s3-demo-bucket/lineitem/' iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole' PARQUET PARTITION BY (l_shipdate) INCLUDE;

この場合、l_shipdate列は Parquet ファイルのデータにも含まれます。INCLUDE オプションを使用しない場合、l_shipdate列のデータは Parquet ファイルに含まれません。

VENUE テーブルを JSON ファイルにアンロードする

次の例は、VENUE テーブルをアンロードし、そのデータを JSON 形式で s3://amzn-s3-demo-bucket/unload/ に書き込みます。

unload ('select * from venue') to 's3://amzn-s3-demo-bucket/unload/' iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole' JSON;

VENUE テーブルのサンプル行を次に示します。

venueid | venuename | venuecity | venuestate | venueseats --------+----------------------------+-----------------+------------+----------- 1 | Pinewood Racetrack | Akron | OH | 0 2 | Columbus "Crew" Stadium | Columbus | OH | 0 4 | Community, Ballpark, Arena | Kansas City | KS | 0

JSON へのアンロード後、ファイルの形式は次のようになります。

{"venueid":1,"venuename":"Pinewood Racetrack","venuecity":"Akron","venuestate":"OH","venueseats":0} {"venueid":2,"venuename":"Columbus \"Crew\" Stadium ","venuecity":"Columbus","venuestate":"OH","venueseats":0} {"venueid":4,"venuename":"Community, Ballpark, Arena","venuecity":"Kansas City","venuestate":"KS","venueseats":0}

CSV ファイルへの VENUE のアップロード

次の例は、VENUE テーブルをアンロードし、データを CSV 形式で s3://amzn-s3-demo-bucket/unload/ に書き込みます。

unload ('select * from venue') to 's3://amzn-s3-demo-bucket/unload/' iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole' CSV;

VENUE テーブルに次の行が含まれているとします。

venueid | venuename | venuecity | venuestate | venueseats --------+----------------------------+-----------------+------------+----------- 1 | Pinewood Racetrack | Akron | OH | 0 2 | Columbus "Crew" Stadium | Columbus | OH | 0 4 | Community, Ballpark, Arena | Kansas City | KS | 0

アンロードしたファイルは次のようになります。

1,Pinewood Racetrack,Akron,OH,0 2,"Columbus ""Crew"" Stadium",Columbus,OH,0 4,"Community, Ballpark, Arena",Kansas City,KS,0

区切り文字を使用した CSV ファイルへの VENUE のアンロード

次の例では、パイプ文字 (|) を区切り文字として使用して VENUE テーブルをアンロードし、データを CSV 形式で書き込みます。アンロードしたファイルは、s3://amzn-s3-demo-bucket/unload/に書き込まれます。この例の VENUE テーブルには、最初の行 (Pinewood Race|track) の値にパイプ文字が含まれています。これは、結果の値が二重引用符で囲まれることを示すためにそうされています。二重引用符がある場合は二重引用符でエスケープされ、フィールド全体が二重引用符で囲まれます。

unload ('select * from venue') to 's3://amzn-s3-demo-bucket/unload/' iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole' CSV DELIMITER AS '|';

VENUE テーブルに次の行が含まれているとします。

venueid | venuename | venuecity | venuestate | venueseats --------+----------------------------+-----------------+------------+------------- 1 | Pinewood Race|track | Akron | OH | 0 2 | Columbus "Crew" Stadium | Columbus | OH | 0 4 | Community, Ballpark, Arena | Kansas City | KS | 0

アンロードしたファイルは次のようになります。

1|"Pinewood Race|track"|Akron|OH|0 2|"Columbus ""Crew"" Stadium"|Columbus|OH|0 4|Community, Ballpark, Arena|Kansas City|KS|0

マニフェストファイルを使用した VENUE のアンロード

マニフェストファイルを作成するには、MANIFEST オプションを指定します。次の例では、VENUE テーブルをアンロードし、データファイルとともにマニフェストファイルを s3://amzn-s3-demo-bucket/venue_pipe_ に書き込みます。

重要

MANIFEST オプションを指定してファイルをアンロードする場合、そのファイルをロードするときに COPY コマンドで MANIFEST オプションを使用する必要があります。同じプレフィックスを使用してファイルをロードし、MANIFEST オプションを指定しない場合、COPY ではマニフェストファイルがデータファイルであると推測され、操作が失敗します。

unload ('select * from venue') to 's3://amzn-s3-demo-bucket/venue_pipe_' iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole' manifest;

結果は次の 5 ファイルです。

s3://amzn-s3-demo-bucket/venue_pipe_0000_part_00 s3://amzn-s3-demo-bucket/venue_pipe_0001_part_00 s3://amzn-s3-demo-bucket/venue_pipe_0002_part_00 s3://amzn-s3-demo-bucket/venue_pipe_0003_part_00 s3://amzn-s3-demo-bucket/venue_pipe_manifest

マニフェストファイルの内容を次に示します。

{ "entries": [ {"url":"s3://amzn-s3-demo-bucket/tickit/venue_0000_part_00"}, {"url":"s3://amzn-s3-demo-bucket/tickit/venue_0001_part_00"}, {"url":"s3://amzn-s3-demo-bucket/tickit/venue_0002_part_00"}, {"url":"s3://amzn-s3-demo-bucket/tickit/venue_0003_part_00"} ] }

MANIFEST VERBOSE を使用した VENUE のアンロード

MANIFEST VERBOSE オプションを指定すると、マニフェストファイルに以下のセクションが含まれます。

  • entries セクションには、各ファイルの Amazon S3 パス、ファイルサイズ、および行数が一覧表示されます。

  • schema セクションには、列名、データ型、および各列のディメンションが一覧表示されます。

  • meta セクションには、すべてのファイルの合計ファイルサイズと行数が表示されます。

次の例では、MANIFEST VERBOSE オプションを使用して VENUE テーブルをアンロードします。

unload ('select * from venue') to 's3://amzn-s3-demo-bucket/unload_venue_folder/' iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole' manifest verbose;

マニフェストファイルの内容を次に示します。

{ "entries": [ {"url":"s3://amzn-s3-demo-bucket/venue_pipe_0000_part_00", "meta": { "content_length": 32295, "record_count": 10 }}, {"url":"s3://amzn-s3-demo-bucket/venue_pipe_0001_part_00", "meta": { "content_length": 32771, "record_count": 20 }}, {"url":"s3://amzn-s3-demo-bucket/venue_pipe_0002_part_00", "meta": { "content_length": 32302, "record_count": 10 }}, {"url":"s3://amzn-s3-demo-bucket/venue_pipe_0003_part_00", "meta": { "content_length": 31810, "record_count": 15 }} ], "schema": { "elements": [ {"name": "venueid", "type": { "base": "integer" }}, {"name": "venuename", "type": { "base": "character varying", 25 }}, {"name": "venuecity", "type": { "base": "character varying", 25 }}, {"name": "venuestate", "type": { "base": "character varying", 25 }}, {"name": "venueseats", "type": { "base": "character varying", 25 }} ] }, "meta": { "content_length": 129178, "record_count": 55 }, "author": { "name": "Amazon Redshift", "version": "1.0.0" } }

ヘッダーを使用した VENUE のアンロード

次の例では、ヘッダー行を指定して VENUE をアンロードします。

unload ('select * from venue where venueseats > 75000') to 's3://amzn-s3-demo-bucket/unload/' iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole' header parallel off;

以下に、出力ファイルの内容とヘッダー行を示します。

venueid|venuename|venuecity|venuestate|venueseats 6|New York Giants Stadium|East Rutherford|NJ|80242 78|INVESCO Field|Denver|CO|76125 83|FedExField|Landover|MD|91704 79|Arrowhead Stadium|Kansas City|MO|79451

より小さいファイルへの VENUE のアンロード

デフォルトでは、最大のファイルサイズは 6.2 GB です。アンロードするデータが 6.2 GB より大きい場合、UNLOAD は 6.2 GB のデータセグメントごとに新しいファイルを作成します。より小さなファイルを作成するには、MAXFILESIZE パラメータを含めます。前の例のデータのサイズを 20 GB とすると、次の UNLOAD コマンドは 各 1 GB サイズの 20 ファイルを作成します。

unload ('select * from venue') to 's3://amzn-s3-demo-bucket/unload/' iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole' maxfilesize 1 gb;

VENUE の逐次アンロード

逐次アンロードを行うには、PARALLEL を OFF にします。これにより、UNLOAD が一度に書き込むファイルの数は 1 つになります (ファイルにつき最大で 6.2 GB まで)。

次の例は、VENUE テーブルをアンロードし、データを s3://amzn-s3-demo-bucket/unload/ に逐次書き込みます。

unload ('select * from venue') to 's3://amzn-s3-demo-bucket/unload/venue_serial_' iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole' parallel off;

結果として、venue_serial_000 という名前のファイルが 1 つ生成されます。

アンロードするデータが 6.2 GB より大きい場合、UNLOAD は 6.2 GB のデータセグメントごとに新しいファイルを作成します。次の例は、LINEORDER テーブルをアンロードし、データを s3://amzn-s3-demo-bucket/unload/ に逐次書き込みます。

unload ('select * from lineorder') to 's3://amzn-s3-demo-bucket/unload/lineorder_serial_' iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole' parallel off gzip;

結果として、以下の一連のファイルが生成されます。

lineorder_serial_0000.gz lineorder_serial_0001.gz lineorder_serial_0002.gz lineorder_serial_0003.gz

出力ファイルの違いをわかりやすくするため、ロケーションにプレフィックスを含めることができます。次の例は、VENUE テーブルをアンロードし、データを s3://amzn-s3-demo-bucket/venue_pipe_ に書き込みます。

unload ('select * from venue') to 's3://amzn-s3-demo-bucket/unload/venue_pipe_' iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole';

結果として、unloadフォルダに以下の 4 つのファイルが生成されます。ここでも 4 つのスライスを想定しています。

venue_pipe_0000_part_00 venue_pipe_0001_part_00 venue_pipe_0002_part_00 venue_pipe_0003_part_00

アンロードファイルからの VENUE のロード

一連のアンロードファイルからテーブルをロードするには、COPY コマンドを使用して単純にプロセスを逆順で実行します。次の例では、新しいテーブル LOADVENUE を作成し、前の例で作成したデータファイルからテーブルをロードします。

create table loadvenue (like venue); copy loadvenue from 's3://amzn-s3-demo-bucket/venue_pipe_' iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole';

アンロードファイルとともにマニフェストファイルを作成するときに MANIFEST オプションを使用した場合は、同じマニフェストファイルを使用してデータをロードできます。これには、COPY コマンドで MANIFEST オプションを指定します。次の例では、マニフェストファイルを使用してデータをロードします。

copy loadvenue from 's3://amzn-s3-demo-bucket/venue_pipe_manifest' iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole' manifest;

暗号化ファイルへの VENUE のアンロード

次の例では、AWS KMSキーを使用して、VENUE テーブルが一連の暗号化ファイルにアンロードされます。ENCRYPTED オプションでマニフェストファイルを指定すると、マニフェストファイルも暗号化されます。詳細については、「暗号化されたデータファイルをアンロードする」を参照してください。

unload ('select * from venue') to 's3://amzn-s3-demo-bucket/venue_encrypt_kms' iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole' kms_key_id '1234abcd-12ab-34cd-56ef-1234567890ab' manifest encrypted;

次の例では、ルート対称キーを使用して VENUE テーブルを一連の暗号化ファイルにアンロードします。

unload ('select * from venue') to 's3://amzn-s3-demo-bucket/venue_encrypt_cmk' iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole' master_symmetric_key 'EXAMPLEMASTERKEYtkbjk/OpCwtYSx/M4/t7DMCDIK722' encrypted;

暗号化ファイルからの VENUE のロード

UNLOAD を ENCRYPT オプションとともに使用して作成された一連のファイルからテーブルをロードするには、COPY コマンドを使用してプロセスを逆順で実行します。同時にこのコマンドでは、ENCRYPTED オプションを使用ながら、UNLOAD コマンドに使用されたものと同じルート対称キーを指定します。次の例では、前の例で作成した暗号化されたデータファイルから LOADVENUE テーブルをロードします。

create table loadvenue (like venue); copy loadvenue from 's3://amzn-s3-demo-bucket/venue_encrypt_manifest' iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole' master_symmetric_key 'EXAMPLEMASTERKEYtkbjk/OpCwtYSx/M4/t7DMCDIK722' manifest encrypted;

タブ区切りファイルへの VENUE データのアンロード

unload ('select venueid, venuename, venueseats from venue') to 's3://amzn-s3-demo-bucket/venue_tab_' iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole' delimiter as '\t';

出力データファイルは次のようになります。

1 Toyota Park Bridgeview IL 0 2 Columbus Crew Stadium Columbus OH 0 3 RFK Stadium Washington DC 0 4 CommunityAmerica Ballpark Kansas City KS 0 5 Gillette Stadium Foxborough MA 68756 ...

固定幅のデータファイルへの VENUE のアンロード

unload ('select * from venue') to 's3://amzn-s3-demo-bucket/venue_fw_' iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole' fixedwidth as 'venueid:3,venuename:39,venuecity:16,venuestate:2,venueseats:6';

出力データファイルは次のようになります。

1 Toyota Park Bridgeview IL0 2 Columbus Crew Stadium Columbus OH0 3 RFK Stadium Washington DC0 4 CommunityAmerica BallparkKansas City KS0 5 Gillette Stadium Foxborough MA68756 ...

VENUE を一連のタブ区切り GZIP 圧縮ファイルにアンロードします。

unload ('select * from venue') to 's3://amzn-s3-demo-bucket/venue_tab_' iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole' delimiter as '\t' gzip;

VENUE を GZIP 圧縮テキストファイルにアンロードする

unload ('select * from venue') to 's3://amzn-s3-demo-bucket/venue_tab_' iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole' extension 'txt.gz' gzip;

区切り文字を含むデータのアンロード

この例では、ADDQUOTES オプションを使って、実際の一部のデータフィールドにカンマが含まれているカンマ区切りデータをアンロードします。

最初に引用符を含むテーブルを作成します。

create table location (id int, location char(64)); insert into location values (1,'Phoenix, AZ'),(2,'San Diego, CA'),(3,'Chicago, IL');

次に ADDQUOTES オプションを使って、データをアンロードします。

unload ('select id, location from location') to 's3://amzn-s3-demo-bucket/location_' iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole' delimiter ',' addquotes;

アンロードされたデータファイルは次のようになります。

1,"Phoenix, AZ" 2,"San Diego, CA" 3,"Chicago, IL" ...

結合クエリの結果のアンロード

次の例では、ウィンドウ関数を含む結合クエリの結果をアンロードします。

unload ('select venuecity, venuestate, caldate, pricepaid, sum(pricepaid) over(partition by venuecity, venuestate order by caldate rows between 3 preceding and 3 following) as winsum from sales join date on sales.dateid=date.dateid join event on event.eventid=sales.eventid join venue on event.venueid=venue.venueid order by 1,2') to 's3://amzn-s3-demo-bucket/tickit/winsum' iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole';

出力ファイルは次のようになります。

Atlanta|GA|2008-01-04|363.00|1362.00 Atlanta|GA|2008-01-05|233.00|2030.00 Atlanta|GA|2008-01-06|310.00|3135.00 Atlanta|GA|2008-01-08|166.00|8338.00 Atlanta|GA|2008-01-11|268.00|7630.00 ...

NULL AS を使用したアンロード

UNLOAD では、デフォルトで空の文字列として Null 値を出力します。以下の例では、NULL AS を使用して Null のテキスト文字列を置換する方法を示します。

これらの例では、VENUE テーブルにいくつかの Null 値を追加します。

update venue set venuestate = NULL where venuecity = 'Cleveland';

VENUESTATE が Null である VENUE から選択して、列に Null が格納されていることを確認します。

select * from venue where venuestate is null; venueid | venuename | venuecity | venuestate | venueseats ---------+--------------------------+-----------+------------+------------ 22 | Quicken Loans Arena | Cleveland | | 0 101 | Progressive Field | Cleveland | | 43345 72 | Cleveland Browns Stadium | Cleveland | | 73200

次に、VENUE テーブルに対して NULL AS オプションを指定して UNLOAD を実行し、Null 値をキャラクタ文字列 'fred' で置き換えます。

unload ('select * from venue') to 's3://amzn-s3-demo-bucket/nulls/' iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole' null as 'fred';

次のアンロードファイルの例は、Null 値が fred で置き換えられたことを示しています。この場合、VENUESEATS の値の一部も Null であったため、fredで置き換えられたことが分かります。VENUESEATS のデータ型が整数であっても、UNLOAD によってアンロードファイルの値がテキストに変換され、さらに COPY によって再び整数に戻されます。固定幅ファイルにアンロードする場合、NULL AS の文字列をフィールド幅以下にする必要があります。

248|Charles Playhouse|Boston|MA|0 251|Paris Hotel|Las Vegas|NV|fred 258|Tropicana Hotel|Las Vegas|NV|fred 300|Kennedy Center Opera House|Washington|DC|0 306|Lyric Opera House|Baltimore|MD|0 308|Metropolitan Opera|New York City|NY|0 5|Gillette Stadium|Foxborough|MA|5 22|Quicken Loans Arena|Cleveland|fred|0 101|Progressive Field|Cleveland|fred|43345 ...

アンロードファイルからテーブルをロードするには、COPY コマンドで同じ NULL AS オプションを指定します。

注記

NOT NULL として定義された列に Null のロードを試みた場合、COPY コマンドは失敗します。

create table loadvenuenulls (like venue); copy loadvenuenulls from 's3://amzn-s3-demo-bucket/nulls/' iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole' null as 'fred';

列に単なる空の文字列ではなく Null が含まれていることを確認するには、LOADVENUENULLS から選択して Null でフィルタリングします。

select * from loadvenuenulls where venuestate is null or venueseats is null; venueid | venuename | venuecity | venuestate | venueseats ---------+--------------------------+-----------+------------+------------ 72 | Cleveland Browns Stadium | Cleveland | | 73200 253 | Mirage Hotel | Las Vegas | NV | 255 | Venetian Hotel | Las Vegas | NV | 22 | Quicken Loans Arena | Cleveland | | 0 101 | Progressive Field | Cleveland | | 43345 251 | Paris Hotel | Las Vegas | NV | ...

Null を含むテーブルに対してデフォルトの NULL AS の動作を使用して UNLOAD を実行し、次にデフォルトの NULL AS の動作を使用して COPY を実行してデータをテーブルに戻すことができます。ただし、ターゲットテーブルの数値以外のフィールドには、Null ではなく空の文字列が格納されます。デフォルトでは、UNLOAD によって Null が空の文字列 (空白またはゼロ長) に変換されます。COPY によって、数値列では空の文字列が Null に変換されますが、数値以外の列には空の文字列が挿入されます。次の例では、デフォルトの NULL AS 動作を使用して UNLOAD の後で COPY を実行する方法を示します。

unload ('select * from venue') to 's3://amzn-s3-demo-bucket/nulls/' iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole' allowoverwrite; truncate loadvenuenulls; copy loadvenuenulls from 's3://amzn-s3-demo-bucket/nulls/' iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole';

この場合、Null でフィルタリングすると、VENUESEATS に Null が含まれていた行のみが表示されます。テーブル (VENUE) で VENUESTATE に Null が含まれていた場合、ターゲットテーブル (LOADVENUENULLS) の VENUESTATE には空の文字列が格納されます。

select * from loadvenuenulls where venuestate is null or venueseats is null; venueid | venuename | venuecity | venuestate | venueseats ---------+--------------------------+-----------+------------+------------ 253 | Mirage Hotel | Las Vegas | NV | 255 | Venetian Hotel | Las Vegas | NV | 251 | Paris Hotel | Las Vegas | NV | ...

数値以外の列に空の文字列を Null としてロードするには、EMPTYASNULL オプションまたは BLANKSASNULL オプションを含めます。両方を組み合わせて使用しても問題ありません。

unload ('select * from venue') to 's3://amzn-s3-demo-bucket/nulls/' iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole' allowoverwrite; truncate loadvenuenulls; copy loadvenuenulls from 's3://amzn-s3-demo-bucket/nulls/' iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole' EMPTYASNULL;

列に単なる空白または空の文字列ではなく Null が含まれていることを確認するには、LOADVENUENULLS でその列を選択して、Null によるフィルタリングを行います。

select * from loadvenuenulls where venuestate is null or venueseats is null; venueid | venuename | venuecity | venuestate | venueseats ---------+--------------------------+-----------+------------+------------ 72 | Cleveland Browns Stadium | Cleveland | | 73200 253 | Mirage Hotel | Las Vegas | NV | 255 | Venetian Hotel | Las Vegas | NV | 22 | Quicken Loans Arena | Cleveland | | 0 101 | Progressive Field | Cleveland | | 43345 251 | Paris Hotel | Las Vegas | NV | ...

ALLOWOVERWRITE パラメータを使用してアンロード

デフォルトでは、UNLOAD は送り先バケットの既存のファイルを上書きしません。例えば、送り先バケット内のファイルを変更せずに、同じ UNLOAD ステートメントを 2 回実行すると、2 回目の UNLOAD は失敗します。マニフェストファイルを含めて既存のファイルを上書きするには、ALLOWOVERWRITE オプションを指定します。

unload ('select * from venue') to 's3://amzn-s3-demo-bucket/venue_pipe_' iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole' manifest allowoverwrite;

PARALLEL パラメータと MANIFEST パラメータを使用して EVENT テーブルをアンロード

テーブルを並行して UNLOAD し、マニフェストファイルを生成できます。Amazon S3 データファイルはすべて同じレベルで作成され、名前の末尾にパターン 0000_part_00 が付きます。マニフェストファイルはデータファイルと同じフォルダレベルにあり、末尾にテキスト manifest が付きます。次の SQL は EVENT テーブルをアンロードし、ベース名 parallel でファイルを作成します。

unload ('select * from mytickit1.event') to 's3://amzn-s3-demo-bucket/parallel' iam_role 'arn:aws:iam::123456789012:role/MyRedshiftRole' parallel on manifest;

Amazon S3 ファイルのリストは次のようになります。

Name Last modified Size parallel0000_part_00 - August 2, 2023, 14:54:39 (UTC-07:00) 52.1 KB parallel0001_part_00 - August 2, 2023, 14:54:39 (UTC-07:00) 53.4 KB parallel0002_part_00 - August 2, 2023, 14:54:39 (UTC-07:00) 52.1 KB parallel0003_part_00 - August 2, 2023, 14:54:39 (UTC-07:00) 51.1 KB parallel0004_part_00 - August 2, 2023, 14:54:39 (UTC-07:00) 54.6 KB parallel0005_part_00 - August 2, 2023, 14:54:39 (UTC-07:00) 53.4 KB parallel0006_part_00 - August 2, 2023, 14:54:39 (UTC-07:00) 54.1 KB parallel0007_part_00 - August 2, 2023, 14:54:39 (UTC-07:00) 55.9 KB parallelmanifest - August 2, 2023, 14:54:39 (UTC-07:00) 886.0 B

parallelmanifest ファイルの内容は次のようになります。

{ "entries": [ {"url":"s3://amzn-s3-demo-bucket/parallel0000_part_00", "meta": { "content_length": 53316 }}, {"url":"s3://amzn-s3-demo-bucket/parallel0001_part_00", "meta": { "content_length": 54704 }}, {"url":"s3://amzn-s3-demo-bucket/parallel0002_part_00", "meta": { "content_length": 53326 }}, {"url":"s3://amzn-s3-demo-bucket/parallel0003_part_00", "meta": { "content_length": 52356 }}, {"url":"s3://amzn-s3-demo-bucket/parallel0004_part_00", "meta": { "content_length": 55933 }}, {"url":"s3://amzn-s3-demo-bucket/parallel0005_part_00", "meta": { "content_length": 54648 }}, {"url":"s3://amzn-s3-demo-bucket/parallel0006_part_00", "meta": { "content_length": 55436 }}, {"url":"s3://amzn-s3-demo-bucket/parallel0007_part_00", "meta": { "content_length": 57272 }} ] }

PARALLEL OFF パラメータと MANIFEST パラメータを使用して EVENT テーブルをアンロード

テーブルを順番にアンロード (PARALLEL OFF) して、マニフェストファイルを生成できます。Amazon S3 データファイルはすべて同じレベルで作成され、名前の末尾にパターン 0000 が付きます。マニフェストファイルはデータファイルと同じフォルダレベルにあり、末尾にテキスト manifest が付きます。

unload ('select * from mytickit1.event') to 's3://amzn-s3-demo-bucket/serial' iam_role 'arn:aws:iam::123456789012:role/MyRedshiftRole' parallel off manifest;

Amazon S3 ファイルのリストは次のようになります。

Name Last modified Size serial0000 - August 2, 2023, 15:54:39 (UTC-07:00) 426.7 KB serialmanifest - August 2, 2023, 15:54:39 (UTC-07:00) 120.0 B

serialmanifest ファイルの内容は、次のようになります。

{ "entries": [ {"url":"s3://amzn-s3-demo-bucket/serial000", "meta": { "content_length": 436991 }} ] }

PARTITION BY パラメータと MANIFEST パラメータを使用して EVENT テーブルをアンロード

テーブルをパーティションごとにアンロードし、マニフェストファイルを生成できます。Amazon S3 に、子パーティションフォルダを含む新しいフォルダが作成され、子フォルダ内のデータファイルは 0000_par_00 のような名前パターンで作成されます。マニフェストファイルは、manifest という名前の付いた子フォルダと同じフォルダレベルにあります。

unload ('select * from mytickit1.event') to 's3://amzn-s3-demo-bucket/partition' iam_role 'arn:aws:iam::123456789012:role/MyRedshiftRole' partition by (eventname) manifest;

Amazon S3 ファイルのリストは次のようになります。

Name Type Last modified Size partition Folder

partition フォルダ内には、パーティション名が付いた子フォルダとマニフェストファイルがあります。次に示すのは、partition フォルダ内のフォルダリストの最下部であり、次のようになります。

Name Type Last modified Size ... eventname=Zucchero/ Folder eventname=Zumanity/ Folder eventname=ZZ Top/ Folder manifest - August 2, 2023, 15:54:39 (UTC-07:00) 467.6 KB

eventname=Zucchero/ フォルダには、次のようなデータファイルがあります。

Name Last modified Size 0000_part_00 - August 2, 2023, 15:59:19 (UTC-07:00) 70.0 B 0001_part_00 - August 2, 2023, 15:59:16 (UTC-07:00) 106.0 B 0002_part_00 - August 2, 2023, 15:59:15 (UTC-07:00) 70.0 B 0004_part_00 - August 2, 2023, 15:59:17 (UTC-07:00) 141.0 B 0006_part_00 - August 2, 2023, 15:59:16 (UTC-07:00) 35.0 B 0007_part_00 - August 2, 2023, 15:59:19 (UTC-07:00) 108.0 B

manifest ファイルの内容の最下部は次のようになります。

{ "entries": [ ... {"url":"s3://amzn-s3-demo-bucket/partition/eventname=Zucchero/007_part_00", "meta": { "content_length": 108 }}, {"url":"s3://amzn-s3-demo-bucket/partition/eventname=Zumanity/007_part_00", "meta": { "content_length": 72 }} ] }

MAXFILESIZE、ROWGROUPSIZE、MANIFEST の各パラメータを使用して EVENT テーブルをアンロード

テーブルを並行して UNLOAD し、マニフェストファイルを生成できます。Amazon S3 データファイルはすべて同じレベルで作成され、名前の末尾にパターン 0000_part_00 が付きます。生成される Parquet データファイルは 256 MB、行グループのサイズは 128 MB に制限されています。マニフェストファイルはデータファイルと同じフォルダレベルにあり、末尾に manifest が付きます。

unload ('select * from mytickit1.event') to 's3://amzn-s3-demo-bucket/eventsize' iam_role 'arn:aws:iam::123456789012:role/MyRedshiftRole' maxfilesize 256 MB rowgroupsize 128 MB parallel on parquet manifest;

Amazon S3 ファイルのリストは次のようになります。

Name Type Last modified Size eventsize0000_part_00.parquet parquet August 2, 2023, 17:35:21 (UTC-07:00) 24.5 KB eventsize0001_part_00.parquet parquet August 2, 2023, 17:35:21 (UTC-07:00) 24.8 KB eventsize0002_part_00.parquet parquet August 2, 2023, 17:35:21 (UTC-07:00) 24.4 KB eventsize0003_part_00.parquet parquet August 2, 2023, 17:35:21 (UTC-07:00) 24.0 KB eventsize0004_part_00.parquet parquet August 2, 2023, 17:35:21 (UTC-07:00) 25.3 KB eventsize0005_part_00.parquet parquet August 2, 2023, 17:35:21 (UTC-07:00) 24.8 KB eventsize0006_part_00.parquet parquet August 2, 2023, 17:35:21 (UTC-07:00) 25.0 KB eventsize0007_part_00.parquet parquet August 2, 2023, 17:35:21 (UTC-07:00) 25.6 KB eventsizemanifest - August 2, 2023, 17:35:21 (UTC-07:00) 958.0 B

eventsizemanifest ファイルの内容は次のようになります。

{ "entries": [ {"url":"s3://amzn-s3-demo-bucket/eventsize0000_part_00.parquet", "meta": { "content_length": 25130 }}, {"url":"s3://amzn-s3-demo-bucket/eventsize0001_part_00.parquet", "meta": { "content_length": 25428 }}, {"url":"s3://amzn-s3-demo-bucket/eventsize0002_part_00.parquet", "meta": { "content_length": 25025 }}, {"url":"s3://amzn-s3-demo-bucket/eventsize0003_part_00.parquet", "meta": { "content_length": 24554 }}, {"url":"s3://amzn-s3-demo-bucket/eventsize0004_part_00.parquet", "meta": { "content_length": 25918 }}, {"url":"s3://amzn-s3-demo-bucket/eventsize0005_part_00.parquet", "meta": { "content_length": 25362 }}, {"url":"s3://amzn-s3-demo-bucket/eventsize0006_part_00.parquet", "meta": { "content_length": 25647 }}, {"url":"s3://amzn-s3-demo-bucket/eventsize0007_part_00.parquet", "meta": { "content_length": 26256 }} ] }