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
oumap
peut contenir d’autres typesarray
oumap
tant que les requêtes sur les types imbriquésarrays
oumaps
ne renvoient pas de valeursscalar
(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 expressionOUTER 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 clauseSELECT
ouWHERE
. Par exemple, la requête suivante ne s’exécute pas, car la clauseSELECT
de la sous-requête fait référence à la table parentc
.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 clauseFROM
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 clauseWHERE
. -
(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
etmaps
dans leur clauseFROM
, 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 sontscalar
. 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 fonctionnearr.a
, cararr.a
est une valeurscalar
. La deuxième requête ne fonctionne pas, cararray
est un tableau extrait des3.nested table
dans la clauseFROM
(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’instructionSELECT
.