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

在 Amazon Redshift 中摄取和查询半结构化数据

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

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

如果需要以低延迟插入或更新小批量的 JSON 数据,请使用 SUPER 数据类型。此外,当查询需要强一致性、可预测的查询性能、复杂的查询支持以及易于使用不断发展的 schema 和无 schema 数据时,请使用 SUPER。

相比之下,如果您的数据查询需要与其他 Amazon 服务以及主要存储在 Amazon S3 中以用于归档的数据集成,则将 Amazon Redshift Spectrum 与开放文件格式结合使用。

SUPER 数据类型的使用案例

Amazon Redshift 中使用 SUPER 数据类型的半结构化数据支持可提供卓越的性能、灵活度和易用性。以下使用案例帮助演示如何将半结构化数据支持用于 SUPER。

快速灵活地插入 JSON 数据 – Amazon Redshift 支持可以解析 JSON 并将其存储为 SUPER 值的快速事务。insert 事务的运行速度比在表中执行相同的插入操作速度最高快五倍,这些表将 SUPER 的属性分解为常规列。例如,假设传入的 JSON 的格式为 {“a”:.., “b”:.., “c”“..., ...}。通过将传入的 JSON 存储在带有单个 SUPER 列 S 的表 TJ 中,而不是将其存储到具有列“a”、“b”、“c”等的常规表 TR 中,可以多次提高插入性能。当 JSON 中有数百个属性时,SUPER 数据类型的性能优势就会变得非常明显。

另外,SUPER 数据类型不需要常规 schema。您不需要在存储传入的 JSON 之前对其自检和清理。例如,假设传入的 JSON 具有字符串“c”属性,其他属性具有整数“c”属性,但没有 SUPER 数据类型。在这种情况下,您必须分隔 c_string 和 c_int 列或清理数据。相比之下,使用 SUPER 数据类型,所有 JSON 数据都在摄入期间存储,而不会丢失信息。稍后,您可以使用 SQL 的 PartiQL 扩展来分析信息。

用于发现的灵活查询 – 将半结构化数据(如 JSON)存储到 SUPER 数据值后,您可以在不强加 schema 的情况下查询它。您可以使用 PartiQL 动态键入和宽松语义来运行查询并发现所需的深度嵌套数据,而无需在查询之前强加 schema。

对常规具体化视图的提取、加载、转换 (ETL) 操作的灵活查询 – 将无 schema 和半结构化数据存储到 SUPER 中后,您可以使用 PartiQL 具体化视图对数据进行自检并将其分解为具体化视图。

带有分解数据的具体化视图是经典分析案例的性能和可用性优势的一个很好的示例。当您对分解数据执行分析时,Amazon Redshift 具体化视图的列式组织可提供更好的性能。此外,需要对提取的数据使用常规 schema 的用户和业务情报 (BI) 工具可以使用视图(具体化或虚拟)作为数据的常规 schema 表示。

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

有关 SUPER 数据类型的信息,请参阅SUPER 类型

SUPER 数据类型使用的概念

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

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

将无 schema JSON 摄取到 SUPER – 通过灵活的半结构化 SUPER 数据类型,Amazon Redshift 可以接收并将无 schema JSON 摄取到 SUPER 值中。例如,Amazon Redshift 可以将 JSON 值 [10.5, "first"] 摄取到一个 SUPER 值 [10.5, ‘first’] 中,该值是一个包含 Amazon Redshift 十进制 10.5 和 varchar“first”的数组。Amazon Redshift 可以使用 COPY 命令或 JSON 解析函数将 JSON 摄取到 SUPER 值中,例如 json_parse('[10.5, "first"]')。COPY 和 json_parse 在预设情况下均使用严格的解析语义摄取 JSON。您还可以使用数据库数据本身构建包括数组和结构在内的 SUPER 值。

在摄取无 schema JSON 的不规则结构时,SUPER 列不需要 schema 修改。例如,在分析点击流时,您最初在属性为“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。无 schema 和松宽松查询处理的结合使得 PartiQL 非常适合提取、加载、传输 (ELT) 应用程序,在这些应用程序中,SQL 查询可以评估在 SUPER 列中摄取的 JSON 数据。

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

有关支持 SUPER 数据类型的函数的信息,请参阅以下内容:

SUPER 数据的注意事项

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

  • 使用 JDBC 驱动程序版本 1.2.50、ODBC 驱动程序版本 1.4.17 或更高版本以及 Amazon Redshift Python 驱动程序版本 2.0.872 或更高版本。

    有关 JDBC 驱动程序的信息,请参阅配置 JDBC 连接

    有关 ODBC 驱动程序的信息,请参阅配置 ODBC 连接

  • 通过 SUPER sample 数据集 查找以下主题中使用的 schema 示例。

  • 以下主题中使用的所有 SQL 代码示例都包含用于下载的相同 S3 前缀。其中包括数据定义语言 (DDL) 和 COPY 语句,以及某些使用 SUPER 的 TPC-H 修改后查询。

    要查看或下载 SQL 文件,请执行下列操作之一:

    • 下载 SUPER 教程 SQL 文件TPC-H 文件

    • 使用 Amazon S3 CLI,运行以下命令。您可以使用自己的目标路径。

      aws s3 cp s3://redshift-downloads/semistructured/tutorialscripts/semistructured-tutorial.sql /target/path aws s3 cp s3://redshift-downloads/semistructured/tutorialscripts/super_tpch_queries.sql /target/path

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