Limitações de dados aninhados (visualização)
Este tópico descreve as limitações referentes à leitura de dados aninhados com o Redshift Spectrum. Dados aninhados são dados que contêm campos aninhados. Campos aninhados são campos unidos como uma única entidade (por exemple, matrizes, structs ou objetos).
nota
As limitações marcadas (visualização) na lista a seguir só se aplicam a clusters e grupos de trabalho de visualização criados nas regiões a seguir.
Leste dos EUA (Ohio) (us-east-2)
Leste dos EUA (Norte da Virgínia) (us-east-1)
Oeste dos EUA (Norte da Califórnia) (us-west-1)
Ásia Pacific (Tóquio) (ap-northeast-1)
Europa (Irlanda) (eu-west-1)
UE (Estocolmo) (eu-north-1)
Para obter informações sobre como configurar clusters de visualização, consulte Creating a preview cluster no Guia de gerenciamento do Amazon Redshift. Para obter mais informações sobre como configurar grupos de trabalho de visualização, consulte Creating a preview workgroup no Guia de gerenciamento do Amazon Redshift.
As limitações a seguir se aplicam à dados aninhados:
-
Um tipo
map
ouarray
pode conter outros tiposmap
ouarray
, desde que as consultas emarrays
oumaps
aninhados não retornem valoresscalar
. (visualização) -
O Amazon Redshift Spectrum só dá suporte a tipos de dados complexos como tabelas externas.
-
As colunas de resultado da subconsulta devem estar no nível superior. (visualização)
-
Se uma expressão
OUTER JOIN
refere-se a uma tabela aninhada, pode consultar somente a tabela e seus arrays aninhados (e mapas). Se uma expressãoOUTER JOIN
não refere-se a uma tabela aninhada, pode consultar qualquer número de tabelas não aninhadas. -
Se uma cláusula
FROM
em uma subconsulta refere-se a uma tabela aninhada, não pode consultar de outra tabela. -
Se uma subconsulta depende de uma tabela aninhada referente a uma tabela pai, você só pode usar a tabela pai na cláusula
FROM
. Você não pode usar o pai em nenhuma outra cláusula, como a cláusulaSELECT
ouWHERE
. Por exemplo, a consulta a seguir não é executada porque a cláusulaSELECT
da subconsulta se refere à tabela paic
.SELECT c.name.given FROM spectrum.customers c WHERE (SELECT COUNT(c.id) FROM c.phones p WHERE p LIKE '858%') > 1;
A consulta a seguir funciona porque o pai
c
é usado apenas na cláusulaFROM
de uma subconsulta.SELECT c.name.given FROM spectrum.customers c WHERE (SELECT COUNT(*) FROM c.phones p WHERE p LIKE '858%') > 1;
-
Uma subconsulta que acessa dados aninhados em qualquer lugar, diferente da cláusula
FROM
deve retornar um valor único. As únicas exceções são os operadores(NOT) EXISTS
em uma cláusulaWHERE
. -
Não há suporte ao
(NOT) IN
. -
A profundidade máxima de assentamento para todos os tipos aninhados é de 100. Essa restrição aplica-se a todos os formatos de arquivo (Parquet, ORC, Ion e JSON).
-
Subconsultas de agregação que acessam dados aninhadas podem se referir somente a
arrays
emaps
em sua cláusulaFROM
, e não a uma tabela externa. -
Não há suporte para consultar as pseudocolunas de dados aninhados em uma tabela do Redshift Spectrum. Para ter mais informações, consulte Pseudocolunas.
-
Ao extrair dados das colunas de matriz ou mapa especificando-os em uma cláusula
FROM
, você só poderá selecionar valores dessas colunas se os valores foremscalar
. Por exemplo, ambas as consultas a seguir tentam elementosSELECT
por dentro de uma matriz. A consulta que selecionaarr.a
funciona porquearr.a
é um valorscalar
. A segunda consulta não funciona porquearray
é uma matriz extraída des3.nested table
na cláusulaFROM
. (visualização)SELECT array_column FROM s3.nested_table;
array_column ----------------- [{"a":1},{"b":2}]
SELECT arr.a FROM s3.nested_table t, t.array_column arr;arr.a ----- 1
--This query fails to run. SELECT array FROM s3.nested_table tab, tab.array_column array;Você não pode usar uma matriz ou um mapa na cláusula
FROM
que acompanha outra matriz ou mapa. Para selecionar matrizes ou outras estruturas complexas que estejam aninhadas dentro de outras matrizes, considere usar índices na instruçãoSELECT
.