將資料卸載到 Amazon S3 - Amazon Redshift

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

將資料卸載到 Amazon S3

Amazon Redshift 會將 select 陳述式的結果分散在一組檔案中,每個節點分割中一或多個檔案,來簡化資料的平行重新載入。或者,您可以透過新增PARALLELOFF選項,指定UNLOAD應將結果依序寫入一或多個檔案。您可以透過指定MAXFILESIZE參數來限制 Amazon S3 中的檔案大小。UNLOAD使用 Amazon S3 伺服器端加密 (SSE-S3) 自動加密資料檔案。

您可以在 Amazon Redshift 支援的UNLOAD命令中使用任何選取陳述式,但在外部選取中使用LIMIT子句的選取項除外。例如,您可以使用其中包含特定欄位的 select 陳述式,或使用 where 子句來聯結多個表格。如果您的查詢包含引號 (例如用來括住常值),您需要在查詢常值中逸出它們 (\')。如需詳細資訊,請參閱 SELECT 命令參考。如需有關使用LIMIT子句的詳細資訊,請參閱指UNLOAD令的。使用須知

例如,下列UNLOAD命令會將VENUE表格的內容傳送到 Amazon S3 儲存貯體s3://amzn-s3-demo-bucket/tickit/unload/

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

先前範例建立的檔名包含字首 'venue_'。

venue_0000_part_00 venue_0001_part_00 venue_0002_part_00 venue_0003_part_00

依預設,UNLOAD會根據叢集中的磁碟片段數目,parallel 寫入資料到多個檔案。若要將資料寫入單一檔案,請指定PARALLELOFF。UNLOAD依序寫入數據,完全根據 ORDER BY 子句進行排序,如果使用的話。資料檔案大小上限為 6.2 GB。如果資料大小超過上限,則UNLOAD會建立其他檔案,每個檔案最多 6.2 GB。

下列範例會將內容VENUE寫入單一檔案。僅需要一個檔案,因為檔案大小少於 6.2 GB。

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

該UNLOAD命令被設計為使用 parallel 處理。我們建議在大多數情況下保持PARALLEL啟用狀態,尤其是在使用COPY命令將使用檔案載入表格時。

假設總資料大小VENUE為 5 GB,下列範例會將內容寫入 50 個VENUE檔案,每個檔案大小為 100 MB。

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

如果您在 Amazon S3 路徑字串中包含前置詞,檔案名稱UNLOAD會使用該前置詞。

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

您可以透過在UNLOAD命令中指定MANIFEST選項,建立列出卸載檔案的資訊清單檔案。資訊清單是JSON格式的文字檔案,可明確列出寫入 Amazon S3 URL 的每個檔案。

下列範例包含資訊清單選項。

unload ('select * from venue') to 's3://amzn-s3-demo-bucket/tickit/venue_' iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole' 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"} ] }

清單文件可用於通過使用COPY與MANIFEST選項加載相同的文件。如需詳細資訊,請參閱使用資訊清單指定資料檔案

完成UNLOAD操作後,請導覽至UNLOAD寫入檔案的 Amazon S3 儲存貯體,以確認資料已正確卸載。您將會在每個分割看到一或多個含編號的檔案,從編號零開始。如果您指定了該MANIFEST選項,您還將看到一個以 'manifest' 結尾的文件。例如:

amzn-s3-demo-bucket/tickit/venue_0000_part_00 amzn-s3-demo-bucket/tickit/venue_0001_part_00 amzn-s3-demo-bucket/tickit/venue_0002_part_00 amzn-s3-demo-bucket/tickit/venue_0003_part_00 amzn-s3-demo-bucket/tickit/venue_manifest

您可以在UNLOAD完成後呼叫 Amazon S3 清單操作,以程式設計方式取得寫入 Amazon S3 的檔案清單。您也可以查詢 STL _ UNLOAD _ LOG。

下列查詢會傳回由建立的檔案的路徑名稱。UNLOADPG_ _ LAST _ ID QUERY 函數會傳回最近的查詢。

select query, substring(path,0,40) as path from stl_unload_log where query=2320 order by path; query | path -------+-------------------------------------- 2320 | s3://amzn-s3-demo-bucket/venue0000_part_00 2320 | s3://amzn-s3-demo-bucket/venue0001_part_00 2320 | s3://amzn-s3-demo-bucket/venue0002_part_00 2320 | s3://amzn-s3-demo-bucket/venue0003_part_00 (4 rows)

如果資料量很大,Amazon Redshift 可能會根據分割將檔案分為多個部分。例如:

venue_0000_part_00 venue_0000_part_01 venue_0000_part_02 venue_0001_part_00 venue_0001_part_01 venue_0001_part_02 ...

下列UNLOAD命令在 select 陳述式中包含引號字串,因此引號會逸出 (=\'OH\' ')。

unload ('select venuename, venuecity from venue where venuestate=\'OH\' ') to 's3://amzn-s3-demo-bucket/tickit/venue/ ' iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole';

依預設,UNLOAD將會失敗,而不是覆寫目標值區中的現有檔案。若要覆寫現有檔案 (包括資訊清單檔案),請指定ALLOWOVERWRITE選項。

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