流式摄取到实体化视图
本主题介绍如何使用实体化视图来快速访问流数据。
流式摄取以低延迟、高速度的方式,将数据从 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 的最大数据大小为 64 KB。因此,如果任何 JSON 记录大于 64KB,那么使用 JSON_EXTRACT_PATH_TEXT 处理记录会导致错误。
将 Amazon Kinesis Data Streams 流或 Amazon MSK 主题映射到多个实体化视图 – 我们建议不要创建多个实体化视图来从单个流或主题摄取数据。这是因为,对于 Kinesis Data Streams 流中的每个分片或 Kafka 主题中的每个分区,每个实体化视图都会创建一个使用者。这会导致节流,或者超出流或主题的吞吐量。这还可能导致成本增加,因为您会多次摄取相同的数据。当您配置流式摄取时,我们建议您为每个流或主题创建一个实体化视图。
如果您的应用场景要求您将一个 KDS 流或 MSK 主题中的数据摄取到多个实体化视图中,在执行操作之前,请先参考 Amazon 大数据博客
,尤其是 Best practices to implement near-real-time analytics using Amazon Redshift Streaming Ingestion with Amazon MSK 。
流式摄取行为和数据类型
下表描述了技术行为详细信息和各种数据类型的大小限制。我们建议在为流式摄取配置实体化视图之前,先熟悉这些内容。
特征或操作 | 描述 |
---|---|
Kafka 主题长度限制 | 不能使用名称超过 128 个字符(不包括引号)的 Kafka 主题。有关更多信息,请参阅名称和标识符。 |
实体化视图的增量刷新和联接 | 实体化视图必须以递增方式维护。Kinesis 或 Amazon MSK 无法完全重新计算,因为在默认情况下,它们不会保留过去 24 小时或 7 天的流式或主题历史记录。您可以在 Kinesis 或 Amazon MSK 中设置更长的数据留存期。但是,这会导致需要更多的维护和成本。此外,在 Kinesis 流或 Amazon MSK 主题上创建的实体化视图目前不支持联接。创建流式或主题的实体化视图后,您可以创建另一个实体化视图,以用于将流式实体化视图联接到其他实体化视图、表或视图。 有关更多信息,请参阅 REFRESH MATERIALIZED VIEW。 |
记录解析 | Amazon Redshift 流式摄取不支持解析 Kinesis Producer Library 聚合的记录(KPL 关键概念 - 聚合)。聚合的记录摄取后将存储为二进制协议缓冲区数据。(有关更多信息,请参阅协议缓冲 |
解压缩 |
|
最大记录大小 | Amazon Redshift 可以从 Kinesis 或 Amazon MSK 中摄取的任何记录的最大大小为 16777216 字节(16 MiB),这是 Amazon Redshift 中 VARBYTE 数据类型支持的最大大小。默认情况下,在 Kinesis 数据流或 Amazon MSK 主题上创建的 Amazon Redshift 流式实体化视图会将数据列的大小分别设置为 1048576 字节(1 MiB)和 16777216 字节(16 MiB)。 注意1 MiB 是当前可放入 Kinesis 数据流的任何记录的最大大小。有关 Kinesis 大小限制的更多信息,请参阅《Amazon Kinesis Data Streams 开发人员指南》中的配额和限制。 |
错误记录 | 在每种情况下,如果由于数据的大小超过最大值而无法将记录摄取到 Redshift,则会跳过该记录。在这种情况下,实体化视图刷新仍然会成功,并且每条错误记录的一段会写入到 SYS_STREAM_SCAN_ERRORS 系统表中。系统不会跳过由业务逻辑导致的错误,例如计算错误或类型转换产生的错误。在向实体化视图定义添加逻辑之前,请仔细测试逻辑。 |
Amazon MSK 多 VPC 私有连接 | Redshift 流式摄取目前不支持 Amazon MSK 多 VPC 私有连接。另外,您也可以使用 VPC 对等连接来连接 VPC,或使用 Amazon Transit Gateway 通过中央枢纽连接 VPC 和本地网络。上述任一方法都可以让 Redshift 与 Amazon MSK 集群或与另一个 VPC 中的 Amazon MSK Serverless 进行通信。 |
自动刷新使用和激活 | 实体化视图的自动刷新查询被视为任何其它用户工作负载。自动刷新会在数据流式到达时从流式加载数据。 对于为流式摄取而创建的实体化视图,可以显式开启自动刷新。为此,请在实体化视图定义中指定 |
流式摄取和 Amazon Redshift Serverless | 适用于预置集群上的 Amazon Redshift 流式摄取的设置和配置说明也适用于 Amazon Redshift Serverless 上的流式摄取。务必指定必要的 RPU 级别,以便支持具有自动刷新功能的流式摄取和其它工作负载。有关更多信息,请参阅 Amazon Redshift Serverless 的账单。 |
与 Amazon MSK 集群位于不同可用区的 Amazon Redshift 节点 | 当您配置流式摄取时,如果为 Amazon MSK 启用了机架感知功能,则 Amazon Redshift 会尝试连接到同一可用区中的 Amazon MSK 集群。如果您的所有节点都与您的 Amazon Redshift 集群位于不同的可用区,则会产生跨可用区的数据传输费用。为避免这种情况,请在与 Redshift 预置集群或工作组相同的可用区中至少保留一个 Amazon MSK 代理集群节点。 |
刷新起始位置 | 在创建实体化视图后,其初始刷新从 Kinesis 流的 |
数据格式 | 支持的数据格式仅限于可以从 |
将记录附加到表 | 您可以运行 |
运行 TRUNCATE 或 DELETE | 您可以使用以下命令,从用于流式摄取的实体化视图中删除记录: |