Limitaciones de los datos anidados (versión preliminar)
En este tema se describen las limitaciones de la lectura de datos anidados con Redshift Spectrum. Los datos anidados son datos que contienen campos anidados. Los campos anidados son campos que se unen como una sola entidad, por ejemplo, matrices, estructuras u objetos.
nota
Las limitaciones marcadas (versión preliminar) en la siguiente lista solo se aplican a la versión preliminar de los clústeres y los grupos de trabajo creados en las siguientes regiones.
Este de EE. UU. (Ohio) (us-east-2)
Este de EE. UU. (Norte de Virginia) (us-east-1)
EE. UU. Oeste (Norte de California) (us-west-1)
Asia-Pacífico (Tokio) (ap-northeast-1)
Europa (Irlanda) (eu-west-1)
Europa (Estocolmo) (eu-north-1)
Para obtener información sobre la configuración de clústeres de versión preliminar, consulte Crear un clúster de versión preliminar en la Guía de administración de Amazon Redshift. Para obtener información sobre la configuración de grupos de trabajo de versión preliminar, consulte Crear un grupo de trabajo de vista previa en la Guía de administración de Amazon Redshift.
Las limitaciones siguientes son aplicables a los datos anidados:
-
Un tipo
array
omap
puede contener otros tiposarray
omap
siempre y cuando las consultas que estén en lasarrays
omaps
anidadas no devuelvan valoresscalar
. (versión preliminar) -
Amazon Redshift Spectrum solo admite tipos de datos complejos como tablas externas.
-
Las columnas de resultados de las subconsultas deben ser de nivel superior. (versión preliminar)
-
Si una expresión
OUTER JOIN
hace referencia a una tabla anidada, puede hacer referencia solo a esa tabla y a sus matrices anidadas (y asignaciones). Si una expresiónOUTER JOIN
no hace referencia a una tabla anidada, puede hacer referencia a cualquier número de tablas no anidadas. -
Si una cláusula
FROM
en una subconsulta hace referencia a una tabla anidada, no puede hacer referencia a ninguna otra tabla. -
Si una subconsulta depende de una tabla anidada que hace referencia a una tabla principal, la subconsulta solo puede usar la tabla principal en la cláusula
FROM
. No puede usar la principal en ninguna otra cláusula, como puede ser una cláusulaSELECT
oWHERE
. Por ejemplo, la siguiente consulta no se ejecuta porque laSELECT
cláusula de la subconsulta hace referencia a la tablac
principal.SELECT c.name.given FROM spectrum.customers c WHERE (SELECT COUNT(c.id) FROM c.phones p WHERE p LIKE '858%') > 1;
La siguiente consulta funciona porque el elemento principal
c
solo se usa en la cláusulaFROM
de la subconsulta.SELECT c.name.given FROM spectrum.customers c WHERE (SELECT COUNT(*) FROM c.phones p WHERE p LIKE '858%') > 1;
-
Una subconsulta que obtiene acceso a datos anidados desde cualquier lugar que no sea la cláusula
FROM
debe devolver un único valor. Las únicas excepciones son los operadores(NOT) EXISTS
de las cláusulasWHERE
. -
(NOT) IN
no se admite. -
La profundidad máxima de anidamiento para todos los tipos anidados es de 100. Esta restricción se aplica a todos los formatos de archivo (Parquet, ORC, Ion y JSON).
-
Las subconsultas de agregación que tienen acceso a los datos anidados solo pueden hacer referencia a
arrays
ymaps
en la cláusulaFROM
, y no a una tabla externa. -
No es posible realizar consultas de las pseudocolumnas de datos anidados en una tabla de Redshift Spectrum. Para obtener más información, consulte Pseudocolumnas.
-
Al extraer datos de columnas de matrices o mapas al especificarlos en una cláusula
FROM
, solo puede seleccionar valores de esas columnas si los valores sonscalar
. Por ejemplo, las siguientes consultas intentanSELECT
elementos de dentro de una matriz. La consulta que seleccionaarr.a
funciona porquearr.a
es un valorscalar
. La segunda consulta no funciona porquearray
es una matriz extraída des3.nested table
de la cláusulaFROM
. (versión preliminar)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;No puede utilizar una matriz o un mapa en la cláusula
FROM
que, a su vez, provenga de otra matriz o mapa. Para seleccionar matrices u otras estructuras complejas que estén anidadas dentro de otras matrices, considere la posibilidad de utilizar índices en la instrucciónSELECT
.