Amazon Redshift 自 2025 年 11 月 1 日起不再支援建立新的 Python UDF。如果您想要使用 Python UDF,請在該日期之前建立 UDF。現有 Python UDF 將繼續正常運作。如需詳細資訊,請參閱部落格文章
本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
將擷取串流至具體化視觀表
本主題說明如何使用具體化視觀表快速存取串流資料。
串流擷取可提供以低延遲、高速的方式,從 Amazon Kinesis Data Streams
資料如何從串流服務傳輸到 Redshift
這點有助於了解串流擷取的運作方式,以及程序中所使用的資料庫物件。資料直接從資料串流提供者傳輸至 Amazon Redshift 佈建叢集或 Amazon Redshift Serverless 工作群組。沒有臨時放置區域,例如 Amazon S3 儲存貯體。佈建叢集或工作群組是串流取用者。在 Redshift 資料庫中,從串流讀取的資料會放置在具體化視觀表中。資料一抵達就會加以處理。例如,您可以使用 SQL 取用 JSON 值,並對應至具體化視觀表的資料欄。具體化視觀表重新整理時,Redshift 會取用所配置 Kinesis 資料碎片或 Kafka 分割區中的資料,直到視觀表與串流處於最新狀態為止。
Amazon Redshift 串流擷取的使用案例包含從其來源持續產生且必須在短時間 (或延遲) 內處理的資料。這通常稱為近乎即時分析。來源可能包括 IT 裝置、系統遙測裝置,或來自忙碌網站或應用程式的點擊流資料。
為改善效能的資料剖析最佳實務
當您設定串流擷取時,有幾個選項可供您剖析傳入資料。實務包括在資料抵達時執行商業邏輯或格式化。我們建議採用下列最佳實務,以避免錯誤或資料遺失。這些衍生自內部測試,可協助客戶進行組態故障診斷和剖析問題。
從串流資料擷取值 - 如果您在具體化視觀表定義中使用 JSON_EXTRACT_PATH_TEXT 函式來剖析或銷毀串流的 JSON,則可能會大幅影響效能和延遲。為了解釋,針對使用 JSON_EXTRACT_PATH_TEXT 擷取的每一欄,重新剖析傳入的 JSON。在此之後就會進行資料類型轉換、篩選和商業邏輯計算。這表示,假如您從 JSON 資料擷取 10 個欄,則每項 JSON 記錄會剖析 10 次,其中包括額外的邏輯。這會導致擷取延遲提高。我們建議的替代方法是使用 JSON_PARSE 函式,將 JSON 記錄轉換為 Redshift 的 SUPER 資料類型。串流資料放置在具體化視觀表後,使用 PartiQL 從 JSON 資料的 SUPER 表示法擷取個別字串。如需詳細資訊,請參閱查詢半結構化資料。
此外請注意,JSON_EXTRACT_PATH_TEXT 的資料大小上限為 64KB。因此,如果有任何 JSON 記錄大於 64KB,則使用 JSON_EXTRACT_PATH_TEXT 處理該記錄會產生錯誤。
將Amazon Kinesis Data Streams串流或 Amazon MSK 主題映射至多個具體化視觀表 – 我們不建議建立多個具體化視觀表,以從單一串流或主題擷取資料。這是因為每個具體化視觀表都會為 Kinesis Data Streams 串流中的每個碎片或 Kafka 主題中的分割區建立取用者。這可能會導致限流或超過串流或主題的輸送量。此外也可能導致成本提高,因為您多次擷取相同的資料。當您設定串流擷取時,建議您為每個串流或主題建立一個具體化視觀表。
如果您的使用案例需要您從某一個 KDS 串流或 MSK 主題將資料擷取至多個具體化視觀表,請在執行此操作之前,參考 AWS 巨量資料部落格
,特別是使用 Amazon Redshift 串流擷取搭配 Amazon MSK 實作近乎即時分析的最佳實務 。
串流擷取行為和資料類型
下表說明各種資料類型的技術行為詳細資訊和大小限制。我們建議您先熟悉這些內容,再設定具體化視觀表進行串流擷取。
| 功能或行為 | Description |
|---|---|
| Kafka 主題長度限制 | Kafka 主題的名稱不得超過 128 個字元 *不包括引號)。如需詳細資訊,請參閱名稱和識別碼。 |
| 具體化視觀表的累加式重新整理和 JOIN | 具體化視觀表必須是可以增量維護的。Kinesis 或 Amazon MSK 無法完整重新計算,因為預設情況下不會保留過去 24 小時或 7 天的串流或主題歷史記錄。您可以在 Kinesis 或 Amazon MSK 中設定較長的資料保留期間。但是,這可能會導致更多的維護和成本。此外,在 Kinesis 串流或 Amazon MSK 主題上建立的具體化視觀表目前不支援 JOIN。在串流或主題上建立具體化視觀表之後,您可以建立另一個具體化視觀表,將串流具體化視觀表結合至其他具體化視觀表、資料表或檢視。 如需詳細資訊,請參閱 REFRESH MATERIALIZED VIEW。 |
| 記錄剖析 | Amazon Redshift 串流擷取不支援剖析由 inesis Producer Library 彙總的記錄 (KPL 關鍵概念 - 彙總)。彙總記錄會被擷取,但會儲存為二進制協定緩衝區資料。(如需詳細資訊,請參閱 協定緩衝區 |
| Kafka 標頭中重複的值 | 來自 Amazon MSK、Confluent 或 Apache Kafka 的 Kafka 主題的 Amazon Redshift 串流取用者用戶端不支援 Kafka 主題標頭中有重複的值。 |
| 解壓縮 |
|
| 記錄大小上限 | Amazon Redshift 可從串流服務擷取的任何記錄大小上限為 16,777,216 位元組 (16 MiB),這是 Amazon Redshift 中 VARBYTE 資料類型支援的大小上限。不過,Kinesis 僅支援 1,048,576 位元組 (1 MiB) 的記錄大小上限。Amazon MSK 支援 16,777,216 位元組 (16 MiB) 的記錄大小上限。因此,根據預設,在 Kinesis 資料串流上建立的 Amazon Redshift 串流具體化視觀表會將 VARBYTE 資料類型欄的大小設定為 1,048,576 位元組 (1 MiB),而在 Amazon MSK 主題上建立的 Amazon Redshift 串流具體化視觀表會將 VARBYTE 資料欄的大小設定為 16,777,216 位元組 (16 MiB)。 如需 Kinesis 大小限制的詳細資訊,請參閱《Amazon Kinesis Data Streams 開發人員指南》中的配額和限制。 |
| 錯誤記錄 | 在每個記錄因為資料大小超過上限而無法擷取至 Redshift 的情況下,就會略過該記錄。在這種情況下,具體化視觀表重新整理仍然會成功,並且每個錯誤記錄的區段都會寫入 SYS_STREAM_SCAN_ERRORS 系統表。但不會略過商務邏輯所產生的錯誤,例如計算中的錯誤或類型轉換所產生的錯誤。在將邏輯新增至具體化視觀表定義之前,務必先詳細測試邏輯。 |
| Amazon MSK 多重 VPC 私有連線 | Redshift 串流擷取目前不支援 Amazon MSK 多重 VPC 私有連線。您可以改用 VPC 對等來連線 VPC,或改用 AWS Transit Gateway 透過中央中樞連線 VPC 和內部部署網路。上述兩種方法都可以讓 Redshift 與 Amazon MSK 叢集或另一個 VPC 中的 Amazon MSK Serverless 進行通訊。 |
| 自動重新整理使用狀況和啟動 | 具體化視觀表或檢視的自動重新整理查詢會視為任何其他使用者工作負載。自動重新整理會在資料到達時從串流載入資料。 您可以針對為串流擷取建立的具體化視觀表明確開啟自動重新整理。若要這樣做,請在具體化視觀表定義中指定 |
| 串流擷取和 Amazon Redshift Serverless | 適用於佈建叢集上 Amazon Redshift 串流擷取的相同設定和組態指示也適用於 Amazon Redshift Serverless 上的串流擷取。務必指定必要的 RPU 層級,以支援具有自動重新整理和其他工作負載的串流擷取。如需詳細資訊,請參閱 Amazon Redshift Serverless 的計費。 |
| Amazon Redshift 節點位於與 Amazon MSK 叢集不同的可用區域中 | 當您設定串流擷取時,如果 Amazon MSK 啟用了機架意識,Amazon Redshift 會嘗試連線到同一可用區域中的 Amazon MSK 叢集。如果所有節點都與 Amazon Redshift 叢集位於不同的可用區域,則可能會產生跨可用區域的資料傳輸費用。為避免這種情況發生,請至少將一個 Amazon MSK 代理程式叢集節點保留在與 Redshift 佈建叢集或工作群組相同的可用區域中。 |
| 重新整理開始位置 | 建立具體化視觀表之後,其初始重新整理會從 Kinesis 串流的 |
| 資料格式 | 支援的資料格式僅限於可以從 |
| 將記錄附加至資料表 | 您可以執行
|
| 執行 TRUNCATE 或 DELETE | 您可以使用下列幾種方法,從用於串流擷取的具體化視觀表中移除記錄:
|
| 非小寫識別碼 | 在 Amazon Managed Streaming for Apache Kafka 主題或包含非小寫識別碼的 Kinesis Data Streams 上建立串流具體化視觀表時,自動重新整理可能會失敗。若要解決此問題,請執行下列動作之一:
注意在使用者層級設定 如需區分大小寫的識別碼的詳細資訊,請參閱 enable_case_sensitive_identifier。 |
| 冪等性 |
Amazon Redshift 保證從串流來源擷取資料時,每項記錄只會處理一次。此保證適用於兩種來源類型:Amazon Kinesis (使用串流、碎片和序號識別碼) 和 Apache Kafka (使用主題、分割區和偏移識別碼),包括 Amazon Managed Streaming for Apache Kafka (Amazon MSK) 和 Confluent Cloud。 |