嵌套数据限制
以下限制适用于嵌套数据:
-
数组只能包含标量或
struct类型。Array类型不能包含array或map类型。 -
Redshift Spectrum 只支持将复杂数据类型用作外部表。
-
查询和子查询结果列必须为标量。
-
如果
OUTER JOIN表达式引用嵌套表,则它只能引用该表及其嵌套数组(和映射)。如果OUTER JOIN表达式不引用嵌套表,它可以引用任何数量的非嵌套表。 -
如果子查询中的
FROM子句引用一个嵌套表,则它无法引用任何其他表。 -
如果子查询依赖于引用父项的嵌套表,您只能在
FROM子句中使用父项。您无法在任何其他子句中使用此父项,如SELECT或WHERE子句。例如,将不会执行以下查询。SELECT c.name.given FROM spectrum.customers c WHERE (SELECT COUNT(c.id) FROM c.phones p WHERE p LIKE '858%') > 1以下查询之所以有效,是因为只在子查询的
FROM子句中使用了父c。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子句中的arrays和maps,而不能引用外部表。 -
不支持查询 Redshift Spectrum 表中嵌套数据的伪列。有关更多信息,请参阅Pseudocolumns。