

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.

# Interrogez les données de AWS IoT SiteWise
<a name="query-industrial-data"></a>

Vous pouvez utiliser les opérations de l' AWS IoT SiteWise API pour interroger les valeurs actuelles, les valeurs historiques et les agrégats des propriétés de vos actifs sur des intervalles de temps spécifiques. AWS IoT SiteWise fournit plusieurs interfaces de requête pour répondre aux différents besoins d'intégration :
+ **Opérations d'API directes** - Appels d'API simples et ciblés pour des besoins spécifiques de récupération de données
+ **Langage de requête de type SQL** : requêtes puissantes et flexibles pour l'analyse de données complexes
+ **Pilote ODBC** - Intégration aux outils et applications de business intelligence

Utilisez ces fonctionnalités de requête pour :
+ Obtenez des informations en temps réel sur les données opérationnelles
+ Analyser les tendances et les modèles historiques
+ Calculez les indicateurs de performance de vos actifs industriels
+ Intégrez les données IoT aux systèmes et tableaux de bord de l'entreprise
+ Créez des applications personnalisées qui exploitent les données industrielles

Par exemple, vous pouvez découvrir tous les actifs ayant des valeurs de propriété spécifiques, créer des représentations personnalisées de vos données ou développer des solutions logicielles qui s'intègrent aux données industrielles stockées dans vos AWS IoT SiteWise actifs. Vous pouvez également explorer les données de vos ressources en direct dans AWS IoT SiteWise Monitor. Pour savoir comment configurer le SiteWise moniteur, consultez[Surveillez les données avec AWS IoT SiteWise Monitor](monitor-data.md).

Les opérations décrites dans cette section renvoient des objets contenant des valeurs de propriété contenant des structures d'horodatage, de qualité et de valeur (TQV) :
+ `timestamp` contient l'heure d'époque Unix actuelle en secondes avec un décalage en nanosecondes.
+ La métrique `quality` contient l'une des chaînes suivantes, qui indiquent la qualité du point de données :
  + `GOOD`— Les données ne sont affectées par aucun problème.
  + `BAD`— Les données sont affectées par un problème tel qu'une défaillance du capteur.
  + `UNCERTAIN`— Les données sont affectées par un problème tel que l'imprécision du capteur.
+ `value` contient l'un des champs suivants, selon le type de la propriété :
  + `booleanValue`
  + `doubleValue`
  + `integerValue`
  + `stringValue`
  + `nullValue`

**Topics**
+ [Interrogez les valeurs actuelles des propriétés des actifs dans AWS IoT SiteWise](current-values.md)
+ [Rechercher les valeurs historiques des propriétés des actifs dans AWS IoT SiteWise](historical-values.md)
+ [Interrogez les agrégats de propriétés des actifs dans AWS IoT SiteWise](aggregates.md)
+ [AWS IoT SiteWise langage de requête](sql.md)
+ [Optimisation des requêtes](query-optimize.md)
+ [ODBC](query-ODBC.md)

# Interrogez les valeurs actuelles des propriétés des actifs dans AWS IoT SiteWise
<a name="current-values"></a>

Ce didacticiel montre deux méthodes pour obtenir la valeur actuelle d'une propriété d'actif. Vous pouvez utiliser la AWS IoT SiteWise console ou utiliser l'API dans le AWS Command Line Interface (AWS CLI).

**Topics**
+ [Rechercher la valeur actuelle d'une propriété d'actif (console)](#query-current-value-console)
+ [Rechercher la valeur actuelle d'une propriété d'actif (AWS CLI)](#query-current-value-cli)

## Rechercher la valeur actuelle d'une propriété d'actif (console)
<a name="query-current-value-console"></a>

Vous pouvez utiliser la AWS IoT SiteWise console pour afficher la valeur actuelle d'une propriété d'actif.

**Pour obtenir la valeur actuelle d'une propriété de ressource (console)**

1. <a name="sitewise-open-console"></a>Accédez à la [console AWS IoT SiteWise](https://console.aws.amazon.com/iotsitewise/).

1. <a name="sitewise-choose-assets"></a>Dans le panneau de navigation, choisissez **Ressources**.

1. Choisissez la ressource avec la propriété à interroger.

1. Cliquez sur l'icône en forme de flèche pour développer une hiérarchie d'actifs afin de trouver votre actif.

1. Choisissez l'onglet correspondant au type de propriété. Par exemple, choisissez **Mesures** pour afficher la valeur actuelle d'une propriété de mesure.

1. Trouvez la propriété à afficher. La valeur actuelle apparaît dans la colonne **Dernière valeur**.

## Rechercher la valeur actuelle d'une propriété d'actif (AWS CLI)
<a name="query-current-value-cli"></a>

Vous pouvez utiliser le AWS Command Line Interface (AWS CLI) pour rechercher la valeur actuelle d'une propriété d'actif.

Utilisez l'[GetAssetPropertyValue](https://docs.aws.amazon.com/iot-sitewise/latest/APIReference/API_GetAssetPropertyValue.html)opération pour interroger la valeur actuelle d'une propriété d'actif.

Pour identifier une propriété d'actif, spécifiez l'une des options suivantes :
+ La `assetId` fin `propertyId` de la propriété de l'actif à laquelle les données sont envoyées.
+ Le`propertyAlias`, qui est un alias de flux de données (par exemple,`/company/windfarm/3/turbine/7/temperature`). Pour utiliser cette option, vous devez d'abord définir l'alias de votre propriété de ressource. Pour définir des alias de propriété, consultez[Gérez les flux de données pour AWS IoT SiteWise](manage-data-streams.md).

**Pour obtenir la valeur actuelle d'un actif (AWS CLI)**
+ Exécutez la commande suivante pour obtenir la valeur actuelle de la propriété de ressource. Remplacez *asset-id* par l'ID de l'actif et *property-id* par l'ID de la propriété.

  ```
  aws iotsitewise get-asset-property-value \
    --asset-id asset-id \
    --property-id property-id
  ```

  L'opération renvoie une réponse qui contient les données TQV actuelles de la propriété au format suivant.

  ```
  {
    "propertyValue": {
      "value": {
        "booleanValue": Boolean,
        "doubleValue": Number,
        "integerValue": Number,
        "stringValue": "String",
        "nullValue": {
            "valueType": "String"
        }
      },
      "timestamp": {
        "timeInSeconds": Number,
        "offsetInNanos": Number
      },
      "quality": "String"
    }
  }
  ```

# Rechercher les valeurs historiques des propriétés des actifs dans AWS IoT SiteWise
<a name="historical-values"></a>

Vous pouvez utiliser l'[GetAssetPropertyValueHistory](https://docs.aws.amazon.com/iot-sitewise/latest/APIReference/API_GetAssetPropertyValueHistory.html)opération AWS IoT SiteWise API pour interroger les valeurs historiques d'une propriété d'actif.

Pour identifier une propriété d'actif, spécifiez l'une des options suivantes :
+ La `assetId` fin `propertyId` de la propriété de l'actif à laquelle les données sont envoyées.
+ Le`propertyAlias`, qui est un alias de flux de données (par exemple,`/company/windfarm/3/turbine/7/temperature`). Pour utiliser cette option, vous devez d'abord définir l'alias de votre propriété de ressource. Pour définir des alias de propriété, consultez[Gérez les flux de données pour AWS IoT SiteWise](manage-data-streams.md).

Passez les paramètres suivants pour affiner vos résultats :
+ `startDate`— Le début exclusif de la plage à partir de laquelle interroger les données historiques, exprimé en secondes à l'époque Unix.
+ `endDate`— La fin de la plage inclusive à partir de laquelle interroger les données historiques, exprimée en secondes à l'époque Unix.
+ `maxResults`— Le nombre maximum de résultats à renvoyer par requête. Par défaut, ce sont les `20` résultats.
+ `nextToken`— Un jeton de pagination renvoyé lors d'un précédent appel de cette opération.
+ `timeOrdering`— La commande à appliquer aux valeurs renvoyées : `ASCENDING` ou`DESCENDING`.
+ `qualities`— La qualité permettant de filtrer les résultats par : `GOOD``BAD`, ou`UNCERTAIN`.

**Pour consulter l'historique des valeurs d'une propriété d'actif (AWS CLI)**

1. Exécutez la commande suivante pour obtenir l'historique des valeurs de la propriété de ressource. Cette commande interroge l'historique de la propriété sur un intervalle spécifique de 10 minutes. Remplacez *asset-id* par l'ID de l'actif et *property-id* par l'ID de la propriété. Remplacez les paramètres de date par l'intervalle à interroger.

   ```
   aws iotsitewise get-asset-property-value-history \
     --asset-id asset-id \
     --property-id property-id \
     --start-date 1575216000 \
     --end-date 1575216600
   ```

   L'opération renvoie une réponse contenant l'historique TQVs de la propriété au format suivant :

   ```
   {
     "assetPropertyValueHistory": [
       {
         "value": {
           "booleanValue": Boolean,
           "doubleValue": Number,
           "integerValue": Number,
           "stringValue": "String",
           "nullValue": {
               "valueType": "String"
           }
         },
         "timestamp": {
           "timeInSeconds": Number,
           "offsetInNanos": Number
         },
         "quality": "String"
       }
     ],
     "nextToken": "String"
   }
   ```

1. S'il existe d'autres entrées de valeur, vous pouvez transmettre le jeton de pagination du `nextToken` champ à un appel ultérieur à l'[GetAssetPropertyValueHistory](https://docs.aws.amazon.com/iot-sitewise/latest/APIReference/API_GetAssetPropertyValueHistory.html)opération.

# Interrogez les agrégats de propriétés des actifs dans AWS IoT SiteWise
<a name="aggregates"></a>

AWS IoT SiteWise calcule automatiquement les valeurs agrégées des propriétés des actifs, qui sont un ensemble de mesures de base calculées sur plusieurs intervalles de temps. AWS IoT SiteWise calcule les agrégats suivants chaque minute, heure et jour pour les propriétés de vos actifs :
+ **average** — La moyenne (moyenne) des valeurs d'une propriété sur un intervalle de temps.
+ **count** — Le nombre de points de données pour une propriété sur un intervalle de temps.
+ **maximum** — Le maximum des valeurs d'une propriété sur un intervalle de temps.
+ **minimum** : valeur minimale d'une propriété sur un intervalle de temps.
+ **écart type : écart** type des valeurs d'une propriété sur un intervalle de temps.
+ **sum** — Somme des valeurs d'une propriété sur un intervalle de temps.

Pour les propriétés non numériques, telles que les chaînes et les booléens, AWS IoT SiteWise calcule uniquement le nombre agrégé.

Vous pouvez également calculer des métriques personnalisées pour vos données d'actif. Les propriétés des métriques vous permettent de définir des agrégations spécifiques à votre opération. Les propriétés métriques offrent des fonctions d'agrégation et des intervalles de temps supplémentaires qui ne sont pas précalculés pour l' AWS IoT SiteWise API. Pour de plus amples informations, veuillez consulter [Données agrégées provenant de propriétés et d'autres actifs (métriques)](metrics.md).

**Topics**
+ [Agrégats pour une propriété d'actif (API)](#aggregates-api)
+ [Agrégats pour un actif ()AWS CLI](#aggregates-cli)

## Agrégats pour une propriété d'actif (API)
<a name="aggregates-api"></a>

Utilisez l' AWS IoT SiteWise API pour obtenir des agrégats pour une propriété d'actif.

Utilisez l'[GetAssetPropertyAggregates](https://docs.aws.amazon.com/iot-sitewise/latest/APIReference/API_GetAssetPropertyAggregates.html)opération pour interroger les agrégats d'une propriété d'actif.

Pour identifier une propriété d'actif, spécifiez l'une des options suivantes :
+ La `assetId` fin `propertyId` de la propriété de l'actif à laquelle les données sont envoyées.
+ Le`propertyAlias`, qui est un alias de flux de données (par exemple,`/company/windfarm/3/turbine/7/temperature`). Pour utiliser cette option, vous devez d'abord définir l'alias de votre propriété de ressource. Pour définir des alias de propriété, consultez[Gérez les flux de données pour AWS IoT SiteWise](manage-data-streams.md).

Vous devez transmettre les paramètres obligatoires suivants :
+ `aggregateTypes`— La liste des agrégats à récupérer. Vous pouvez spécifier n'importe quel élément : `AVERAGE`, `COUNT`, `MAXIMUM`, `MINIMUM`, `STANDARD_DEVIATION` et `SUM`.
+ `resolution`— Intervalle de temps pendant lequel la métrique doit être `1m` récupérée : (1 minute), `15m` (15 minutes), `1h` (1 heure) ou `1d` (1 jour).
+ `startDate`— Le début exclusif de la plage à partir de laquelle interroger les données historiques, exprimé en secondes à l'époque Unix.
+ `endDate`— La fin de la plage inclusive à partir de laquelle interroger les données historiques, exprimée en secondes à l'époque Unix.

Vous pouvez également passer l'un des paramètres suivants pour affiner vos résultats :
+ `maxResults`— Le nombre maximum de résultats à renvoyer par requête. Par défaut, ce sont les `20` résultats.
+ `nextToken`— Un jeton de pagination renvoyé lors d'un précédent appel de cette opération.
+ `timeOrdering`— La commande à appliquer aux valeurs renvoyées : `ASCENDING` ou`DESCENDING`.
+ `qualities`— La qualité permettant de filtrer les résultats par : `GOOD``BAD`, ou`UNCERTAIN`.

**Note**  
L'[GetAssetPropertyAggregates](https://docs.aws.amazon.com/iot-sitewise/latest/APIReference/API_GetAssetPropertyAggregates.html)opération renvoie un TQV avec un format différent de celui des autres opérations décrites dans cette section. La structure `value` contient un champ pour chacun des éléments `aggregateTypes` de la demande. Le `timestamp` contient l'heure à laquelle l'agrégation s'est produite, en secondes (heure UNIX Epoch).

## Agrégats pour un actif ()AWS CLI
<a name="aggregates-cli"></a>

**Pour interroger des agrégats pour une propriété d'actif ()AWS CLI**

1. Exécutez la commande suivante pour obtenir des agrégats pour la propriété de ressource. Cette commande interroge la moyenne et la somme avec une résolution d’1 heure pour un intervalle spécifique d’1 heure. Remplacez *asset-id* par l'ID de l'actif et *property-id* par l'ID de la propriété. Remplacez les paramètres par les agrégats et l'intervalle à interroger.

   ```
   aws iotsitewise get-asset-property-aggregates \
     --asset-id asset-id \
     --property-id property-id \
     --start-date 1575216000 \
     --end-date 1575219600 \
     --aggregate-types AVERAGE SUM \
     --resolution 1h
   ```

   L'opération renvoie une réponse contenant l'historique TQVs de la propriété au format suivant. La réponse inclut uniquement les agrégats demandés.

   ```
   {
     "aggregatedValues": [
       {
         "timestamp": Number,
         "quality": "String",
         "value": {
           "average": Number,
           "count": Number,
           "maximum": Number,
           "minimum": Number,
           "standardDeviation": Number,
           "sum": Number
         }
       }
     ],
     "nextToken": "String"
   }
   ```

1. S'il existe d'autres entrées de valeur, vous pouvez transmettre le jeton de pagination du `nextToken` champ à un appel ultérieur à l'[GetAssetPropertyAggregates](https://docs.aws.amazon.com/iot-sitewise/latest/APIReference/API_GetAssetPropertyAggregates.html)opération.

**Note**  
 Si votre plage de requêtes contient une `null` valeur TQVs, consultez [AssetPropertyValue](https://docs.aws.amazon.com/iot-sitewise/latest/APIReference/API_AssetPropertyValue.html)API. Toutes les statistiques, à l'exception du nombre, donnent lieu à une `null` réponse, similaire aux statistiques de String TQVs. Si votre plage de requêtes contient `Double.NaN` un type double TQVs, tous les calculs, à l'exception du nombre, aboutiront à un`Double.NaN`. 

# AWS IoT SiteWise langage de requête
<a name="sql"></a>

Grâce à l'opération d'[ExecuteQuery](https://docs.aws.amazon.com/iot-sitewise/latest/APIReference/API_ExecuteQuery.html)API de récupération de AWS IoT SiteWise données, vous pouvez récupérer des informations sur les définitions structurelles déclaratives et les données de séries chronologiques qui leur sont associées, à partir des informations suivantes :
+ modèles
+ actifs
+ mesures
+ métriques
+ transformations
+ agrégats

Cela peut être fait avec des instructions de requête de type SQL, dans une seule requête d'API.

**Note**  
Cette fonctionnalité est disponible dans toutes les régions où AWS IoT SiteWise elle est disponible, sauf AWS GovCloud (USA Ouest), Canada (Centre), Chine (Pékin) et USA Est (Ohio). 

**Topics**
+ [Référence du langage de requête pour AWS IoT SiteWise](query-reference.md)

# Référence du langage de requête pour AWS IoT SiteWise
<a name="query-reference"></a>

 AWS IoT SiteWise prend en charge un langage de requête riche pour travailler avec vos données. Les types de données, les opérateurs, les fonctions et les constructions disponibles sont décrits dans les rubriques suivantes.

Voir [Exemples de requêtes](sql-examples.md) pour écrire des requêtes avec le langage de AWS IoT SiteWise requête.

**Topics**
+ [Vues de référence des requêtes](query-reference-views.md)
+ [Types de données pris en charge](supported-data-types.md)
+ [Clauses prises en charge](supported-clauses.md)
+ [Opérateurs logiques](sql-supported-logical.md)
+ [Opérateurs de comparaison](sql-supported-comparision.md)
+ [Fonctions SQL](sql-functions.md)
+ [Exemples de requêtes](sql-examples.md)

# Vues de référence des requêtes
<a name="query-reference-views"></a>

Cette section fournit des informations pour vous aider à comprendre les vues AWS IoT SiteWise, telles que les métadonnées de processus et les données de télémétrie.

Les tableaux suivants fournissent les noms et les descriptions des vues :


**Modèle de données**  

|  **Nom de la vue**  |  **Description de la vue**  | 
| --- | --- | 
|  asset  |  Contient des informations sur l'actif et la dérivation du modèle.  | 
|  propriété\$1actif  |  Contient des informations sur la structure de la propriété de l'actif.  | 
|  Série Raw\$1Time  |  Contient les données historiques de la série chronologique.  | 
|  dernière\$1value\$1time\$1series  |  Contient la dernière valeur de la série chronologique.  | 
|  agrégats\$1précalculés  |  Contient les valeurs agrégées des propriétés des actifs calculées automatiquement. Il s'agit d'un ensemble de mesures de base calculées sur plusieurs intervalles de temps.  | 

Les vues suivantes répertorient les noms de colonnes et les types de données de chaque vue.


**Voir : actif**  

|  **nom de colonne**  |  **datatype**  | 
| --- | --- | 
|  identifiant\$1actif  |  chaîne  | 
|  nom\$1actif  |  chaîne  | 
|  description\$1de l'actif  |  chaîne  | 
|  identifiant\$1modèle d'actif  |  chaîne  | 
|  identifiant\$1actif\$1parent  |  chaîne  | 
| identifiant\$1externe de l'actif | chaîne | 
| asset\$1model\$1external\$1id | chaîne | 
| id\$1hiérarchie | chaîne | 


**Voir : asset\$1property**  

|  **nom de colonne**  |  **datatype**  | 
| --- | --- | 
|  identifiant\$1actif  |  chaîne  | 
|  identifiant\$1propriété  |  chaîne  | 
|  nom\$1propriété  |  chaîne  | 
|  alias de propriété  |  chaîne  | 
|  identifiant\$1externe de la propriété  |  chaîne  | 
|  asset\$1composite\$1model\$1id  |  chaîne  | 
|  type\$1propriété  |  chaîne  | 
|  type\$1données\$1propriété  |  chaîne  | 
|  int\$1attribute\$1value  |  entier  | 
|  valeur\$1attribut double  |  double  | 
|  valeur\$1attribute\$1booléenne  |  boolean  | 
|  valeur\$1attribut\$1chaîne  |  chaîne  | 


**Voir : RAW\$1TIME\$1SERIES**  

|  **nom de colonne**  |  **datatype**  | 
| --- | --- | 
|  identifiant\$1actif  |  chaîne  | 
|  identifiant\$1propriété  |  chaîne  | 
|  alias de propriété  |  chaîne  | 
|  event\$1timestamp  |  timestamp  | 
|  quality  |  chaîne  | 
|  valeur\$1booléenne  |  boolean  | 
|  int\$1value  |  entier  | 
|  valeur\$1double  |  double  | 
|  valeur\$1chaîne  |  chaîne  | 


**Voir : LATEST\$1VALUE\$1TIME\$1SERIES**  

|  **nom de colonne**  |  **datatype**  | 
| --- | --- | 
|  identifiant\$1actif  |  chaîne  | 
|  identifiant\$1propriété  |  chaîne  | 
|  alias de propriété  |  chaîne  | 
|  event\$1timestamp  |  timestamp  | 
|  quality  |  chaîne  | 
|  valeur\$1booléenne  |  boolean  | 
|  int\$1value  |  entier  | 
|  valeur\$1double  |  double  | 
|  valeur\$1chaîne  |  chaîne  | 


**Voir : precomputed\$1aggregates**  

|  **nom de colonne**  |  **datatype**  | 
| --- | --- | 
|  identifiant\$1actif  |  chaîne  | 
|  identifiant\$1propriété  |  chaîne  | 
|  alias de propriété  |  chaîne  | 
|  event\$1timestamp  |  timestamp  | 
|  quality  |  chaîne  | 
|  resolution  |  chaîne  | 
|  valeur\$1somme  |  double  | 
|  valeur\$1comptage  |  entier  | 
|  valeur\$1moyenne  |  double  | 
|  valeur\$1maximale  |  double  | 
|  valeur\$1minimale  |  double  | 
|  stdev\$1value  |  double  | 

# Types de données pris en charge
<a name="supported-data-types"></a>

AWS IoT SiteWise le langage de requête prend en charge les types de données suivants.


**Valeur scalaire**  

|  **Type de données**  |  **Description**  | 
| --- | --- | 
|  `STRING`  |  Chaîne d'une longueur maximale de 1024 octets.  | 
|  `INTEGER`  |  Un entier signé de 32 bits dont la plage est comprise `-2,147,483,648 to 2,147,483,647` entre.  | 
|  `DOUBLE`  |  Nombre à virgule flottante dont la plage `–10^100 to 10^100` est comprise entre ou `Nan` avec une `IEEE 754` double précision.  | 
|  `BOOLEAN`  |  `true` ou `false`.  | 
|  `TIMESTAMP`  |  Horodatages conformes à la norme ISO-8601 : [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/iot-sitewise/latest/userguide/supported-data-types.html)  | 

**Note**  
`Null`: booléen `true` indiquant l'absence de données définies.

**Example**  
`TIMESTAMP`exemples de valeur :  

```
TIMESTAMP '2025-12-21 23:59:59.999Z'
TIMESTAMP '2025-12-21 23:59:59+23:59'
'2025-12-21 23:59:59'
'2025-12-21T23:59:59.123+11:11'
```

**Note**  
 Les données de double précision ne sont pas exactes. Certaines valeurs ne sont pas converties exactement et ne représenteront pas tous les nombres réels en raison d'une précision limitée. Les données à virgule flottante de la requête peuvent ne pas avoir la même valeur que celle représentée en interne. La valeur est arrondie si la précision d'un nombre saisi est trop élevée. 

# Clauses prises en charge
<a name="supported-clauses"></a>

L'`SELECT`instruction est utilisée pour récupérer des données à partir d'une ou de plusieurs vues. AWS IoT SiteWise soutient les `INNER JOIN` opérations `JOIN` et.

Les vues sont jointes à l'aide d'une `JOIN` syntaxe explicite ou de notations séparées par des virgules dans la clause. `FROM`

**Example**  
Une `SELECT` déclaration générale :  

```
SELECT expression [, ...]
  [ FROM table_name AS alias [, ...] ]
  [ WHERE condition ]
  [ GROUP BY expression [, ...] ]
  [ HAVING condition ]
  [ ORDER BY expression [ ASC | DESC ] [ NULLS FIRST | NULLS LAST ] [, ...] ]
  [ LIMIT expression ]
```

**Example**  
Une instruction SELECT avec les différentes clauses :  

```
SELECT
  a.asset_name,
  a.asset_id,
  p.property_type,
  p.property_data_type,
  p.string_attribute_value,
  p.property_name
FROM asset a, asset_property p
WHERE a.asset_description LIKE '%description%'
AND p.property_type IN ('attribute', 'metric')
OR p.property_id IN (
  SELECT property_id
  FROM raw_time_series
  WHERE event_timestamp BETWEEN TIMESTAMP '2025-01-01 00:00:00' AND TIMESTAMP '2025-01-02 00:00:00'
  GROUP BY asset_id, property_id
  HAVING COUNT(*) > 100
 )
GROUP BY p.property_type
HAVING COUNT(*) > 5
ORDER BY a.asset_name ASC
LIMIT 20;
```

**Note**  
 Un implicite `JOIN` combine deux ou plusieurs tables différentes sans utiliser le `JOIN` mot clé basé sur AWS IoT SiteWise le schéma interne. Cela revient à exécuter un champ `JOIN` sur les `property_id` champs `asset_id` et entre les métadonnées et les tables de données brutes. Ce modèle permet de SiteWise tirer parti de n'importe quel filtre de métadonnées dans la requête, lors de l'extraction à partir de tables de données brutes, de manière à réduire le volume global des données numérisées.   

**Example d'une requête :**  

```
SELECT a.asset_name, p.property_name, r.event_timestamp
FROM asset a, asset_property p, raw_time_series r
WHERE a.asset_name='my_asset' AND p.property_name='my_property'
```
L'exemple ci-dessus analyse uniquement les données de la propriété de l'actif appartenant aux noms de métadonnées spécifiés.  

**Example d'un équivalent moins optimisé de la requête ci-dessus :**  

```
SELECT a.asset_name, p.property_name, r.event_timestamp
FROM asset a
JOIN asset_property p ON a.asset_id=p.asset_id
JOIN raw_time_series r ON p.asset_id=r.asset_id AND p.property_id=r.property_id
WHERE a.asset_name='my_asset' AND p.property_name='my_property'
```

Vous trouverez ci-dessous une explication de chaque clause et sa description :


|  **Clause**  |  **Signature**  |  **Description**  | 
| --- | --- | --- | 
|  `LIMIT`  |  <pre>LIMIT { count }</pre>  |  Cette clause limite le jeu de résultats au nombre de lignes spécifié. Vous pouvez utiliser `LIMIT` avec ou sans `OFFSET` clauses `ORDER BY` et. `LIMIT`ne fonctionne qu'avec des entiers non négatifs de [0,2147483647].  | 
|  `ORDER BY`  |  <pre>ORDER BY expression<br />[ ASC | DESC ]<br />[ NULLS FIRST | NULLS LAST ] <br /></pre>  |  La `ORDER BY` clause trie le jeu de résultats d'une requête.   Lorsque vous faites référence à des colonnes sélectionnées dans une agrégation dans la `ORDER BY` clause, utilisez l'index ordinal de la colonne plutôt que le nom ou l'alias.  <pre>SELECT AVG(t.double_value)<br />FROM latest_value_time_series t<br />GROUP BY t.asset_id<br />ORDER BY 1</pre>   | 
|  `GROUP BY`  |  <pre>GROUP BY expression [, ...]</pre>  |  La `GROUP BY` clause identifie les colonnes de regroupement pour la requête. Il est utilisé conjointement avec une expression agrégée.  | 
|  `HAVING`  |  <pre>HAVING boolean-expression</pre>  |  La `HAVING` clause filtre les lignes de groupe créées par la clause GROUP BY.  | 
|  `SUB SELECT`  |  <pre>SELECT column1, column2<br />FROM table1<br />WHERE column3 IN (SELECT column4 FROM table2);<br /></pre>  |  Une `SELECT` déclaration intégrée dans une autre `SELECT` déclaration.  | 
|  `JOIN`  |  <pre>SELECT column1, column2<br />FROM table1 JOIN table2<br />ON table1.column1 = table2.column1;<br /></pre>  | 
|  `INNER JOIN`  |  <pre>SELECT columns<br />FROM table1<br />INNER JOIN table2 ON table1.column = table2.column;<br /></pre>  |  An `INNER JOIN` renvoie toutes les lignes des deux tables qui correspondent à la condition de jointure.  | 
|  `UNION`  |  <pre>query<br />   { UNION [ ALL ] }<br />another_query<br /></pre>  |  L'`UNION`opérateur calcule l'union de ses deux arguments, en supprimant automatiquement les doublons du jeu de résultats.  | 

# Opérateurs logiques
<a name="sql-supported-logical"></a>

AWS IoT SiteWise prend en charge les opérateurs logiques suivants.


|  **Opérateur**  |  **Signature**  |  **Description**  | 
| --- | --- | --- | 
|  `AND`  |  un `AND` b  |  `TRUE`si les deux valeurs sont vraies  | 
|  `OR`  |  un `OR` b  |  `TRUE`si une valeur est vraie  | 
|  `NOT`  |  `NOT`expression  |  `TRUE`si une expression est fausse et `FALSE` si une expression est vraie  | 
|  `IN`  |  `IN`expression x  |  `TRUE`si la valeur est dans l'expression  | 
|  `BETWEEN`  |  `BETWEEN`un `AND` b  |  `TRUE`si la valeur est comprise entre les limites supérieure et inférieure, et inclut les deux limites  | 
|  `LIKE`  |  `LIKE`motif  |  `TRUE`si la valeur est dans le modèle `LIKE`prend en charge les caractères génériques. Voir les exemples ci-dessous : [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/iot-sitewise/latest/userguide/sql-supported-logical.html)  | 

Exemples de tous les opérateurs logiques :


|  **Fonction**  |  **Exemple**  | 
| --- | --- | 
|  AND  |  <pre>SELECT a.asset_name <br />   FROM asset AS a, latest_value_time_series AS t <br />   WHERE t.int_value > 30 AND t.event_timestamp > TIMESTAMP '2025-05-15 00:00:01'<br /></pre>  | 
|  OU  |  <pre>SELECT a.asset_name <br />   FROM asset AS a<br />   WHERE a.asset_name like 'abc' OR a.asset_name like 'pqr'<br /></pre>  | 
|  NOT  |  <pre>SELECT ma.asset_id AS a_id<br />   FROM asset AS ma<br />   WHERE (ma.asset_id NOT LIKE 'some%patterna%' escape 'a') AND ma.asset_id='abc'<br /></pre>  | 
|  IN  |  <pre>SELECT a.asset_name <br />   FROM asset AS a<br />   WHERE a.asset_name IN ('abc', 'pqr')<br /></pre>  | 
|  BETWEEN  |  <pre>SELECT asset_id, int_value, event_timestamp AS i_v <br />   FROM raw_time_series<br />   WHERE event_timestamp BETWEEN TIMESTAMP '2025-04-15 00:00:01' and TIMESTAMP '2025-05-15 00:00:01'  <br /></pre>  | 
|  LIKE  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/iot-sitewise/latest/userguide/sql-supported-logical.html)  | 

# Opérateurs de comparaison
<a name="sql-supported-comparision"></a>

AWS IoT SiteWise prend en charge les opérateurs de comparaison suivants. Toutes les opérations de comparaison sont disponibles pour les types de données intégrés et sont évaluées selon un booléen.


**Opérateurs logiques**  

|  **Opérateur**  |  **Description**  | 
| --- | --- | 
|  `<`  |  Inférieur à  | 
|  `>`  |  Supérieur à  | 
|  `<=`  |  Inférieur ou égal à  | 
|  `>=`  |  Supérieur ou égal à  | 
|  `=`  |  Égal à  | 
|  `!=`  |  Non égal à  | 


**Table de vérité des opérations de comparaison pour les valeurs non numériques**  

|  **Type**  |  **Tapez >= x**  |  **Type <= x**  |  **Tapez > x**  |  **Type < x**  |  **Type = x**  |  **Tapez \$1 = x**  | 
| --- | --- | --- | --- | --- | --- | --- | 
|  `NULL`  |  `FALSE`  |  `FALSE`  |  `FALSE`  |  `FALSE`  |  `FALSE`  |  `TRUE`  | 

Certains prédicats se comportent comme des opérateurs mais ont une syntaxe spéciale. Voir ci-dessous :


**Prédicats de comparaison**  

|  **Opérateur**  |  **Description**  | 
| --- | --- | 
|  `IS NULL`  |  Teste si une valeur est`NULL`.  | 
|  `IS NOT NULL`  |  Teste si une valeur ne l'est pas`NULL`.  | 

## Opérateurs NaN
<a name="sql-supported-comparision-nan"></a>

 `NaN`, ou « Pas un nombre », est une valeur spéciale en arithmétique à virgule flottante. Voici une liste de `NaN` comparaisons et leur fonctionnement. 
+ `NaN`les valeurs doivent être placées entre guillemets simples. Par exemple, « `NaN` ».
+ `NaN`les valeurs sont considérées comme égales les unes aux autres.
+ `NaN`est supérieur aux autres valeurs numériques.
+ Dans les fonctions d'agrégation telles que `AVG()` `STDDEV()``SUM()`, et, si des valeurs le sont`NaN`, le résultat est`NaN`. 
+ Dans les fonctions d'agrégation telles que `MAX()` et`MIN()`, les `NaN` valeurs sont incluses dans les calculs.


**Comparaisons de valeurs NaN**  

|  **Comparison (Comparaison)**  |  **Result**  | 
| --- | --- | 
|  `'NaN' ≥ x`  |  True  | 
|  `'NaN' ≤ x`  |  Vrai si x est égal à NaN, False sinon  | 
|  `'NaN' > x`  |  Faux si x est égal à NaN, True dans le cas contraire  | 
|  `'NaN' < x`  |  False  | 
|  `'NaN' = x`  |  Vrai si x est égal à NaN, False sinon  | 
|  `'NaN' != x`  |  Faux si x est égal à NaN, True dans le cas contraire  | 

# Fonctions SQL
<a name="sql-functions"></a>

 Les groupes de fonctions pris en charge sont les suivants : 

**Topics**
+ [Fonctions scalaires](sql-functions-scalar.md)
+ [Fonctions d’agrégation](sql-functions-aggregated.md)

# Fonctions scalaires
<a name="sql-functions-scalar"></a>

 Les fonctions scalaires prennent une ou plusieurs valeurs d'entrée et renvoient une seule valeur de sortie. Ils sont largement utilisés dans le langage SQL (Structured Query Language) pour la manipulation et la récupération de données, améliorant ainsi l'efficacité des tâches de traitement des données. 

**Topics**
+ [Fonctions de données nulles](sql-functions-null.md)
+ [Fonctions de chaîne](sql-functions-string.md)
+ [Fonctions mathématiques](sql-functions-math.md)
+ [Fonctions de date et d'heure](sql-functions-date.md)
+ [Fonctions de conversion de type](sql-functions-type-conv.md)

# Fonctions de données nulles
<a name="sql-functions-null"></a>

 Les fonctions de données nulles gèrent ou manipulent les valeurs NULL, qui représentent l'absence de valeur. Les fonctions vous permettent de les NULLs remplacer par d'autres valeurs, de vérifier si une valeur est NULL ou d'effectuer des opérations qui sont NULLs gérées d'une manière spécifique. 


|  **Fonction**  |  **Signature**  |  **Description**  | 
| --- | --- | --- | 
|  `COALESCE`  |   COALESCE (expression1, expression2,..., expressionN)   |  Si toutes les expressions sont nulles, COALESCE renvoie la valeur null. Les expressions doivent être du même type.  | 

**Example d'une fonction COALESCE**  

```
SELECT COALESCE (l.double_value, 100) AS non_double_value FROM latest_value_time_series AS l LIMIT 1
```

# Fonctions de chaîne
<a name="sql-functions-string"></a>

 Les fonctions de chaîne sont des outils intégrés utilisés pour manipuler et traiter des données de texte. Ils permettent des tâches telles que la concaténation, l'extraction, le formatage et la recherche dans des chaînes. Ces fonctions sont essentielles pour nettoyer, transformer et analyser les données textuelles d'une base de données. 


**Fonctions de chaîne**  

|  **Fonction**  |  **Signature**  |  **Description**  | 
| --- | --- | --- | 
|  `LENGTH`  |   LONGUEUR (chaîne)   |  Renvoie la longueur de la chaîne.  | 
|  `CONCAT`  |   CONCAT (chaîne, chaîne)   |  Concatène les arguments dans une chaîne.  | 
|  `SUBSTR`  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/iot-sitewise/latest/userguide/sql-functions-string.html)  |  Renvoie l'une des valeurs suivantes : [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/iot-sitewise/latest/userguide/sql-functions-string.html) Utilise une indexation basée sur 1 pour le paramètre de départ.  | 
|  `UPPER`  |   UPPER (chaîne)   |  Convertit les caractères de la chaîne d'entrée en majuscules.  | 
|  `LOWER`  |   LOWER (chaîne)   |  Convertit les caractères de la chaîne d'entrée en minuscules.  | 
|  `TRIM`  |   TRIM (chaîne)   |  Supprime les espaces du début, de la fin ou des deux côtés de la chaîne.  | 
|  `LTRIM`  |   LTRIM (chaîne)   |  Supprime les espaces au début de la chaîne.  | 
|  `RTRIM`  |   RTRIM (chaîne)   |  Supprime les espaces situés à la fin de la chaîne.  | 
|  `STR_REPLACE`  |   STR\$1REPLACE (chaîne, de, à)   |  Remplace toutes les occurrences de la sous-chaîne spécifiée par une autre sous-chaîne spécifiée.  | 

Exemples de toutes les fonctions :


|  **Fonction**  |  **Exemple**  | 
| --- | --- | 
|  LENGTH  |  `SELECT LENGTH(a.asset_id) AS asset_id_length FROM asset AS a`  | 
|  CONCAT  |   `SELECT CONCAT(p.property_id, p.property_name) FROM asset_property AS p`   | 
|  SUBSTR  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/iot-sitewise/latest/userguide/sql-functions-string.html)  | 
|  UPPER  |   `SELECT UPPER(d.string_value) AS up_string FROM raw_time_series AS d`   | 
|  LOWER  |   `SELECT LOWER(d.string_value) AS low_string FROM raw_time_series AS d`   | 
|  TRIM  |   `SELECT TRIM(d.string_value) AS tm_string FROM raw_time_series AS d`   | 
|  LTRIM  |   `SELECT LTRIM(d.string_value) AS ltrim_string FROM raw_time_series AS d`   | 
|  RTRIM  |   `SELECT RTRIM(d.string_value) AS rtrim_string FROM raw_time_series AS d`   | 
|  STR\$1REPLACE  |   `SELECT STR_REPLACE(d.string_value, 'abc', 'def') AS replaced_string FROM raw_time_series AS d`   | 

## Opérateur de concaténation
<a name="sql-operators-concatenation"></a>

 L'opérateur de concaténation`||`, ou opérateur de canal, joint deux chaînes. Elle fournit une alternative à la `CONCAT` fonction et est plus lisible lors de la combinaison de plusieurs chaînes.

**Example de l'opérateur de concaténation**  

```
SELECT a.asset_name || ' - ' || p.property_name 
  AS full_name
  FROM asset a, asset_property p
```

# Fonctions mathématiques
<a name="sql-functions-math"></a>

 Les fonctions mathématiques sont des opérations mathématiques prédéfinies utilisées dans les requêtes SQL pour effectuer des calculs sur des données numériques. Ils permettent de manipuler et de transformer les données sans avoir à les extraire de la base de données et à les traiter séparément. 


**Fonctions mathématiques**  

|  **Fonction**  |  **Signature**  |  **Description**  | 
| --- | --- | --- | 
|  `POWER`  |  PUISSANCE (int\$1double, int\$1double)  |  Renvoie la valeur du premier argument augmentée à la puissance du second argument.  | 
|  `ROUND`  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/iot-sitewise/latest/userguide/sql-functions-math.html)  |  Arrondit à l'entier le plus proche.  | 
|  `FLOOR`  |   ÉTAGE (int\$1double)   |  Renvoie le plus grand entier ne dépassant pas la valeur donnée.  | 

Exemples de toutes les fonctions :


|  **Fonction**  |  **Exemple**  | 
| --- | --- | 
|  POWER  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/iot-sitewise/latest/userguide/sql-functions-math.html)  | 
|  ROUND  |   `ROUND (32.12435, 3)`   | 
|  FLOOR  |   `FLOOR (21.2)`   | 

# Fonctions de date et d'heure
<a name="sql-functions-date"></a>

 Les fonctions de date et d'heure fonctionnent avec les dates et les heures. Ces fonctions permettent d'extraire des composants spécifiques d'une date, d'effectuer des calculs et de manipuler les valeurs de date.

Les identifiants autorisés dans ces fonctions sont les suivants :
+ YEAR
+ MONTH
+ DAY
+ HOUR
+ MINUTE
+ SECOND


|  **Fonction**  |  **Signature**  |  **Description**  | 
| --- | --- | --- | 
|  `NOW`  |   MAINTENANT ()   |  Renvoie l'horodatage actuel avec une précision de la milliseconde. Il fournit l'heure exacte à laquelle il est exécuté dans une requête.  | 
|  `DATE_ADD`  |  DATE\$1ADD (identifiant, durée de l'intervalle, colonne)  |  Renvoie la somme de a date/time et d'un nombre d'days/hours, or of a date/time and date/timeintervalles.  | 
|  `DATE_SUB`  |  DATE\$1SUB (identifiant, durée de l'intervalle, colonne)  |  Renvoie la différence entre un date/time et un certain nombre d'days/hours, or between a date/time and date/timeintervalles.  | 
|  `TIMESTAMP_ADD`  |  TIMESTAMP\$1ADD (identifiant, durée de l'intervalle, colonne)  |  Ajoute un intervalle de temps, dans les unités de temps données, à une expression datetime.  | 
|  `TIMESTAMP_SUB`  |  TIMESTAMP\$1SUB (identifiant, durée de l'intervalle, colonne)  |  Soustrait un intervalle de temps, dans les unités de temps données, d'une expression datetime.  | 
|  `CAST`  |  CAST (modèle d'expression AS TIMESTAMP FORMAT)  |  Convertit une expression de chaîne en horodatage en utilisant le modèle de format spécifié. Les modèles courants incluent `'yyyy-MM-dd HH:mm:ss'` le format date/heure standard. Par exemple, `SELECT CAST('2023-12-25 14:30:00' AS TIMESTAMP) AS converted_timestamp`  | 

**Example d'une requête SQL utilisant les fonctions répertoriées :**  

```
SELECT r.asset_id, r.int_value,
  date_add(DAY, 7, r.event_timestamp) AS date_in_future,
  date_sub(YEAR, 2, r.event_timestamp) AS date_in_past,
  timestamp_add(DAY, 2, r.event_timestamp) AS timestamp_in_future,
  timestamp_sub(DAY, 2, r.event_timestamp) AS timestamp_in_past,
  now() AS time_now
FROM raw_time_series AS r
```

# Fonctions de conversion de type
<a name="sql-functions-type-conv"></a>

 Les fonctions de conversion de type sont utilisées pour changer le type de données d'une valeur de l'un à l'autre. Ils sont essentiels pour garantir la compatibilité des données et effectuer des opérations nécessitant des données dans un format spécifique. 


|  **Fonction**  |  **Signature**  |  **Description**  | 
| --- | --- | --- | 
|  `TO_DATE`  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/iot-sitewise/latest/userguide/sql-functions-type-conv.html)  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/iot-sitewise/latest/userguide/sql-functions-type-conv.html)  | 
|  `TO_TIMESTAMP`  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/iot-sitewise/latest/userguide/sql-functions-type-conv.html)  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/iot-sitewise/latest/userguide/sql-functions-type-conv.html)  | 
|  `TO_TIME`  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/iot-sitewise/latest/userguide/sql-functions-type-conv.html)  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/iot-sitewise/latest/userguide/sql-functions-type-conv.html)  | 
|  `CAST`  |  CASTING (<expression>AS<data type>)  |  Convertit une entité, ou une expression qui donne une valeur unique, d'un type à un autre. Les types de données pris en charge sont : [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/iot-sitewise/latest/userguide/sql-functions-type-conv.html)  | 

**Example d'une requête SQL utilisant les fonctions répertoriées :**  

```
SELECT TO_TIMESTAMP (100) AS timestamp_value,
  TO_DATE(r.event_timestamp) AS date_value,
  TO_TIME(r.event_timestamp) AS time_value
FROM raw_time_series AS r
```

# Fonctions d’agrégation
<a name="sql-functions-aggregated"></a>

 Les fonctions d'agrégation sont des opérations de base de données qui effectuent des calculs sur plusieurs lignes de données afin de produire un seul résultat résumé. Ces fonctions analysent les ensembles de données pour renvoyer des valeurs calculées telles que des sommes, des moyennes, des dénombrements ou d'autres mesures statistiques. 


|  **Fonction**  |  **Signature**  |  **Description**  | 
| --- | --- | --- | 
|  `AVG`  |  AVG (expression)  |  Renvoie la moyenne d'une expression numérique.  | 
|  `COUNT`  |  NOMBRE (expression)  |  Renvoie le nombre de lignes correspondant aux critères donnés.  | 
|  `MAX`  |  MAX (expression)  |  Renvoie la plus grande valeur des expressions sélectionnées.  | 
|  `MIN`  |  MIN (expression)  |  Renvoie la plus petite valeur des expressions sélectionnées.  | 
|  `SUM`  |  SOMME (expression)  |  Renvoie la somme d'une expression numérique.  | 
|  `STDDEV`  |  STDDEV (expression)  |  Renvoie l'écart type de l'échantillon.  | 
|  `GROUP BY`  |  GROUPER PAR expression  |  Renvoie une ligne créée par les colonnes de regroupement.  | 
|  `HAVING`  |  AYANT une expression booléenne  |  Renvoie les lignes du groupe filtrées par `GROUP BY` clause.  | 

Exemples de toutes les fonctions :


|  **Fonction**  |  **Exemple**  | 
| --- | --- | 
|  AVG  |  <pre>SELECT d.asset_id, d.property_id, AVG(d.int_value) FROM raw_time_series AS d</pre>  | 
|  COUNT  |  <pre>SELECT COUNT(d.int_value) FROM raw_time_series AS d</pre>  | 
|  MAX  |  <pre>SELECT MAX(d.int_value) FROM raw_time_series AS d</pre>  | 
|  MIN  |  <pre>SELECT MIN(d.int_value) FROM raw_time_series AS d</pre>  | 
|  SUM  |  <pre>SELECT SUM(d.int_value) FROM raw_time_series AS d</pre>  | 
|  STDDEV  |  <pre>SELECT STDDEV(d.int_value) FROM raw_time_series AS d</pre>  | 
|  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/iot-sitewise/latest/userguide/sql-functions-aggregated.html)  |  <pre>SELECT MAX(d.int_value) AS max_int_value, d.asset_id <br />FROM raw_time_series AS d <br />GROUP BY d.asset_id <br />HAVING MAX(d.int_value) > 5                      <br /></pre>  | 

# Exemples de requêtes
<a name="sql-examples"></a>

## Filtrage de métadonnées
<a name="sql-examples-meta-filter"></a>

L'exemple suivant concerne le filtrage des métadonnées avec une `SELECT` instruction contenant le langage de AWS IoT SiteWise requête :

```
SELECT a.asset_name, p.property_name
FROM asset a, asset_property p
WHERE a.asset_name LIKE 'Windmill%'
```

## Filtrage des valeurs
<a name="sql-examples-value-filter"></a>

Voici un exemple de filtrage de valeurs à l'aide d'une `SELECT` instruction utilisant le langage de AWS IoT SiteWise requête :

```
SELECT a.asset_name, r.int_value
FROM asset a, raw_time_series r
WHERE r.int_value > 30
AND r.event_timestamp > TIMESTAMP '2022-01-05 12:15:00'
AND r.event_timestamp < TIMESTAMP '2022-01-05 12:20:00'
```

# Optimisation des requêtes
<a name="query-optimize"></a>

## Filtres de métadonnées
<a name="metadata-filters"></a>

Lorsque vous interrogez des métadonnées ou des données brutes, utilisez la `WHERE` clause pour filtrer par champs de métadonnées afin de réduire la quantité de données numérisées. Utilisez les opérateurs suivants pour limiter l'analyse des métadonnées :
+ Est égal à (=)
+ N'est pas égal à (\$1 =)
+ LIKE
+ IN
+ AND
+ OU

Pour les propriétés des attributs, utilisez les champs suivants pour filtrer les résultats. :
+ `double_attribute_value`
+ `int_attribute_value`
+ `boolean_attribute_value`
+ `string_attribute_value`

Ces champs offrent de meilleures performances que la table **latest\$1value\$1time\$1series** pour les propriétés des actifs de type attribut.

**Note**  
Utilisez des littéraux sur le côté droit des opérateurs pour limiter correctement l'analyse des données. Par exemple, la requête suivante est moins performante que l'utilisation d'une chaîne littérale stricte :  

```
SELECT property_id FROM asset_property WHERE property_name = CONCAT('my', 'property')
```

**Example pour les filtres de métadonnées :**  

```
SELECT p.property_name FROM asset_property p
WHERE p.property_type = 'attribute' AND p.string_attribute_value LIKE 'my-property-%'
```

## Filtres de données brutes
<a name="raw-data-filters"></a>

**Toutes les tables de données brutes (**raw\$1time\$1series, latest\$1value\$1time\$1series, precomputed\$1aggregates****) ont des horodatages associés à leurs lignes**.** Outre les filtres de métadonnées, utilisez des filtres de `WHERE` clauses sur le `event_timestamp` terrain pour réduire la quantité de données numérisées. Utilisez les opérations suivantes pour limiter l'analyse des données brutes :
+ Est égal à (=)
+ supérieure à (>)
+ Inférieur à (<)
+ Supérieur ou égal à (>=)
+ Inférieur ou égal à (<=)
+ BETWEEN
+ AND

**Exemples de filtres** :
+  Lorsque vous interrogez la table **precomputed\$1aggregates**, spécifiez toujours un filtre de qualité dans la clause. `WHERE` Cela réduit la quantité de données que la requête analyse, en particulier si vous recherchez `BAD` des `UNCERTAIN` données. 

   **Nous vous recommandons également vivement d'utiliser un filtre de résolution (1 m, 15 m, 1 h ou 1d) lorsque vous interrogez la table precomputed\$1aggregates.** Si vous ne spécifiez pas de filtre de résolution, le tableau AWS IoT SiteWise sera analysé par défaut dans son intégralité pour toutes les résolutions, ce qui est inefficace. 
+  Lorsque vous interrogez des données brutes, les fonctions d'horodatage peuvent également être utilisées dans la `WHERE` clause pour filtrer la quantité de données numérisées. Par exemple, la requête suivante analyse uniquement les 30 dernières minutes de données de la table **raw\$1time\$1series** : 

  ```
  SELECT r.event_timestamp, r.double_value
  FROM raw_time_series r
  WHERE r.event_timestamp > TIMESTAMP_SUB(MINUTE, 30, NOW())
  ```

**Note**  
Ce n'est pas égal `(!=)` et `OR` les opérateurs n'appliquent généralement pas de filtres significatifs à l'analyse des données brutes. Les filtres sur les valeurs des données brutes (string\$1value, double\$1value, etc.) ne limitent pas non plus l'analyse des données brutes.

## Optimisation JOIN
<a name="join-optimization"></a>

AWS IoT SiteWise SQL prend en charge le `JOIN` mot clé permettant de fusionner deux tables. Seuls `JOIN` les filtres actifs sur un champ (à l'aide du `ON` mot clé) sont pris en charge. Les jointures cartésiennes complètes sont interdites.

AWS IoT SiteWise prend également en charge les `JOIN` s implicites sans utiliser le `JOIN` mot clé. Elles sont autorisées entre différentes tables de métadonnées et entre une table de métadonnées et une table brute. Par exemple, cette requête :

```
SELECT a.asset_name, p.property_name FROM asset a, asset_property p
```

Fonctionne mieux que cette requête équivalente :

```
SELECT a.asset_name, p.property_name FROM asset a
JOIN asset_property p ON a.asset_id = p.asset_id
```

Les jointures implicites suivantes sont autorisées (O est autorisé, X est interdit) :


|  | asset | propriété\$1actif | dernière\$1value\$1time\$1series | Série Raw\$1Time | agrégats\$1précalculés | sous-requête | 
| --- | --- | --- | --- | --- | --- | --- | 
| asset | X | O | O | O | O | X | 
| propriété\$1actif | O | X | O | O | O | X | 
| dernière\$1value\$1time\$1series | O | O | X | X | X | X | 
| Série Raw\$1Time | O | O | X | X | X | X | 
| agrégats\$1précalculés | O | O | X | X | X | X | 
| sous-requête | X | X | X | X | X | X | 

Utilisez des `JOIN` s implicites dans la mesure du possible. Si vous devez utiliser le `JOIN` mot clé, appliquez des filtres sur les différentes tables `JOIN` rouges afin de minimiser les données numérisées. Par exemple, au lieu de cette requête :

```
SELECT level1.asset_id, level2.asset_id, level3.asset_id
FROM asset AS level1
JOIN asset AS level2 ON level2.parent_asset_id = level1.asset_id
JOIN asset AS level3 ON level3.parent_asset_id = level2.asset_id
WHERE level1.asset_name LIKE 'level1%'
AND level2.asset_name LIKE 'level2%'
AND level3.asset_name LIKE 'level3%'
```

Utilisez cette requête plus efficace :

```
SELECT level1.asset_id, level2.asset_id, level3.asset_id
FROM asset AS level1
JOIN (SELECT asset_id, parent_asset_id FROM asset WHERE asset_name LIKE 'level2%') AS level2 ON level2.parent_asset_id = level1.asset_id
JOIN (SELECT asset_id, parent_asset_id FROM asset WHERE asset_name LIKE 'level3%') AS level3 ON level3.parent_asset_id = level2.asset_id
WHERE level1.asset_name LIKE 'level1%'
```

En insérant des filtres de métadonnées dans les sous-requêtes, vous vous assurez que les tables individuelles du `JOIN` s sont filtrées pendant le processus de numérisation. Vous pouvez également utiliser le `LIMIT` mot clé dans les sous-requêtes pour obtenir le même effet.

## Requêtes volumineuses
<a name="large-queries"></a>

Pour les requêtes qui produisent plus de lignes que la valeur par défaut, définissez la taille de page de l'[ExecuteQuery](https://docs.aws.amazon.com/iot-sitewise/latest/APIReference/API_ExecuteQuery.html)API sur la valeur maximale de 20 000. Cela améliore les performances globales des requêtes.

Utilisez la `LIMIT` clause pour réduire la quantité de données numérisées pour certaines requêtes. Notez que les fonctions d'agrégation et certaines clauses à l'échelle du tableau (`GROUP BY``ORDER BY`,,`JOIN`) nécessitent une analyse complète avant d'appliquer la `LIMIT` clause.

**Note**  
 AWS IoT SiteWise peut scanner un minimum de données même si la `LIMIT` clause est appliquée, en particulier pour les requêtes de données brutes qui analysent plusieurs propriétés. 

# ODBC
<a name="query-ODBC"></a>

Le [pilote ODBC](https://github.com/awslabs/aws-iotsitewise-odbc-driver) open source AWS IoT SiteWise fournit une interface SQL relationnelle aux développeurs et permet la connectivité AWS IoT SiteWise à partir d'outils de business intelligence (BI) tels que Power BI Desktop et Microsoft Excel. Le pilote AWS IoT SiteWise ODBC est actuellement disponible [sous Windows](https://github.com/awslabs/aws-iotsitewise-odbc-driver/releases) et prend en charge le SSO avec Okta et Microsoft Azure Active Directory (AD).

Pour plus d'informations, consultez la [documentation du pilote AWS IoT SiteWise ODBC sur GitHub](https://github.com/awslabs/aws-iotsitewise-odbc-driver/blob/main/docs/markdown/index.md).

**Topics**
+ [Syntaxe et options de la chaîne de connexion pour le pilote ODBC](query-ODBC-connecting.md)
+ [Exemples de chaînes de connexion pour le AWS IoT SiteWise pilote ODBC](query-ODBC-connecting-examples.md)
+ [Résolution des problèmes de connexion avec le pilote ODBC](query-ODBC-connecting-troubleshooting.md)

# Syntaxe et options de la chaîne de connexion pour le pilote ODBC
<a name="query-ODBC-connecting"></a>

La syntaxe permettant de spécifier les options de chaîne de connexion pour le pilote ODBC est la suivante :

```
Driver={AWS IoT SiteWise ODBC Driver};(option)=(value);
```

Les options disponibles sont les suivantes :

**Options de connexion du pilote**
+ **`Driver`***(obligatoire)* — Le pilote utilisé avec ODBC.

  La valeur par défaut est AWS IoT SiteWise.
+ **`DSN`**— Le nom de la source de données (DSN) à utiliser pour configurer la connexion.

  La valeur par défaut est `NONE`.
+ **`Auth`**— Le mode d'authentification. Il doit s'agir de l'une des options suivantes :
  + `AWS_PROFILE`— Utilisez la chaîne d'informations d'identification par défaut.
  + `IAM`— Utilisez les informations d'identification AWS IAM.
  + `AAD`— Utilisez le fournisseur d'identité Azure Active Directory (AD).
  + `OKTA`— Utilisez le fournisseur d'identité Okta.

  La valeur par défaut est `AWS_PROFILE`.

**Options de configuration des terminaux**
+ **`EndpointOverride`**— La dérogation du point de terminaison pour le AWS IoT SiteWise service. Il s'agit d'une option avancée qui remplace la région. Par exemple :

  ```
  iotsitewise.us-east-1.amazonaws.com
  ```
+ **`Region`**— La région de signature du point de terminaison du AWS IoT SiteWise service.

  La valeur par défaut est `us-east-1`.

**Option de fournisseur d'informations d'identification**
+ **`ProfileName`**— Le nom du profil dans le fichier de AWS configuration.

  La valeur par défaut est `NONE`.

**AWS Options d'authentification IAM**
+ **`UID`**ou **`AccessKeyId`**— L'identifiant de la clé d'accès AWS utilisateur. Si `UID` les deux `AccessKeyId` sont fournis dans la chaîne de connexion, la `UID` valeur sera utilisée sauf si elle est vide.

  La valeur par défaut est `NONE`.
+ **`PWD`**ou **`SecretKey`**— La clé d'accès secrète de l'utilisateur AWS. Si `PWD` les deux `SecretKey` sont fournis dans la chaîne de connexion, la `PWD` valeur with sera utilisée sauf si elle est vide.

  La valeur par défaut est `NONE`.
+ **`SessionToken`**— Le jeton de session temporaire requis pour accéder à une base de données avec l'authentification multifactorielle (MFA) activée. N'incluez pas de traînée ` = ` dans l'entrée.

  La valeur par défaut est `NONE`.

**Options d'authentification basées sur SAML pour Okta**
+ **`IdPHost`**— Le nom d'hôte de l'IdP spécifié.

  La valeur par défaut est `NONE`.
+ **`UID`**ou **`IdPUserName`**— Le nom d'utilisateur du compte IdP spécifié. Si `UID` les deux `IdPUserName` sont fournis dans la chaîne de connexion, la `UID` valeur sera utilisée sauf si elle est vide.

  La valeur par défaut est `NONE`.
+ **`PWD`**ou **`IdPPassword`**— Le mot de passe du compte IdP spécifié. Si `PWD` les deux `IdPPassword` sont fournis dans la chaîne de connexion, la `PWD` valeur sera utilisée sauf si elle est vide.

  La valeur par défaut est `NONE`.
+ **`OktaApplicationID`**— L'identifiant unique fourni par Okta associé à l' AWS IoT SiteWise application. L'identifiant de l'application (AppId) se trouve dans le `entityID` champ fourni dans les métadonnées de l'application. Voici un exemple :

  ```
  entityID="http://www.okta.com//(IdPAppID)
  ```

  La valeur par défaut est `NONE`.
+ **`RoleARN`**— Le nom de ressource Amazon (ARN) du rôle assumé par l'appelant.

  La valeur par défaut est `NONE`.
+ **`IdPARN`**— Le nom de ressource Amazon (ARN) du fournisseur SAML dans IAM qui décrit l'IdP.

  La valeur par défaut est `NONE`.

**Options d'authentification basées sur SAML pour Azure Active Directory**
+ **`UID`**ou **`IdPUserName`**— Le nom d'utilisateur du compte IdP spécifié.

  La valeur par défaut est `NONE`.
+ **`PWD`**ou **`IdPPassword`**— Le mot de passe du compte IdP spécifié.

  La valeur par défaut est `NONE`.
+ **`AADApplicationID`**— L'identifiant unique de l'application enregistrée sur Azure AD.

  La valeur par défaut est `NONE`.
+ **`AADClientSecret`**— Le secret client associé à l'application enregistrée sur Azure AD est utilisé pour autoriser l'extraction de jetons.

  La valeur par défaut est `NONE`.
+ **`AADTenant`**— L'identifiant du locataire Azure AD.

  La valeur par défaut est `NONE`.
+ **`RoleARN`**— Le nom de ressource Amazon (ARN) du rôle assumé par l'appelant.

  La valeur par défaut est `NONE`.
+ **`IdPARN`**— Le nom de ressource Amazon (ARN) du fournisseur SAML dans IAM qui décrit l'IdP.

  La valeur par défaut est `NONE`.

**AWS Options du SDK (avancées)**
+ **`RequestTimeout`**— Durée en millisecondes pendant laquelle le AWS SDK attend une demande de requête avant d'expirer. Toute valeur non positive désactive le délai d'expiration de la demande.

  La valeur par défaut est `3000`.
+ **`ConnectionTimeout`**— Durée en millisecondes pendant laquelle le AWS SDK attend que les données soient transférées via une connexion ouverte avant d'expirer. La valeur 0 désactive le délai d'expiration de la connexion. Cette valeur ne doit pas être négative.

  La valeur par défaut est `1000`.
+ **`MaxRetryCountClient`**— Le nombre maximal de tentatives pour les erreurs réessayables avec 5xx codes d'erreur dans le SDK. La valeur ne doit pas être négative.

  La valeur par défaut est `0`.
+ **`MaxConnections`**— Le nombre maximum de connexions HTTP ouvertes simultanément au AWS IoT SiteWise service. La valeur doit être positive.

  La valeur par défaut est `25`.

**Options de journalisation du pilote ODBC**
+ **`LogLevel`**— Le niveau de journalisation pour la journalisation du pilote. Doit être l'une des valeurs suivantes :
  + **0** (DÉSACTIVÉ).
  + **1** (ERREUR).
  + **2** (AVERTISSEMENT).
  + **3** (INFORMATIONS).
  + **4** (DÉBOGAGE).

  La valeur par défaut est `1` (ERROR).

  **Avertissement :** des informations personnelles peuvent être enregistrées par le pilote lors de l'utilisation du mode de journalisation DEBUG.
+ **`LogOutput`**— Dossier dans lequel enregistrer le fichier journal.

  La valeur par défaut est :
  + **Windows :**`%USERPROFILE%`, ou s'il n'est pas disponible,`%HOMEDRIVE%%HOMEPATH%`.
  + **macOS et Linux :** `$HOME` ou s'il n'est pas disponible, le champ `pw_dir` de la fonction `getpwuid(getuid())` renvoie la valeur.

**Options de journalisation du SDK**

Le niveau de journalisation du AWS SDK est distinct du niveau de journalisation du pilote AWS IoT SiteWise ODBC. Le réglage de l'un n'a aucune incidence sur l'autre.

Le niveau de journalisation du SDK est défini à l'aide de la variable `SW_AWS_LOG_LEVEL` d'environnement. Les valeurs valides sont :
+ `OFF`
+ `ERROR`
+ `WARN`
+ `INFO`
+ `DEBUG`
+ `TRACE`
+ `FATAL`

Si `SW_AWS_LOG_LEVEL` ce n'est pas le cas, le niveau de journalisation du SDK est défini sur la valeur par défaut, qui est`WARN`.

## Connexion via un proxy
<a name="query-ODBC-connecting-proxy"></a>

Le pilote ODBC prend en charge la connexion AWS IoT SiteWise via un proxy. Pour utiliser cette fonctionnalité, configurez les variables d'environnement suivantes en fonction des paramètres de votre proxy :
+ **`SW_PROXY_HOST`**— l'hôte proxy.
+ **`SW_PROXY_PORT`**— Le numéro de port du proxy.
+ **`SW_PROXY_SCHEME`**— Le schéma de proxy, `http` soit`https`.
+ **`SW_PROXY_USER`**— Le nom d'utilisateur pour l'authentification par proxy.
+ **`SW_PROXY_PASSWORD`**— Le mot de passe utilisateur pour l'authentification par proxy.
+ **`SW_PROXY_SSL_CERT_PATH`**— Le fichier de certificat SSL à utiliser pour se connecter à un proxy HTTPS.
+ **`SW_PROXY_SSL_CERT_TYPE`**— Type de certificat SSL du client proxy.
+ **`SW_PROXY_SSL_KEY_PATH`**— Le fichier de clé privée à utiliser pour se connecter à un proxy HTTPS.
+ **`SW_PROXY_SSL_KEY_TYPE`**— Type de fichier de clé privée utilisé pour se connecter à un proxy HTTPS.
+ **`SW_PROXY_SSL_KEY_PASSWORD`**— Phrase secrète du fichier de clé privée utilisé pour se connecter à un proxy HTTPS.

# Exemples de chaînes de connexion pour le AWS IoT SiteWise pilote ODBC
<a name="query-ODBC-connecting-examples"></a>

## Exemple de connexion au pilote ODBC avec des informations d'identification IAM
<a name="query-ODBC-connecting-examples-iam"></a>

```
Driver={AWS IoT SiteWise ODBC Driver};Auth=IAM;AccessKeyId=(your access key ID);SecretKey=(your secret key);SessionToken=(your session token);Region=us-east-1;
```

## Exemple de connexion au pilote ODBC avec un profil
<a name="query-ODBC-connecting-examples-profile"></a>

```
Driver={AWS IoT SiteWise ODBC Driver};ProfileName=(the profile name);region=us-east-1;
```

Le pilote tentera de se connecter en utilisant les informations d'identification fournies dans`~/.aws/credentials`, ou si un fichier est spécifié dans la variable d'environnement`AWS_SHARED_CREDENTIALS_FILE`, en utilisant les informations d'identification contenues dans ce fichier.

## Exemple de connexion au pilote ODBC avec Okta
<a name="query-ODBC-connecting-examples-okta"></a>

```
Driver={AWS IoT SiteWise ODBC Driver};Auth=OKTA;region=us-east-1;idPHost=(your host at Okta);idPUsername=(your user name);idPPassword=(your password);OktaApplicationID=(your Okta AppId);roleARN=(your role ARN);idPARN=(your Idp ARN);
```

## Exemple de connexion au pilote ODBC avec Azure Active Directory (AAD)
<a name="query-ODBC-connecting-examples-aad"></a>

```
Driver={AWS IoT SiteWise ODBC Driver};Auth=AAD;region=us-east-1;idPUsername=(your user name);idPPassword=(your password);aadApplicationID=(your AAD AppId);aadClientSecret=(your AAD client secret);aadTenant=(your AAD tenant);roleARN=(your role ARN);idPARN=(your idP ARN);
```

## Exemple de connexion au pilote ODBC avec un point de terminaison spécifié et un niveau de journalisation de 2 (AVERTISSEMENT)
<a name="query-ODBC-connecting-examples-okta"></a>

```
Driver={AWS IoT SiteWise ODBC Driver};Auth=IAM;AccessKeyId=(your access key ID);SecretKey=(your secret key);EndpointOverride=iotsitewise.us-east-1.amazonaws.com;Region=us-east-1;LogLevel=2;
```

# Résolution des problèmes de connexion avec le pilote ODBC
<a name="query-ODBC-connecting-troubleshooting"></a>

**Note**  
Si le nom d'utilisateur et le mot de passe sont déjà spécifiés dans le DSN, ne les spécifiez pas à nouveau lorsque le gestionnaire de pilotes ODBC les demande.

Un code d'erreur, `01S02` avec un message, `Re-writing (connection string option) (have you specified it several times?)` se produit lorsqu'une option de chaîne de connexion est passée plusieurs fois dans la chaîne de connexion. La spécification d'une option plusieurs fois génère une erreur. Lorsque vous établissez une connexion avec un DSN et une chaîne de connexion, si une option de connexion est déjà spécifiée dans le DSN, ne la spécifiez pas à nouveau dans la chaîne de connexion.