Limitations des données imbriquées (version préliminaire) - Amazon Redshift

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Limitations des données imbriquées (version préliminaire)

Cette rubrique décrit les limites liées à la lecture de données imbriquées avec Redshift Spectrum. Les données imbriquées sont des données qui contiennent des champs imbriqués. Les champs imbriqués sont des champs assemblés en une seule entité, tels que des tableaux, des structures ou des objets.

Note

Les limitations marquées (version préliminaire) dans la liste suivante s’appliquent uniquement aux clusters et groupes de travail en version préliminaire créés dans les régions suivantes.

  • USA Est (Ohio) (us-east-2)

  • USA Est (Virginie du Nord) (us-east-1)

  • US Ouest (N. California) (us-west-1)

  • Asie-Pacifique (Tokyo) (ap-northeast-1)

  • Europe (Irlande) (eu-west-1)

  • Europe (Stockholm) (eu-north-1)

Pour en savoir plus sur la configuration des clusters en version préliminaire, consultez Création d’un cluster en version préliminaire dans le Guide de gestion Amazon Redshift. Pour en savoir plus sur la configuration des groupes de travail en version préliminaire, consultez Création d’un groupe de travail en version préliminaire dans le Guide de gestion Amazon Redshift.

Les limites suivantes s’appliquent aux données imbriquées :

  • Un type array ou map peut contenir d’autres types array ou map tant que les requêtes sur les types imbriqués arrays ou maps ne renvoient pas de valeurs scalar (version préliminaire).

  • Amazon Redshift Spectrum prend uniquement en charge les types de données complexes sous forme de tables externes.

  • Les colonnes de résultats des sous-requêtes doivent être de niveau supérieur (version préliminaire).

  • Si une expression OUTER JOIN se réfère à un tableau imbriqué, il ne peut que se référer à ce tableau et ses pans imbriqués (et ses cartes). Si une expression OUTER JOIN ne se réfère pas à un tableau imbriqué, il peut se référer à tout genre de tableaux non imbriqués.

  • Si une clause FROM d’une sous-requête se réfère à un tableau imbriqué, il ne peut se référer à quelconque autre tableau.

  • Si une sous-requête dépend d’une table imbriquée qui se réfère à un parent, vous ne pouvez utiliser le parent que dans la clause FROM. Vous ne pouvez pas utiliser le parent dans une quelconque autre clause, comme une clause SELECT ou WHERE. Par exemple, la requête suivante ne s’exécute pas, car la clause SELECT de la sous-requête fait référence à la table parent c.

    SELECT c.name.given FROM spectrum.customers c WHERE (SELECT COUNT(c.id) FROM c.phones p WHERE p LIKE '858%') > 1;

    La requête suivante fonctionne parce que le parent c est utilisé uniquement dans la clause FROM de la sous-requête.

    SELECT c.name.given FROM spectrum.customers c WHERE (SELECT COUNT(*) FROM c.phones p WHERE p LIKE '858%') > 1;
  • Une sous-requête qui accède à des données imbriquées à tout autre endroit que la clause FROM doit renvoyer une seule valeur. Les seules exceptions sont les opérateurs (NOT) EXISTS dans une clause WHERE.

  • (NOT) IN n’est pas pris en charge.

  • La profondeur d’imbrication maximum pour tous les types imbriqués est de 100. Cette restriction s'applique à tous les formats de fichiers (ParquetORC, Ion etJSON).

  • Les sous-requêtes d’agrégation qui accèdent aux données imbriquées peuvent uniquement se reporter à arrays et maps dans leur clause FROM, et non pas à une table externe.

  • L’interrogation des pseudocolonnes de données imbriquées dans une table Redshift Spectrum n’est pas prise en charge. Pour de plus amples informations, veuillez consulter Pseudocolonnes.

  • Quand vous extrayez des données à partir de colonnes d’un tableau ou d’une carte en les spécifiant dans une clause FROM, vous ne pouvez sélectionner des valeurs dans ces colonnes que si les valeurs sont scalar. Par exemple, les requêtes suivantes essayent toutes deux de sélectionner (SELECT) des éléments depuis l’intérieur d’un tableau. La requête qui sélectionne fonctionne arr.a, car arr.a est une valeur scalar. La deuxième requête ne fonctionne pas, car array est un tableau extrait de s3.nested table dans la clause FROM (version préliminaire).

    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;

    Vous ne pouvez pas utiliser dans la clause FROM un tableau ni une carte qui proviennent eux-mêmes d’un autre tableau ou d’une autre carte. Pour sélectionner des tableaux ou d’autres structures complexes imbriquées dans d’autres tableaux, pensez à utiliser des index dans l’instruction SELECT.