Amazon Redshift 中的半结构化数据 - Amazon Redshift

从 2025 年 11 月 1 日起,Amazon Redshift 将不再支持创建新的 Python UDF。如果您想要使用 Python UDF,请在该日期之前创建 UDF。现有的 Python UDF 将继续正常运行。有关更多信息,请参阅博客文章

Amazon Redshift 中的半结构化数据

通过使用 Amazon Redshift 中的半结构化数据支持,可以摄取半结构化数据并将其存储在 Amazon Redshift 数据仓库中。通过使用 SUPER 数据类型和 PartiQL 语言,Amazon Redshift 扩展了数据仓库功能,以便与 SQL 和 NoSQL 数据源集成。通过这种方式,Amazon Redshift 可以对关系数据和半结构化存储数据(如 JSON)进行高效分析。有关 Amazon Redshift 与 PartiQL 集成的信息,请参阅 PartiQL:适用于 Amazon Redshift 的 SQL 兼容查询语言

Amazon Redshift 提供两种形式的半结构化数据支持:SUPER 数据类型和 Amazon Redshift Spectrum。

可以通过将半结构化数据摄取到 Amazon Redshift 并将其存储为 SUPER 数据类型来查询数据,也可以使用 Amazon Redshift Spectrum 来查询存储在 Amazon S3 中的数据。

处理半结构化数据的最佳实践

处理半结构化数据时,请考虑以下最佳实践。

  • 我们建议您在处理 SUPER 数据时将 enable_case_sensitive_super_attributeenable_case_sensitive_identifier 配置选项设置为 true。有关更多信息,请参阅enable_case_sensitive_super_attributeenable_case_sensitive_identifier

  • 使用 COPY 命令将数据从 Amazon S3 存储桶加载到 Amazon Redshift SUPER 列中。

  • 使用 PartiQL 动态键入和宽松语义来对 SUPER 数据值运行临时查询,而无需在查询之前强加架构。有关动态键入的信息,请参阅动态键入。有关宽松语义的信息,请参阅宽松语义

  • 如果您计划经常查询数据,请使用 PartiQL 将无架构和半结构化数据分解为实体化视图。当您对分解数据执行分析时,Amazon Redshift 实体化视图的列式组织可提供更好的性能。此外,需要对提取的数据使用常规 schema 的用户和业务情报 (BI) 工具可以使用视图(具体化或虚拟)作为数据的常规 schema 表示。

    在 PartiQL 实体化视图将在 JSON 或 SUPER 中找到的数据提取到传统的列式实体化视图之后,您可以查询这些实体化视图。有关实体化视图的信息,请参阅 Amazon Redshift 中的实体化视图。有关 SUPER 数据类型如何用于实体化视图的更多信息,请参阅SUPER 数据类型和实体化视图

SUPER 数据类型使用的概念

接下来,您可以找到一些 Amazon Redshift Super 数据类型概念。

了解 Amazon Redshift 中的 SUPER 数据类型是什么SUPER 数据类型是一种 Amazon Redshift 数据类型,允许存储包含 Amazon Redshift 标量以及可能的嵌套数组和结构的无 schemal 数组和结构。SUPER 数据类型可以本地存储不同格式的半结构化数据,例如 JSON 或源自面向文档的源的数据。可以添加一个新的 SUPER 列来存储半结构化数据并编写访问 SUPER 列的查询,以及通常的标量列。有关 SUPER 数据类型的更多信息,请参阅SUPER 类型

将无架构 JSON 摄取到 SUPER:通过灵活的半结构化 SUPER 数据类型,Amazon Redshift 可以接收无架构 JSON 并将其摄取到具有 SUPER 数据类型的列中。例如,可以使用 COPY 命令将 JSON 值 [10.5, “first”] 摄取到 SUPER 数据类型列中。该列持有的 SUPER 值将为 [10.5, ‘first’]。也可以使用 JSON_PARSE 函数摄取 JSON。COPY 和 json_parse 在预设情况下均使用严格的解析语义摄取 JSON。您还可以使用数据库数据本身构建包括数组和结构在内的 SUPER 值。

在摄取无架构 JSON 的灵活结构时,SUPER 列不要求修改架构。例如,在分析点击流时,您最初在属性为“IP” 和“time”的 SUPER 列中存储“click”结构。您可以添加属性“customer id”,而无需更改 schema,以便摄取此类更改。

用于 SUPER 数据类型的原生格式是一种二进制格式,它需要的空间小于其文本形式的 JSON 值。这可以在查询时更快地摄入和对 SUPER 值进行运行时处理。

使用 PartiQL 查询 SUPER 数据:PartiQL 是一个向后兼容的 SQL-92 扩展,许多 AWS 服务目前在使用它。通过使用 PartiQL,熟悉的 SQL 构造可以将对经典的表格式 SQL 数据和 SUPER 的半结构化数据的访问无缝结合在一起。您可以执行对象和数组导航以及非嵌套数组。PartiQL 扩展了标准 SQL 语言,以声明方式表达和处理嵌套和多值数据。

PartiQL 是 SQL 的扩展,其中 SUPER 列的嵌套和无 schema 数据是一等公民。PartiQL 不要求在查询编译期间对所有查询表达式进行类型检查。当访问 SUPER 列内的实际数据类型时,此方法使包含 SUPER 数据类型的查询表达式能够在查询执行期间动态键入。此外,PartiQL 在宽松模式下运行,其中类型不一致不会导致失败,而是会返回 null。无架构和宽松查询处理相结合使得 PartiQL 非常适合提取、加载、转换(ELT)应用程序,在这些应用程序中,SQL 查询可以评估在 SUPER 列中摄取的 JSON 数据。

有关适用于 Amazon Redshift 的 PartiQL 的更多信息,请参阅 PartiQL:适用于 Amazon Redshift 的 SQL 兼容查询语言。有关动态键入的信息,请参阅动态键入。有关宽松查询处理的信息,请参阅宽松语义

与 Redshift Spectrum 集成 – 通过 JSON、Parquet 和其他具有嵌套数据的格式运行 Redshift Spectrum 查询时,Amazon Redshift 支持 PartiQL 的多个方面。Redshift Spectrum 仅支持具有 schema 的嵌套数据。例如,使用 Redshift Spectrum,可以声明 JSON 数据在架构 ARRAY<STRUCT<a:INTEGER, b:DECIMAL(5,2)>> 中具有属性 nested_schemaful_example。此属性的 schema 确定数据始终包含一个数组,该数组包含一个带有整数 a 和小数 b 的结构。如果数据更改为包含更多属性,则类型也会发生变化。相比之下,SUPER 数据类型不需要 schema。您可以存储具有不同属性或类型的结构元素的数组。另外,值可以存储在数组之外。

使用 SUPER 类型数据的注意事项

在使用 SUPER 数据时,请考虑以下事项:

有关 SUPER 配置的更多信息,请参阅SUPER 配置