

 从补丁 198 开始，Amazon Redshift 将不再支持创建新的 Python UDF。现有的 Python UDF 将继续正常运行至 2026 年 6 月 30 日。有关更多信息，请参阅[博客文章](https://www.amazonaws.cn/blogs/big-data/amazon-redshift-python-user-defined-functions-will-reach-end-of-support-after-june-30-2026/)。

# Amazon Redshift 中的半结构化数据
<a name="super-overview"></a>

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

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

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

## 处理半结构化数据的最佳实践
<a name="super-best-practices"></a>

处理半结构化数据时，请考虑以下最佳实践。
+  我们建议您在处理 SUPER 数据时将 `enable_case_sensitive_super_attribute` 和 `enable_case_sensitive_identifier` 配置选项设置为 true。有关更多信息，请参阅[enable\$1case\$1sensitive\$1super\$1attribute](r_enable_case_sensitive_super_attribute.md)和[enable\$1case\$1sensitive\$1identifier](r_enable_case_sensitive_identifier.md)。
+  使用 COPY 命令将数据从 Amazon S3 存储桶加载到 Amazon Redshift SUPER 列中。
+  使用 PartiQL 动态键入和宽松语义来对 SUPER 数据值运行临时查询，而无需在查询之前强加架构。有关动态键入的信息，请参阅[动态键入](query-super.md#dynamic-typing-lax-processing)。有关宽松语义的信息，请参阅[宽松语义](query-super.md#lax-semantics)。
+  如果您计划经常查询数据，请使用 PartiQL 将无架构和半结构化数据分解为实体化视图。当您对分解数据执行分析时，Amazon Redshift 实体化视图的列式组织可提供更好的性能。此外，需要对提取的数据使用常规 schema 的用户和业务情报 (BI) 工具可以使用视图（具体化或虚拟）作为数据的常规 schema 表示。

  在 PartiQL 实体化视图将在 JSON 或 SUPER 中找到的数据提取到传统的列式实体化视图之后，您可以查询这些实体化视图。有关实体化视图的信息，请参阅 [Amazon Redshift 中的实体化视图](materialized-view-overview.md)。有关 SUPER 数据类型如何用于实体化视图的更多信息，请参阅[SUPER 数据类型和实体化视图](r_SUPER_MV.md)。

## SUPER 数据类型使用的概念
<a name="super-overview-concepts"></a>

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

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

**将无架构 JSON 摄取到 SUPER**：通过灵活的半结构化 SUPER 数据类型，Amazon Redshift 可以接收无架构 JSON 并将其摄取到具有 SUPER 数据类型的列中。例如，可以使用 COPY 命令将 JSON 值 `[10.5, “first”]` 摄取到 SUPER 数据类型列中。该列持有的 SUPER 值将为 `[10.5, ‘first’]`。也可以使用 [JSON\$1PARSE 函数](JSON_PARSE.md)摄取 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 兼容查询语言](super-partiql.md)。有关动态键入的信息，请参阅[动态键入](query-super.md#dynamic-typing-lax-processing)。有关宽松查询处理的信息，请参阅[宽松语义](query-super.md#lax-semantics)。

**与 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 类型数据的注意事项
<a name="super-overview-considerations"></a>

在使用 SUPER 数据时，请考虑以下事项：
+ 使用 JDBC 驱动程序版本 2.x、ODBC 驱动程序版本 2.x 或 Amazon Redshift Python 驱动程序版本 2.0.872 或更高版本。不支持 ODBC 驱动程序版本 1.x。

  有关 JDBC 驱动程序的信息，请参阅《Amazon Redshift 管理指南》**中的[为 Amazon Redshift 配置 JDBC 驱动程序版本 2.x 连接](https://docs.amazonaws.cn/redshift/latest/mgmt/jdbc20-install.html)。

  有关 ODBC 驱动程序的信息，请参阅《Amazon Redshift 管理指南》**中的[为 Amazon Redshift 配置 ODBC 驱动程序版本 2.x 连接](https://docs.amazonaws.cn/redshift/latest/mgmt/odbc20-install.html)。

  有关 Python 驱动程序的信息，请参阅《Amazon Redshift 管理指南》**中的 [Amazon Redshift Python 连接器](https://docs.amazonaws.cn/redshift/latest/mgmt/python-redshift-driver.html)。

有关 SUPER 配置的更多信息，请参阅[SUPER 配置](super-configurations.md)。