Amazon Redshift 將不再支援在 2026 年 6 月 30 日之後使用 Python UDFs。我們將開始分階段強制執行。如需 Python 生命週期結束和遷移選項的詳細資訊,請參閱 2025 年 6 月 30 日發佈的部落格文章
本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
系統資料表與 S3 資料表整合
使用系統資料表與 Amazon S3 Tables
當您透過主控台、Redshift CLI 或 SDK 啟用此功能時,Redshift 會立即開始從您選取的系統資料表,以固定頻率將新資料列寫入 S3 Tables。您可以選擇要發佈的系統資料表;S3 Tables 會強制執行您設定的保留期間。
這支援下列使用案例:
-
符合合規和稽核要求。保留查詢、連線和變更歷史記錄數月或數年。
-
從一處監控您的機群。整合來自您帳戶和區域中多個資料倉儲的監控資料,並分析整個機群的活動。
-
移除自訂擷取、轉換和載入 (ETL) 管道的需求。停止建置和維護將系統資料表資料匯出至 S3 的任務,以延長保留時間。
-
調查過去的事件。查詢超過 7 天叢集內時段的歷史資料,以進行根本原因分析、事件後檢閱,以及監控工作負載隨著時間的演變和效能趨勢。
此功能適用於支援 Redshift 和 S3RA3
運作方式
啟用此功能並選取一或多個支援的系統資料表後,Redshift 會將新完成的記錄從這些系統資料表寫入 S3 資料表。資料會以固定頻率分批交付。
系統資料表存在於 AWS 您的帳戶中,但服務受管: AWS 擁有並操作資料交付和資料表管理,包括下列項目:
-
在帳戶中建立 S3 資料表儲存貯體、命名空間和 S3 資料表。
-
定義和發展資料表結構描述。
-
將Apache Iceberg格式的資料寫入 S3 資料表。
-
壓縮資料和維護快照 (由 S3 Tables 自動處理)。
無需建置或維護基礎設施,也不會影響工作負載。
您可以設定透過 S3 Tables 記錄過期來保留資料的時間。如需詳細資訊,請參閱設定保留。
由於資料表是由 管理 AWS,因此您無法修改或刪除 Redshift 交付的資料列。交付的資料是不可變的。您只控制對資料表的讀取存取權。如需詳細資訊,請參閱資料控管。
只有完成的活動才會交付至 S3 Tables。資料倉儲中的系統資料表可以顯示進行中的活動,但只會複製已達到最終狀態的記錄。例如,已交付已完成、已中止或取消的查詢,但在達到最終狀態之前,仍會交付仍在執行中的查詢。
啟用與 S3 Tables 的系統資料表整合
若要啟用與 S3 Tables 的系統資料表整合,請使用具有新 日誌目的地類型的現有 Redshift APIss3table。啟用時,Redshift 會在您的帳戶aws-redshift中建立名為 的 S3 資料表儲存貯體。您可以使用與其他日誌目的地相同的操作來管理功能:適用於佈建叢集的 disable-logging、、 enable-logging和 describe-logging-status;適用於 Redshift Serverless 的 update-namespace和 get-namespace。
許可
啟用、修改或停用功能的委託人必須具有下列許可:
-
redshift:EnableLogging(適用於佈建叢集) 或redshift-serverless:UpdateNamespace(適用於 Redshift Serverless)。 -
建立和設定 S3 資料表儲存貯體的許可。啟用主體需要下列 S3 Tables 許可:
-
s3tables:CreateTableBucket -
s3tables:PutTableBucketEncryption -
s3tables:PutTableBucketPolicy
當您啟用此功能時,Redshift 會使用觸發操作的委託人身分來建立和設定 S3 資料表儲存貯體。
-
建立儲存貯體之後,Redshift 會使用 Redshift 和 S3 Tables 之間的服務信任關係,在其中建立命名空間和資料表。啟用主體不需要建立命名空間或資料表的許可。
部署選項
您可以透過兩種模式之一來設定交付。指定的資料倉儲一次使用一種模式。
| 部署選項 | 說明 |
|---|---|
| 每個倉儲 | Redshift 會將每個資料倉儲的系統資料表資料寫入自己的一組 S3 資料表。資料表中的每一列都來自單一資料倉儲。用於倉儲之間的實體隔離。 |
| 合併 | Redshift 會將相同帳戶和區域內多個資料倉儲的系統資料表資料寫入一組共用的 S3 資料表。來自不同倉儲的資料列會依 warehouse_namespace_arn和 warehouse_name資料欄區分。將此用於集中式、跨倉儲分析。 |
部署模型會決定如何在 S3 Tables 中組織資料。在每一倉儲模型中,S3 Tables 命名空間名稱包含資料倉儲的唯一識別符,因此每個倉儲的資料會實際分成自己的命名空間。在合併模型中,S3 Tables 命名空間名稱包含 AWS 帳戶號碼,該帳戶和區域中所有倉儲的資料會一起存放在相同的命名空間和資料表中。
單一 AWS 帳戶和單一 AWS 區域支援這兩個選項。若要跨區域或帳戶分析資料,請在查詢時合併每個區域或帳戶資料表的結果。對於跨帳戶存取,您可以使用 AWS Glue Data Catalog 共用。如需詳細資訊,請參閱《 AWS Glue 開發人員指南》中的授予跨帳戶存取權。
注意
如果您將資料倉儲從一個部署模式切換到另一個部署模式,則先前交付的資料會保留在其現有的資料表中,並根據其設定的保留來保留。Redshift 開始將新資料交付至新目標,而不會回填歷史資料。
使用主控台
設定與 S3 Tables 整合的系統資料表
-
開啟 Redshift 主控台,然後在導覽窗格中,在 Amazon Redshift 或 Amazon Redshift Serverless 下,選擇系統資料表整合。您也可以從叢集或命名空間詳細資訊頁面選擇整合索引標籤,或選擇動作、整合、設定系統資料表整合來設定 。
-
選擇建立系統資料表整合。
-
選取已佈建的叢集或 Redshift Serverless 工作群組。
-
選擇要發佈的系統資料表。選取個別
SYS_*檢視,或選擇選取所有支援的系統資料表,以發佈所有目前和未來的支援檢視。如果您選取全部,則未來新增的新檢視會自動包含在內,而不需要變更組態。 -
選取部署模型:
-
每個資料倉儲每個系統資料表的個別 S3 資料表,將此倉儲的資料保留在其自己的一組資料表中。
-
跨資料倉儲的每個系統資料表共用 S3 資料表,將帳戶中多個倉儲的資料合併到一組共用資料表。
-
-
或者,選擇加密金鑰。根據預設,資料會使用 Amazon S3-managed金鑰 (SSE-S3) 加密。若要使用您自己的 AWS KMS 金鑰,請在此處選取它。如果您使用自己的 AWS KMS 金鑰,金鑰政策必須授予 Redshift 和 S3 Tables 存取金鑰的權限。如需詳細資訊,請參閱設定加密。
-
儲存您的變更。Redshift 開始將選取的系統資料表發佈至 S3 Tables,並繼續定期新增記錄。
若要停止發佈系統資料表,請返回設定並將其移除。已發佈的資料會保留,直到您透過 S3 Tables 設定過期為止。
您可以從叢集或命名空間詳細資訊頁面檢閱整合的狀態。展開檢視 S3 資料表映射,以查看每個系統資料表與其對應 S3 資料表名稱和命名空間之間的映射。您也可以從 S3 Tables 主控台檢視發佈的資料。
使用 AWS CLI
下列參數會設定 S3 Tables 發佈:
| 參數 | 適用對象 | 說明 |
|---|---|---|
--log-destination-type |
兩者 | 設定為 s3table以發佈至 S3 Tables。其他值為 s3和 cloudwatch。 |
--log-exports |
佈建 | 要發佈的系統資料表,做為SYS_*檢視名稱清單,或 all。 |
--s3-table-names |
無伺服器 | 要發佈的系統資料表,做為SYS_*檢視名稱清單,或 all。 |
--s3-table-action |
無伺服器 | Enable 或 Disable S3 Tables 發佈。 |
--s3-table-granularity |
兩者 | 資料表範圍。佈建: cluster(預設) 或 account。無伺服器: namespace (預設) 或 account。 |
--s3-table-kms-key-id |
兩者 | 用於加密的選用 AWS KMS 金鑰 ARN 或 ID。預設為 Amazon S3-managed金鑰 (SSE-S3)。 |
佈建叢集
啟用交付。 --log-exports 接受all或以空格分隔的支援系統資料表清單,並接受 --s3-table-granularity cluster(每個倉儲) 或 account(合併)。
aws redshift enable-logging \ --cluster-identifier my-redshift-cluster \ --log-destination-type s3table \ --log-exports all \ --s3-table-granularity account
僅啟用特定系統資料表的交付:
aws redshift enable-logging \ --cluster-identifier my-redshift-cluster \ --log-destination-type s3table \ --log-exports sys_query_history sys_query_text sys_userlog \ --s3-table-granularity cluster
檢查交付狀態。
aws redshift describe-logging-status \ --cluster-identifier my-redshift-cluster
停用所有系統資料表的交付,或使用 的特定資料表的交付--log-exports:
aws redshift disable-logging \ --cluster-identifier my-redshift-cluster \ --log-destination-type s3table \ --log-exports sys_stream_scan_states
Redshift Serverless
在 Redshift Serverless 中,您可以使用 設定每個命名空間的功能update-namespace。系統資料表名稱會在 --s3-table-names(而非 --log-exports) 上傳遞。
啟用交付。
aws redshift-serverless update-namespace \ --namespace-name my-namespace \ --log-destination-type s3table \ --s3-table-action Enable \ --s3-table-names all \ --s3-table-granularity namespace
停用特定系統資料表 (或 all) 的交付:
aws redshift-serverless update-namespace \ --namespace-name my-namespace \ --log-destination-type s3table \ --s3-table-action Disable \ --s3-table-names sys_stream_scan_states
檢查交付狀態。
aws redshift-serverless get-namespace \ --namespace-name my-namespace
若要在捨棄 S3 資料表儲存貯體或資料表後繼續交付,請再次執行啟用命令。
向 註冊 AWS Glue Data Catalog
在使用 Redshift、Athena 或其他分析服務查詢保留的資料之前,服務受管 S3 資料表儲存貯體必須與 整合 AWS Glue Data Catalog。這是每個帳戶和區域的一次性步驟。如果您已將 S3 Tables 與 整合 AWS Glue Data Catalog,則不需要其他動作。
如需整合說明,請參閱《 AWS Glue 開發人員指南》中的將 Amazon S3 資料表與 整合 AWS Glue Data Catalog。
設定加密
根據預設,傳送到 S3 Tables 的資料會使用 Amazon S3-managed金鑰 (SSE-S3) 加密。若要改用 AWS KMS 客戶受管金鑰,請在啟用交付--s3-table-kms-key-id時以 指定其 ARN:
aws redshift enable-logging \ --cluster-identifier my-redshift-cluster \ --log-destination-type s3table \ --log-exports all \ --s3-table-granularity account \ --s3-table-kms-key-id arn:aws:kms:us-west-2:111122223333:key/key-id
如果您使用客戶受管金鑰,其金鑰政策必須允許 Redshift 系統資料表整合服務主體在寫入系統資料表時產生資料金鑰,以及 S3 Tables 維護服務主體在資料表維護期間 (例如壓縮) 使用金鑰。將下列陳述式新增至金鑰政策,以您自己的值取代 REGION、ACCOUNT 和 KEY_ID。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "EnableRedshiftSystemTableKeyUsage", "Effect": "Allow", "Principal": { "Service": "systemtables.redshift.amazonaws.com" }, "Action": [ "kms:DescribeKey", "kms:GenerateDataKey", "kms:Decrypt" ], "Resource": "arn:aws:kms:REGION:ACCOUNT:key/KEY_ID", "Condition": { "StringEquals": { "aws:SourceAccount": "ACCOUNT" } } }, { "Sid": "EnableS3TableMaintenanceKeyUsage", "Effect": "Allow", "Principal": { "Service": "maintenance.s3tables.amazonaws.com" }, "Action": [ "kms:GenerateDataKey", "kms:Decrypt" ], "Resource": "arn:aws:kms:REGION:ACCOUNT:key/KEY_ID", "Condition": { "StringLike": { "kms:EncryptionContext:aws:s3:arn": "arn:aws:s3tables:REGION:ACCOUNT:bucket/aws-redshift/*" } } } ] }
如果金鑰政策未授予這些許可,則 Redshift 無法寫入加密的 S3 資料表,且交付失敗。
支援的系統資料表
您可以選擇下列任何SYS_*監控檢視來與 S3 Tables 整合。如需每個檢視中資料欄的說明,請選擇檢視名稱。
-
SYS_DATASHARE_WRITE_HISTORY
注意
下列檢視需要修補程式 P203 或更新版本:SYS_CHILD_QUERY_TEXT、SYS_COPY_REPLACEMENTS、SYS_EXTERNAL_QUERY_ERROR、SYS_PROCEDURE_MESSAGES、SYS_QUERY_DETAIL、SYS_QUERY_EXPLAIN、SYS_SPATIAL_SIMPLIFY 和 SYS_UNLOAD_DETAIL。如果您在執行 P203 之前修補程式的資料倉儲上啟用這些檢視,則會使用正確的結構描述建立資料表,但在資料倉儲更新為 P203 或更新版本之前不會包含任何資料。
新增至每個資料表的中繼資料欄
每個 S3 資料表都包含來源SYS_*檢視中的所有資料欄,以及 Redshift 新增的下列五個中繼資料資料欄,用於識別每一列的來源及其交付時間。
| 資料行 | Type | Description |
|---|---|---|
warehouse_account_id |
string | 擁有來源資料倉儲 AWS 的帳戶。 |
warehouse_region_name |
string | 來源資料倉儲執行所在的 AWS 區域。 |
warehouse_namespace_arn |
string | 來源資料倉儲命名空間的 ARN。這是穩定的唯一識別符,在重新命名和重新建立之間是不可變的。 |
warehouse_name |
string | 來源資料倉儲的人類可讀取名稱 (叢集名稱或工作群組名稱)。 |
s3_tables_ingestion_time |
timestamp(6),UTC | Redshift 將資料列遞交至 S3 Tables 的時間。這是交付時間,而不是基礎事件發生的時間。 |
設定保留
Redshift 不會為其交付至 S3 Tables 的資料定義保留政策。您可以設定透過 S3 Tables 設定記錄過期政策來保留資料的時間。您可以指定天數 (例如 5 天、100 天或 365 天),而 S3 Tables 會自動移除超過設定持續時間的資料。
如果您未設定過期政策,資料會無限期保留。
當您停用整合或移除系統資料表時,Redshift 會停止寫入新資料,但先前交付的資料會保留在 S3 Tables 中,並繼續遵守您設定的任何過期政策。
如需詳細資訊,請參閱《Amazon S3 使用者指南》中的設定 S3 資料表儲存貯體的記錄過期。 Amazon S3
資料控管
您可以管理對保留系統資料表資料的存取;Redshift 不會代表您套用讀取許可,也不會遮罩資料。
-
存取控制。將 S3 資料表儲存貯體與 整合後 AWS Glue Data Catalog,您可以使用 AWS Identity and Access Management
(IAM) 或 來管理讀取存取AWS Lake Formation 。在合併部署中,您可以限制每個倉儲的讀取存取。 -
目錄編製和探索。 AWS Glue Data Catalog 整合提供集中位置來探索保留的資料表,並套用精細的許可 (例如,使用 Lake Formation 進行資料表層級、資料欄層級或資料列層級的存取)。
交付和生命週期行為
-
交付頻率。資料會以固定頻率分批交付。
-
完全交付一次。每個記錄都會傳送一次;重新啟用或重新新增系統資料表不會建立重複項目。
-
啟用、停用、重新啟用。當功能 (或特定系統資料表) 停用時,該期間不會擷取任何資料。停用 會停止寫入,但不會移除 S3 資料表或先前交付的資料。重新啟用會繼續交付,而不會填補差距。
-
從您的選擇中移除系統資料表。Redshift 會停止交付該系統資料表的新資料。先前交付的資料會保留在 S3 Tables 中,並受限於您設定的任何記錄過期政策。重新新增系統資料表會繼續交付,而不會複製資料。
-
使用傳輸中的資料刪除資料倉儲。如果您在交付過程中刪除資料倉儲,且資料倉儲的加密金鑰與用於 S3 Tables 的金鑰不同,則 Redshift 可能會在刪除後在資料倉儲的金鑰上使用短暫的 AWS KMS 授予,以完成任何剩餘資料的交付。
檢查交付狀態
您可以隨時檢閱目前的組態和每個系統資料表的最新交付時間:
-
佈建的叢集。
describe-logging-status(或describe-cluster) 會傳回作用中的系統資料表、S3 資料表命名空間、精細程度,以及每個系統資料表的上次擷取時間。 -
Redshift Serverless。 會在命名空間的 S3 資料表發佈狀態中
get-namespace傳回相同的資訊。
Redshift Serverless
交付不會讓工作群組保持喚醒或耗用您的運算。在工作群組暫停之前,Redshift 會確保交付任何待定批次。
最佳實務
-
評估您的資料敏感度。了解資料倉儲中存放哪些類型的資料,以及系統資料表是否包含敏感資訊。有些系統資料表 (例如 SYS_QUERY_TEXT 和 SYS_PROCEDURE_MESSAGES) 可以從查詢和預存程序擷取常值。
-
選擇部署模型。如果您的資料倉儲存放敏感資訊,請考慮使用每個倉儲的部署模型,讓每個資料倉儲的系統資料表資料保持實體隔離。如果您的資料不敏感,而且您想要執行跨倉儲查詢,而不合併多個資料表的結果,請使用合併部署模型。
-
選取您需要的系統資料表。檢閱支援的系統資料表清單,並選擇符合您合規、稽核或可觀測性需求的資料表。您不需要啟用所有系統資料表。
-
在啟用功能之前設定加密。如果您想要使用客戶受管 AWS KMS 金鑰,請在第一次啟用此功能時指定它。您無法在建立 S3 Tables 之後變更金鑰。若要變更金鑰,請停用此功能、使用 S3 Tables API 捨棄 S3 Tables (這會永久刪除保留的資料),然後使用新金鑰重新啟用此功能。
-
根據業務需求設定保留。根據您的合規、稽核或操作需求,在資料表層級直接在 S3 資料表中設定記錄過期政策。不同的資料表可以有不同的保留期間。如果您未設定過期政策,資料會無限期保留。若要監控系統資料表的儲存用量,請參閱《Amazon S3 使用者指南》中的 Amazon S3 Tables CloudWatch 指標。 Amazon S3
帳單
將系統資料表資料寫入 S3 Tables 是免費的。您需要支付保留資料的標準 S3 Tables 儲存和維護費用,以及根據該引擎的定價,用於讀取資料的查詢引擎的費用。如需詳細資訊,請參閱 Amazon S3 Tables 定價
考量和限制
-
在單一 AWS 帳戶和單一 AWS 區域中支援。若要分析跨帳戶或區域的資料,請在查詢時合併結果。
-
資料倉儲一次使用一個部署模式 (每個倉儲或合併)。
-
切換部署模式、停用和重新啟用,或移除和重新新增系統資料表不會回填歷史資料。
-
交付的資料是不可變的。您無法透過 Redshift 修改或刪除個別資料列。
-
您可以捨棄此功能建立的 S3 資料表,但這樣做會永久移除這些資料表中的所有保留資料並停止交付。Redshift 不會自動重新建立捨棄的資料表。若要繼續交付,您必須重新啟用此功能,該功能會建立新的資料表,並開始交付未來的新資料。先前交付的資料不會還原。如需詳細資訊,請參閱《Amazon S3 使用者指南》中的刪除 S3 資料表。 Amazon S3
-
交付是以批次為基礎 (以固定頻率寫入資料)。
-
從 Redshift 查詢需要 S3 資料表儲存貯體與 整合 AWS Glue Data Catalog。