本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
開始使用 Amazon Kinesis Data Streams 中的串流擷取
本主題說明如何使用具體化檢視從 Kinesis Data Streams 取用串流資料。
設定 Amazon Redshift 串流擷取涉及建立對應至串流資料來源的外部結構描述,以及建立參照外部結構描述的具體化視觀表。Amazon Redshift 串流擷取支援以 Kinesis Data Streams 作為來源。因此,在設定串流擷取之前,您必須擁有可用的 Kinesis Data Streams 來源。如果您沒有來源,請按照 Amazon Kinesis Data Streams 入門中的 Kinesis 文件指示進行操作,或使用透過 AWS 管理主控台建立串流中的指示,在主控台上建立一個來源。
Amazon Redshift 串流擷取會使用具體化視觀表,執行 REFRESH
時會直接從串流更新該具體化視觀表。具體化視觀表會對應至串流資料來源。您可以對串流資料執行篩選和彙總,以做為具體化視觀表定義的一部分。您的串流擷取具體化視觀表 (基礎具體化視觀表) 只能參照一個串流,但是您可以建立與基礎具體化視觀表及其他具體化視觀表或資料表結合的額外具體化視觀表。
注意
串流擷取和 Amazon Redshift Serverless - 本主題中的組態步驟同時適用於佈建的 Amazon Redshift 叢集和 Amazon Redshift Serverless。如需詳細資訊,請參閱串流擷取行為和資料類型。
假設您有可用的 Kinesis Data Streams 串流,第一步是使用 CREATE EXTERNAL SCHEMA
在 Amazon Redshift 中定義結構描述,並參照 Kinesis Data Streams 資源。之後,若要存取串流中的資料,請在具體化視觀表中定義 STREAM
。您可以使用半結構化 SUPER
格式儲存串流記錄,或定義結構描述,將資料轉換為 Redshift 資料類型。當您查詢具體化視觀表時,傳回的記錄會是串流的時間點檢視。
-
使用信任政策來建立 IAM 角色,允許 Amazon Redshift 叢集或 Amazon Redshift Serverless 工作群組擔任該角色。如需如何設定 IAM 角色信任政策的詳細資訊,請參閱授權 Amazon Redshift 代表您存取其他 AWS 服務。建立角色之後,該角色應具有下列 IAM 政策,該政策提供與 Amazon Kinesis 資料串流通訊的許可。
Kinesis 資料串流中未加密串流的 IAM 政策
{ "Version": "2012-10-17", "Statement": [ { "Sid": "ReadStream", "Effect": "Allow", "Action": [ "kinesis:DescribeStreamSummary", "kinesis:GetShardIterator", "kinesis:GetRecords", "kinesis:ListShards", "kinesis:DescribeStream" ], "Resource": "arn:aws:kinesis:*:0123456789:stream/*" }, { "Sid": "ListStream", "Effect": "Allow", "Action": "kinesis:ListStreams", "Resource": "*" } ] }
Kinesis 資料串流中加密串流的 IAM 政策
{ "Version": "2012-10-17", "Statement": [{ "Sid": "ReadStream", "Effect": "Allow", "Action": [ "kinesis:DescribeStreamSummary", "kinesis:GetShardIterator", "kinesis:GetRecords", "kinesis:ListShards", "kinesis:DescribeStream" ], "Resource": "arn:aws:kinesis:*:0123456789:stream/*" }, { "Sid": "DecryptStream", "Effect": "Allow", "Action": [ "kms:Decrypt" ], "Resource": "arn:aws:kms:us-east-1:0123456789:key/1234abcd-12ab-34cd-56ef-1234567890ab" }, { "Sid": "ListStream", "Effect": "Allow", "Action": "kinesis:ListStreams", "Resource": "*" } ] }
檢查您的 VPC,並確認您的 Amazon Redshift 叢集或 Amazon Redshift Serverless 具有使用 NAT 閘道或網際網路閘道透過網際網路連線到 Kinesis Data Streams 端點的路徑。如果您希望 Redshift 和 Kinesis Data Streams 之間的流量保留在 AWS 網路中,請考慮使用 Kinesis Interface VPC Endpoint。如需詳細資訊,請參閱 使用 Amazon Kinesis Data Streams 搭配介面 VPC 端點。
在 Amazon Redshift 中,建立外部結構描述以將 Kinesis 中的資料對應至結構描述。
CREATE EXTERNAL SCHEMA kds FROM KINESIS IAM_ROLE { default | 'iam-role-arn' };
Kinesis Data Streams 的串流擷取不需要驗證類型。它會使用
CREATE EXTERNAL SCHEMA
陳述式中定義的 IAM 角色來提出 Kinesis Data Streams 要求。選用:使用 REGION 關鍵字指定 Amazon Kinesis Data Streams 或 Amazon MSK 串流所在的區域。
CREATE EXTERNAL SCHEMA kds FROM KINESIS REGION 'us-west-2' IAM_ROLE { default | 'iam-role-arn' };
在此範例中,該區域會指定來源串流的位置。IAM_ROLE 是一個範例。
-
建立具體化視觀表以取用串流資料。使用如下的陳述式,如果無法剖析記錄,則會導致錯誤。如果您不希望略過錯誤記錄,請使用這類命令。
CREATE MATERIALIZED VIEW my_view AUTO REFRESH YES AS SELECT * FROM kds.my_stream_name;
Kinesis 串流名稱會區分大小寫,且可同時包含大寫和小寫字母。若要從具有大寫名稱的串流擷取,您可以在
enable_case_sensitive_identifier
true
資料庫層級將組態設定為 。如需詳細資訊,請參閱名稱和識別碼與 enable_case_sensitive_identifier。若要開啟自動重新整理,請使用
AUTO REFRESH YES
。預設行為是手動重新整理。請注意,當您使用 CAN_JSON_PARSE 時,可能會略過無法剖析的記錄。中繼資料資料欄包括下列項目:
中繼資料資料欄 資料類型 描述 approximate_arrival_timestamp 沒有時區的時間戳記 將記錄插入 Kinesis 串流的大約時間 partition_key varchar(256) Kinesis 用來將記錄指派給碎片的索引鍵 shard_id char(20) 從中擷取記錄的串流內的碎片唯一識別碼 sequence_number varchar(128) Kinesis 碎片中記錄的唯一識別碼 refresh_time 沒有時區的時間戳記 重新整理的開始時間 kinesis_data varbyte Kinesis 串流的記錄 請務必注意具體化視觀表定義中是否有商業邏輯,在某些情況下,商業邏輯錯誤可能會導致串流擷取遭到封鎖。這可能會導致您必須捨棄並重新建立具體化視觀表。為了避免這種情況,我們建議您盡可能簡化邏輯,並在擷取資料後對資料執行大部分的商業邏輯檢查。
重新整理檢視,這會調用 Redshift 從串流讀取,並將資料載入具體化視觀表。
REFRESH MATERIALIZED VIEW my_view;
查詢具體化視觀表中的資料。
select * from my_view;