

 Amazon Redshift 將不再支援從修補程式 198 開始建立新的 Python UDFs。現有 Python UDF 將繼續正常運作至 2026 年 6 月 30 日。如需詳細資訊，請參閱[部落格文章](https://aws.amazon.com/blogs/big-data/amazon-redshift-python-user-defined-functions-will-reach-end-of-support-after-june-30-2026/)。

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

# 將資料卸載到 Amazon S3
<a name="t_Unloading_tables"></a>

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

您可以在 Amazon Redshift 支援的 UNLOAD 命令中使用任何 select 陳述式，除了在外部 select 中使用 LIMIT 子句的 select 以外。例如，您可以使用其中包含特定欄位的 select 陳述式，或使用 where 子句來聯結多個表格。如果您的查詢包含引號 (例如用來括住常值)，您需要在查詢常值中逸出它們 (\\')。如需詳細資訊，請參閱 [SELECT](r_SELECT_synopsis.md) 命令參考。如需使用 LIMIT 子句的相關資訊，請參閱 [使用須知](r_UNLOAD.md#unload-usage-notes) 以了解 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 OFF。UNLOAD 會按順序寫入資料，且如果有使用 ORDER BY 字句，則會根據該子句進行絕對排列。資料檔案大小上限為 6.2 GB。如果資料大小大於上限 (每個高達 6.2 GB)，UNLOAD 會額外建立檔案。

以下範例指會將內容 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 保持為啟用，特別是在使用 COPY 命令將檔案是用來載入表格時。

假設 VENUE 的資料大小總計為 5 GB，下列範例會將 VENUE 的內容寫入至 50 個檔案，每個大小為 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 選項。如需詳細資訊，請參閱[使用資訊清單指定資料檔案](loading-data-files-using-manifest.md)。

在您完成 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。

下列查詢會傳回已由 UNLOAD 建立之檔案的路徑名稱。[PG\_LAST\_QUERY\_ID](PG_LAST_QUERY_ID.md) 函數會傳回最近的查詢。

```
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;
```