Limitações de dados aninhados (visualização) - Amazon Redshift

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 ou array pode conter outros tipos map ou array, desde que as consultas em arrays ou maps aninhados não retornem valores scalar. (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ão OUTER 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áusula SELECT ou WHERE. Por exemplo, a consulta a seguir não é executada porque a cláusula SELECT da subconsulta se refere à tabela pai c.

    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áusula FROM 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áusula WHERE.

  • 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 e maps em sua cláusula FROM, 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 forem scalar. Por exemplo, ambas as consultas a seguir tentam elementos SELECT por dentro de uma matriz. A consulta que seleciona arr.a funciona porque arr.a é um valor scalar. A segunda consulta não funciona porque array é uma matriz extraída de s3.nested table na cláusula FROM. (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ção SELECT.