View a markdown version of this page

Amazon Redshift 中的半结构化数据 - Amazon Redshift
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)。

2026 年 6 月 30 日之后,Amazon Redshift 不再支持使用 Python UDF。我们将分阶段开始执行。有关 Python 生命周期终止和迁移选项详情的更多信息,请参阅 2025 年 6 月 30 日发布的博客文章。

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_attribute 配置选项设置为 true。有关更多信息,请参阅 enable_case_sensitive_super_attribute。

  • 使用 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 扩展,许多 Amazon 服务目前在使用它。通过使用 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 配置。