Amazon Redshift
数据库开发人员指南 (API 版本 2012-12-01)
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

嵌套数据限制

以下限制适用于嵌套数据:

  • 数组只能包含标量或 struct 类型。Array 类型不能包含 arraymap 类型。

  • Redshift Spectrum 只支持将复杂数据类型用作外部表。

  • 查询和子查询结果列必须为标量。

  • 如果 OUTER JOIN 表达式引用嵌套表,则它只能引用该表及其嵌套数据(和映射)。如果 OUTER JOIN 表达式不引用嵌套表,它可以引用任何数量的非嵌套表。

  • 如果子查询中的 FROM 子句引用一个嵌套表,则它无法引用任何其他表。

  • 如果子查询依赖于引用父项的嵌套表,您只能在 FROM 子句中使用父项。您无法在任何其他子句中使用此查询,如 SELECTWHERE 子句。例如,将不会执行以下查询。

    SELECT c.name.given FROM spectrum.customers c WHERE (SELECT COUNT(c.id) FROM c.phones p WHERE p LIKE '858%') > 1

    以下查询之所以有效,是因为只在子查询的 c 子句中使用了父 FROM

    SELECT c.name.given FROM spectrum.customers c WHERE (SELECT COUNT(*) FROM c.phones p WHERE p LIKE '858%') > 1
  • FROM 子句之外的任何位置访问嵌套数据的子查询必须返回单个值。唯一的例外是 WHERE 子句中的 (NOT) EXISTS 运算符。

  • 不支持 (NOT) IN

  • 所有嵌套类型的最大嵌套深度均为 100。该限制适用于所有文件格式(Parquet、ORC、Ion 和 JSON)。

  • 访问嵌套数据的聚合子查询只能引用 FROM 子句中的 arraysmaps,而不能引用外部表。