

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.

# CloudTrail Contraintes SQL du lac
<a name="query-limitations"></a>

**Note**  
AWS CloudTrail Lake ne sera plus ouvert aux nouveaux clients à compter du 31 mai 2026. Si vous souhaitez utiliser CloudTrail Lake, inscrivez-vous avant cette date. Les clients existants peuvent continuer à utiliser le service normalement. Pour de plus amples informations, veuillez consulter [CloudTrail Modification de la disponibilité des lacs](cloudtrail-lake-service-availability-change.md).

CloudTrail Les requêtes Lake sont des chaînes SQL. Cette section fournit des informations sur les fonctions, les opérateurs et les schémas pris en charge.

Seules les instructions `SELECT` sont autorisées. Aucune chaîne de requête ne peut modifier ou muter les données.

La syntaxe CloudTrail Lake d'une `SELECT` instruction est la suivante. L'ID du magasin de données d'événements (la partie ID de l'ARN du magasin de données d'événements) est spécifié pour la valeur. `FROM`

```
SELECT [ DISTINCT ] columns [ Aggregate ]
[ FROM table event_data_store_ID]
[ WHERE columns [ Conditions ] ]
[ GROUP BY columns [ DISTINCT | Aggregate ] ]
[ HAVING columns [ Aggregate | Conditions ] ]
[ ORDER BY columns [ Aggregate | ASC | DESC | NULLS | FIRST | LAST ]
[ LIMIT [ INT ] ]
```

CloudTrail Lake prend en charge toutes les `SELECT` instructions, fonctions et opérateurs Trino SQL valides. Pour plus d'informations sur les fonctions et les opérateurs SQL pris en charge, consultez la section [Fonctions et opérateurs](https://trino.io/docs/current/functions.html) sur le site Web de documentation de Trino. 

La CloudTrail console fournit un certain nombre d'exemples de requêtes qui peuvent vous aider à commencer à écrire vos propres requêtes. Pour de plus amples informations, veuillez consulter [Afficher des exemples de requêtes avec la CloudTrail console](lake-console-queries.md).

Pour plus d'informations sur la manière d'optimiser vos requêtes, consultez[Optimisez les requêtes CloudTrail Lake](lake-queries-optimization.md).

**Topics**
+ [Fonctions et opérateurs de condition et de jointure pris en charge](#query-aggregates-condition-operators)
+ [Prise en charge avancée des requêtes multitables](#query-advanced-multi-table)

## Fonctions et opérateurs de condition et de jointure pris en charge
<a name="query-aggregates-condition-operators"></a>

**Fonctions prises en charge**

CloudTrail Lake prend en charge toutes les fonctions de Trino. Pour plus d'informations sur les fonctions prises en charge, consultez la section [Fonctions et opérateurs](https://trino.io/docs/current/functions.html) sur le site Web de documentation de Trino.

**Opérateurs de conditions pris en charge**

Les opérateurs de condition suivants sont pris en charge.

```
AND
OR
IN
NOT
IS (NOT) NULL
LIKE
BETWEEN
GREATEST
LEAST
IS DISTINCT FROM
IS NOT DISTINCT FROM
<
>
<=
>=
<>
!=
( conditions ) #parenthesised conditions
```

**Opérateurs de jointure pris en charge**

Les opérateurs `JOIN` suivants sont pris en charge. Pour plus d’informations sur l’exécution de requêtes multitables, consultez [Prise en charge avancée des requêtes multitables](#query-advanced-multi-table).

```
UNION 
UNION ALL 
EXCEPT 
INTERSECT 
LEFT JOIN 
RIGHT JOIN 
INNER JOIN
```

## Prise en charge avancée des requêtes multitables
<a name="query-advanced-multi-table"></a>

CloudTrail Lake prend en charge le langage de requête avancé dans plusieurs magasins de données d'événements.
+ [`UNION|UNION ALL|EXCEPT|INTERSECT`](#query-multi-table-union)
+ [`LEFT|RIGHT|INNER JOIN`](#query-multi-table-left-right)

Pour exécuter votre requête, utilisez la commande **start-query** de l' AWS CLI. Voici un exemple utilisant l'une des requêtes types de cette section.

```
aws cloudtrail start-query
--query-statement "Select eventId, eventName from EXAMPLEf852-4e8f-8bd1-bcf6cEXAMPLE UNION Select eventId, eventName from EXAMPLEg741-6y1x-9p3v-bnh6iEXAMPLE UNION ALL Select eventId, eventName from EXAMPLEb529-4e8f9l3d-6m2z-lkp5sEXAMPLE ORDER BY eventId LIMIT 10;"
```

La réponse est une chaîne `QueryId`. Pour obtenir le statut d'une requête, exécutez `describe-query` en utilisant la valeur `QueryId` renvoyée par `start-query`. Si la requête est réussie, vous pouvez exécuter `get-query-results` pour obtenir des résultats.

### `UNION|UNION ALL|EXCEPT|INTERSECT`
<a name="query-multi-table-union"></a>

Voici un exemple de requête qui utilise `UNION` et `UNION ALL` pour rechercher des événements par leur ID d'événement et leur nom d'événement dans trois magasins de données d'événements EDS1, EDS2, et EDS3. Les résultats sont d'abord sélectionnés dans chaque magasin de données d'événement, puis concaténés, triés par ID d'événement et limités à dix événements.

```
Select eventId, eventName from EDS1
UNION
Select eventId, eventName from EDS2
UNION ALL
Select eventId, eventName from EDS3 
ORDER BY eventId LIMIT 10;
```

### `LEFT|RIGHT|INNER JOIN`
<a name="query-multi-table-left-right"></a>

Voici un exemple de requête qui utilise `LEFT JOIN` pour trouver tous les événements d'un magasin de données d'événement nommé `eds2`, mappé sur `edsB`, qui correspondent à ceux d'un magasin de données d'événement principal (à gauche), `edsA`. Les événements retournés se sont produits au plus tard le 1er janvier 2020, et seuls les noms des événements sont retournés.

```
SELECT edsA.eventName, edsB.eventName, element_at(edsA.map, 'test')
FROM eds1 as edsA 
LEFT JOIN eds2 as edsB
ON edsA.eventId = edsB.eventId 
WHERE edsA.eventtime <= '2020-01-01'
ORDER BY edsB.eventName;
```