

 Amazon Redshift dejará de admitir la creación de nuevas UDF de Python a partir del parche 198. Las UDF de Python existentes seguirán funcionando hasta el 30 de junio de 2026. Para obtener más información, consulte la [publicación del blog](https://aws.amazon.com/blogs/big-data/amazon-redshift-python-user-defined-functions-will-reach-end-of-support-after-june-30-2026/). 

# Limitaciones de los datos anidados (versión preliminar)
<a name="nested-data-restrictions"></a>

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 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](https://docs.aws.amazon.com/redshift/latest/mgmt/managing-clusters-console.html#cluster-preview) en la *Guía de administración de Amazon Redshift*. 

Las limitaciones siguientes son aplicables a los datos anidados:
+ Un tipo `array` o `map` puede contener otros tipos `array` o `map` siempre y cuando las consultas que estén en las `arrays` o `maps` anidadas no devuelvan valores `scalar`. (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ón `OUTER 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áusula `SELECT` o `WHERE`. Por ejemplo, la siguiente consulta no se ejecuta porque la `SELECT` cláusula de la subconsulta hace referencia a la tabla `c` 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áusula `FROM` 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áusulas `WHERE`.
+ `(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` y `maps` en la cláusula `FROM`, 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](c-spectrum-external-tables.md#c-spectrum-external-tables-pseudocolumns). 
+ 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 son `scalar`. Por ejemplo, las siguientes consultas intentan `SELECT` elementos de dentro de una matriz. La consulta que selecciona `arr.a` funciona porque `arr.a` es un valor `scalar`. La segunda consulta no funciona porque `array` es una matriz extraída de `s3.nested table` de la cláusula `FROM`. (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ón `SELECT`.