Limitaciones de los datos anidados (versión preliminar) - Amazon Redshift

Limitaciones de los datos anidados (versión preliminar)

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 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.

  • 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.