流式攝入(預覽) - Amazon Redshift

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

流式攝入(預覽)

以下是 Amazon Redshift 流媒體攝入的公共預覽版文檔,該文檔使用 Kinesis 數據流中的數據。預覽功能是在 Redshift 中構建和測試的,但所有用例的測試覆蓋範圍可能不完整。在公開發佈之前,本文件和功能會隨時變更。我們建議僅搭配測試集羣使用此功能,不要在生產環境中使用。有關預覽條款和條件,請參閲Beta 版服務參與AWS服務條款

以前,將數據從諸如 Amazon Kinesis 流式流服務加載到 Amazon Redshift 中包括幾個步驟。其中包括將數據流連接到 Amazon Kinesis Data Firehose,並等待 Kinesis 數據 Firehose 將數據存儲到 Amazon S3 中,使用不同大小的批處理以變化長度的緩衝區間隔。之後,Kinesis Data Firehose 觸發了一個 COPY 命令,將數據從 Amazon S3 加載到 Redshift 中的表。

而不是在 Amazon S3 中包含初步暫存,而是流式傳輸提取提供了低延遲、高速的從Kinesis Data Streams添加到亞 Amazon Redshift 實例化視圖中。因此,它可以提高速度並降低存儲成本。您可以將 Redshift 羣集配置為啟用流式傳輸和使用 SQL 語句創建實例化視圖,如在 Amazon Redshift 中建立具體化檢視。之後,使用實例化視圖刷新,您可以每秒從 Amazon Kinesis 數據流中接收數百兆字節的數據到 Amazon Redshift 中。這樣可以快速訪問快速刷新的外部數據。

資料流程

Amazon Redshift 是流消費者。Amazon Redshift 實例化視圖是從流讀取的數據的着陸區域,該數據到達時會進行處理。例如,可以使用熟悉的 SQL 使用 JSON 值並將其映射到 Redshift 數據列。刷新實例化視圖時,Redshift 計算節點將每個數據分片分配給計算片。每個切片都會使用分片中的數據,直到視圖達到與流的奇偶校驗。以同樣的方式,後續實例化視圖刷新從上一個SEQUENCE_NUMBER,直到它達到與流數據的奇偶校驗。

流式攝入使用案例

Amazon Redshift 流媒體引入的使用案例主要圍繞着處理持續生成(流式處理)且需要在數據生成的短時間(延遲)內處理的數據。這就是所謂的near-real-time分析。數據源可能因物聯網設備、系統遙測或繁忙網站的點擊流數據而異。

串流入門

設置 Amazon Redshift 流傳輸需要創建映射到流數據源的外部架構,並創建引用外部架構的實例化視圖。Amazon Redshift 串流式傳輸支援 Kinesis Data Streams 做為來源。因此,在配置流攝入之前,您需要有一個可用的 Kinesis 數據流源。如果您沒有來源,請遵循 Kinesis 文件中的指示操作,網址為Amazon Kinesis Data Streams 入門或者在控制台上使用建立串流AWS管理主控台

Amazon Redshift 流式傳輸使用實例化視圖,該視圖會在REFRESH正在運行。實例化視圖映射到流數據源。作為實體化視圖定義的一部分,您可以對流數據執行過濾和聚合。您的流攝入實例化視圖(基礎實例化視圖)只能引用一個流,但可以創建與基本實例化視圖以及其他實例化視圖或表連接的其他實例化視圖。

假設您有一個可用的 Kinesis Data Streams,第一步是在 Amazon Redshift 中使用CREATE EXTERNAL SCHEMA並引用 Kinesis Data Streams。之後,要訪問流中的數據,請定義STREAM在具體化檢視中。您可以將流記錄存儲在半結構化SUPER格式,或定義導致數據轉換為 Redshift 數據類型的架構。查詢實例化視圖時,返回的記錄是point-in-time視圖的流。

  1. 建立包含信任政策的 IAM 角色,允許您的 Amazon Redshift 集擔任角色之信任政策。如需如何為 IAM 角色設定信任政策的資訊,請參授權 Amazon Redshift 訪問其他AWS代表您提供的服務。創建後,角色應具有以下 IAM 策略,該策略提供與 Amazon Kinesis 數據流通信的權限。

    { "Version": "2012-10-17", "Statement": [ { "Sid": "ReadStream", "Effect": "Allow", "Action": [ "kinesis:DescribeStreamSummary", "kinesis:GetShardIterator", "kinesis:GetRecords", "kinesis:DescribeStream" ], "Resource": "arn:aws:kinesis:*:0123456789:stream/*" }, { "Sid": "ListStream", "Effect": "Allow", "Action": [ "kinesis:ListStreams", "kinesis:ListShards" ], "Resource": "*" } ] }
  2. 在 Amazon Redshift 中,建立外部結構描述。

    CREATE EXTERNAL SCHEMA schema_one FROM KINESIS IAM_ROLE { default | 'iam-role-arn' };
  3. 創建實例化視圖以使用流數據。以下示例定義了具有 JSON 源數據的實例化視圖。請注意,以下視圖驗證數據是有效的 JSON 源和 utf8。Kinesis 流名稱區分大小寫,可以包含大寫和小寫字母。要使用區分大小寫的標識符,請將enable_case_sensitive_identifiertrue在會話級別或羣集級別。如需詳細資訊,請參閱「」名稱與識別符啟用案例敏感標識符

    CREATE MATERIALIZED VIEW my_view AS SELECT ApproximateArrivalTimestamp, JSON_PARSE(from_varbyte(Data, 'utf-8')) as Data FROM schema_one.my_stream_name WHERE is_utf8(Data) AND is_valid_json(from_varbyte(Data, 'utf-8'));
  4. 刷新視圖,該視圖將觸發 Amazon Redshift 以從流中讀取數據並將數據加載到實例化視圖中。

    REFRESH MATERIALIZED VIEW my_view;
  5. 查詢具體化檢視中的資料。

    select * from my_view;

限制

  • 刷新當前是手動的,但可以使用查詢調度程序自動執行。請參閱在 Amazon Redshift 控制台上安排查詢

  • 在流上創建的實例化視圖當前不支持聯接。在流上創建實例化視圖後,可以創建另一個實例化視圖,該視圖可用於將流實例化視圖連接到其他實例化視圖、表或視圖。

  • 實例化視圖刷新必須在一小時內完成流中的數據消耗。如果刷新超過一小時,刷新將由於憑據過期而失敗。

  • Redshift 流攝入不支持解析由 Kinesis 生產者庫(KPL 關鍵概念-聚合。聚合記錄被攝入,但存儲為二進制協議緩衝區數據。(請參協議緩衝區以了解詳細資訊。根據將數據推送到 Kinesis 的方式,您可能需要禁用此功能。例如,如果您使用的是 Kinesis Data Analytics,則可以通過添加'sink.producer.aggregation-enabled' = 'false'創建您的 Kinesis 水槽表時。如需詳細資訊,請參閱「」Amazon Kinesis Data Streams

  • 創建實例化視圖後的初始刷新從TRIM_HORIZON的流。

  • 實例化視圖必須是可增量維護的。無法完全重新計算,因為在默認情況下,Kinesis 不會保留 24 小時以上的流歷史記錄。您可以在 Kinesis 中設置更長的數據保留期,但這可能導致更多的技術維護和成本。如需詳細資訊,請參閱「」刷新具體化檢視

  • 暫停羣集時,在恢復羣集之前,實體化視圖上的刷新才可用。在暫停期間從流過期的記錄不可用。

  • 支持的數據格式僅限於可從VARBYTE。如需詳細資訊,請參閱 變量字節類型

  • VARBYTE當前不支持任何解壓縮方法,因此無法在 Amazon Redshift 內查詢包含壓縮數據的 Kinesis 記錄。相反,您應該在將數據推入流之前對其進行解壓縮。

  • 對於公共預覽版,Amazon Redshift 可以攝取的 Kinesis 記錄的最大大小為 64K。最大大小將在功能正式上市時提高。