Amazon Redshift 自 2025 年 11 月 1 日起不再支援建立新的 Python UDF。如果您想要使用 Python UDF,請在該日期之前建立 UDF。現有 Python UDF 將繼續正常運作。如需詳細資訊,請參閱部落格文章
建立 S3 事件整合,以自動從 Amazon S3 儲存貯體複製檔案
注意
自動複製的預覽版已結束。因此,預覽叢集將在預覽版結束後的 30 天自動移除。如果您打算繼續使用自動複製,建議您在另一個 Amazon Redshift 叢集上重新建立現有的自動複製任務。不支援將預覽叢集升級至最新的 Amazon Redshift 版本。
您可以使用自動複製將資料從儲存在 Amazon S3 中的檔案載入您的 Amazon Redshift 資料表。Amazon Redshift 會偵測新的 Amazon S3 檔案何時新增至 COPY 命令中指定的路徑。然後,COPY 命令會自動執行,您不必建立外部資料擷取管道。Amazon Redshift 會追蹤哪些檔案已載入完成。Amazon Redshift 會決定每個 COPY 命令批次處理的檔案數量。您可以在系統檢視中看到產生的 COPY 命令。
建立自動 COPY JOB 的第一步,是建立 S3 事件整合。當新檔案出現在 Amazon S3 來源儲存貯體中時,Amazon Redshift 便會管理使用 COPY 命令將檔案載入資料庫。
建立 S3 事件整合的先決條件
若要設定 s3 事件整合,請確認已完成下列先決條件。
您的 Amazon S3 儲存貯體必須具有允許數個 Amazon S3 許可的儲存貯體政策。例如,下列範例政策允許在
us-east-1中託管的資源儲存貯體amzn-s3-demo-bucket的許可。Amazon S3 儲存貯體和整合位於相同 AWS 區域 中。您的目標 Amazon Redshift 佈建叢集或 Redshift Serverless 命名空間必須具有儲存貯體的許可。確認與叢集或無伺服器命名空間相關聯的 IAM 角色具有允許適當許可的 IAM 政策。此政策必須同時允許針對儲存貯體資源的
s3:GetObject(例如) 和針對儲存貯體資源及其內容的amzn-s3-demo-buckets3:ListBucket(例如)。amzn-s3-demo-bucket/*將您的政策新增至與角色擁有信任關係的 IAM 角色,如下所示。
如果您的目標資料倉儲是佈建叢集,您可以使用 Amazon Redshift 主控台,於叢集詳細資訊中的叢集許可索引標籤將 IAM 角色與佈建叢集建立關聯。如需如何將角色與佈建叢集建立關聯的相關資訊,請參閱《Amazon Redshift 管理指南》中的將 IAM 角色與叢集建立關聯。
如果您的目標資料倉儲是 Redshift Serverless,您可以使用 Redshift Serverless 主控台,於命名空間詳細資訊中的安全和加密索引標籤將 IAM 角色與無伺服器命名空間建立關聯。如需如何將角色與無伺服器命名空間建立關聯的相關資訊,請參閱《Amazon Redshift 管理指南》中的授與許可給 Amazon Redshift Serverless。
您的 Amazon Redshift 資料倉儲也必須具有允許 Amazon S3 儲存貯體的資源政策。如果您使用 Amazon Redshift 主控台,當您建立 s3 事件整合時,Amazon Redshift 會提供為我修正選項,以便將此政策新增至您的 Amazon Redshift 資料倉儲。若要自行更新資源政策,您可以使用 put-resource-policy AWS CLI 命令。例如,若要將資源政策連接至 Amazon Redshift 佈建叢集,以便與 Amazon S3 儲存貯體進行 S3 事件整合,請執行類似以下的 AWS CLI 命令。下列範例顯示使用者帳戶
123456789012在us-east-1AWS 區域 中的佈建叢集命名空間的政策。儲存貯體名為amzn-s3-demo-bucket。aws redshift put-resource-policy \ --policy file://rs-rp.json \ --resource-arn "arn:aws:redshift:us-east-1:123456789012:namespace/cc4ffe56-ad2c-4fd1-a5a2-f29124a56433"其中
rs-rp.json包含:若要將資源政策連接至 Redshift Serverless 命名空間,以便與 Amazon S3 儲存貯體進行 S3 事件整合,請執行類似以下的 AWS CLI 命令。下列範例顯示使用者帳戶
123456789012在us-east-1AWS 區域 中的無伺服器命名空間的政策。儲存貯體名為amzn-s3-demo-bucket。aws redshift put-resource-policy \ --policy file://rs-rp.json \ --resource-arn "arn:aws:redshift-serverless:us-east-1:123456789012:namespace/namespace-1"其中
rs-rp.json包含:
建立 S3 事件整合
若要設定複製任務,請先定義 S3 事件整合。
接著 Amazon Redshift 會建立 S3 事件整合,包含其相關聯的來源和目標、狀態,以及相關聯自動複製任務的狀態相關資訊。您可以在 Amazon Redshift 主控台上檢視 S3 事件整合的相關資訊,方法是選擇 S3 事件整合,然後選擇整合以顯示其詳細資訊。整合會以在我的帳戶中和從其他帳戶建立的整合加以區分。在我的帳戶中清單顯示來源和目標位於相同帳戶中的整合。從其他帳戶清單顯示來源為其他帳戶擁有的整合。
如果您刪除 S3 事件整合,對應的 COPY JOB 狀態會從 1 (作用中) 變更為 0 (非作用中/待定)。不過,不會自動捨棄對應的 COPY JOB。如果您之後嘗試建立同名的 COPY JOB,則可能會發生衝突。
建立和監控 COPY JOB
建立整合後,在您所建立整合的 S3 事件整合詳細資訊頁面上,選擇建立自動複製任務以前往 Amazon Redshift 查詢編輯器 v2,您可在此建立整合的自動複製任務。Amazon Redshift 會將 COPY JOB CREATE 陳述式的 FROM 子句中的儲存貯體,與 S3 事件整合中使用的儲存貯體進行比對。如需如何使用 Amazon Redshift 查詢編輯器 v2 相關資訊,請參閱《Amazon Redshift 管理指南》中的使用 Amazon Redshift 查詢編輯器 v2 來查詢資料庫。例如,在查詢編輯器 v2 中執行下列 COPY 命令,以建立將 Amazon S3 儲存貯體 s3://amzn-s3-demo-bucket/staging-folder 與 Amazon S3 事件整合進行比對的自動 COPY JOB。
COPY public.target_table FROM 's3://amzn-s3-demo-bucket/staging-folder' IAM_ROLE 'arn:aws:iam::123456789012:role/MyLoadRoleName' JOB CREATE my_copy_job_name AUTO ON;
您只會定義 COPY JOB 一次。之後的執行會使用相同參數。
若要定義和管理 COPY JOB,您必須具有許可。如需授與和撤銷 COPY JOB 相關許可的詳細資訊,請參閱 GRANT 和 REVOKE。如需授與和撤銷 COPY JOB 限定範圍許可的詳細資訊,請參閱 授予限定範圍權限 和 撤銷限定範圍權限。
您可以使用 CREATE、LIST、SHOW、DROP、ALTER 和 RUN 工作的選項來管理載入操作。如需更多詳細資訊,請參閱 COPY JOB。
您可以查詢系統檢視以查看 COPY JOB 狀態和進度。提供的視圖如下:
SYS_COPY_JOB — 目前定義的每個 COPY JOB 各包含一列。
SYS_COPY_JOB_DETAIL - 包含每個 COPY JOB 的待定、錯誤和已擷取檔案的詳細資訊。
SYS_COPY_JOB_INFO - 包含有關 COPY JOB 的記錄訊息。
SYS_LOAD_HISTORY — 包含 COPY 命令的詳細資訊。
SYS_LOAD_ERROR_DETAIL — 包含 COPY 命令錯誤的詳細資訊。
SVV_COPY_JOB_INTEGRATIONS - 包含 S3 事件整合的詳細資訊。
STL_LOAD_ERRORS — 包含來自 COPY 命令的錯誤。
STL_LOAD_COMMITS — 包含用來對 COPY 命令資料載入進行疑難排解的資訊。
如需有關 S3 事件整合故障診斷的資訊,請參閱 故障診斷 S3 事件整合和 COPY JOB 錯誤。
若要取得由 COPY JOB 載入的檔案清單,請執行下列 SQL,但請先取代 <job_id>:
SELECT job_id, job_name, data_source, copy_query, filename, status, curtime FROM sys_copy_job copyjob JOIN stl_load_commits loadcommit ON copyjob.job_id = loadcommit.copy_job_id WHERE job_id =<job_id>;
建立 S3 事件整合以進行自動複製時的考量事項
使用自動複製時,請注意下列事項。
您可以為 AWS 帳戶 中的每個叢集或工作群組建立最多 200 個 COPY JOB。
您可以為每個 Amazon Redshift 目標建立最多 50 個 S3 事件整合。
您無法在來源 Amazon S3 儲存貯體的儲存貯體名稱中包含句號 (.) 時,建立 S3 事件整合。
您只能在相同來源和目標之間建立一個 S3 事件整合。也就是說,Amazon S3 儲存貯體與 Amazon Redshift 資料倉儲之間一次只能有一個 S3 事件整合。
您無法在來源 Amazon S3 儲存貯體上定義事件類型
S3_OBJECT_CREATED的任何現有事件通知。不過,在 S3 事件整合建立之後,您可以使用範圍較窄的字首/字尾來更新 Amazon S3 儲存貯體事件通知。如此一來,您也可以設定S3_OBJECT_CREATED作為其他目標的另一個字首/字尾,並避免與 S3 事件整合發生衝突。如果您遇到自動複製未如預期執行的問題,請在聯絡 AWS 支援 時,備妥發生問題的時間範圍內 S3 儲存貯體上s3:PutBucketNotificationConfiguration動作的 AWS CloudTrail 日誌。
支援的地區
以下是自動複製可用的區域。
| 區域 | 自動複製 |
|---|---|
| 非洲 (開普敦) | 可用性 |
| 亞太區域 (香港) | 可用性 |
| 亞太區域 (台北) | 可用性 |
| 亞太地區 (東京) | 可用性 |
| 亞太地區 (首爾) | 可用性 |
| 亞太地區 (大阪) | 可用性 |
| 亞太區域 (孟買) | 可用性 |
| 亞太區域 (海德拉巴) | 可用性 |
| 亞太區域 (新加坡) | 可用性 |
| 亞太區域 (悉尼) | 可用性 |
| 亞太區域 (雅加達) | 可用性 |
| 亞太區域 (墨爾本) | 可用性 |
| 亞太地區 (馬來西亞) | 可用性 |
| 亞太區域 (紐西蘭) | 無 |
| 亞太區域 (泰國) | 可用性 |
| 加拿大 (中部) | 可用性 |
| 加拿大西部 (卡加利) | 可用性 |
| 中國 (北京) | 可用性 |
| 中國 (寧夏) | 可用性 |
| 歐洲 (法蘭克福) | 可用性 |
| 歐洲 (蘇黎世) | 可用性 |
| 歐洲 (斯德哥爾摩) | 可用性 |
| 歐洲 (米蘭) | 可用性 |
| 歐洲 (西班牙) | 可用性 |
| 歐洲 (愛爾蘭) | 可用性 |
| 歐洲 (倫敦) | 可用性 |
| 歐洲 (巴黎) | 可用性 |
| 以色列 (特拉維夫) | 可用性 |
| 中東 (阿拉伯聯合大公國) | 可用性 |
| 中東 (巴林) | 可用性 |
| 墨西哥 (中部) | 可用性 |
| 南美洲 (聖保羅) | 可用性 |
| 美國東部 (維吉尼亞北部) | 可用性 |
| 美國東部 (俄亥俄) | 可用性 |
| 美國西部 (加利佛尼亞北部) | 可用性 |
| 美國西部 (奧勒岡) | 可用性 |
| AWS GovCloud (美國東部) | 可用性 |
| AWS GovCloud (美國西部) | 可用性 |