

Pour des fonctionnalités similaires à celles d'Amazon Timestream pour, pensez à Amazon Timestream LiveAnalytics pour InfluxDB. Il permet une ingestion simplifiée des données et des temps de réponse aux requêtes à un chiffre en millisecondes pour des analyses en temps réel. Pour en savoir plus, [cliquez ici](https://docs.aws.amazon.com//timestream/latest/developerguide/timestream-for-influxdb.html).

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.

# Référence du langage de requête
<a name="reference"></a>

**Note**  
Cette référence sur le langage de requête inclut la documentation tierce suivante de la [Trino Software Foundation](https://trino.io/foundation.html) (anciennement Presto Software Foundation), qui est sous licence Apache, version 2.0. Vous ne pouvez pas utiliser ce fichier si ce n'est conformément à cette licence. Pour obtenir une copie de la licence Apache, version 2.0, consultez le [site Web d'Apache](http://www.apache.org/licenses/LICENSE-2.0).

Timestream for LiveAnalytics prend en charge un langage de requête riche pour travailler avec vos données. Vous pouvez voir les types de données, les opérateurs, les fonctions et les constructions disponibles ci-dessous.

Vous pouvez également commencer immédiatement avec le langage de requête de Timestream dans la [Exemples de requêtes](sample-queries.md) section.

**Topics**
+ [

# Types de données pris en charge
](supported-data-types.md)
+ [

# Fonctionnalité de série chronologique intégrée
](timeseries-specific-constructs.md)
+ [

# Prise en charge de SQL
](supported-sql-constructs.md)
+ [

# Opérateurs logiques
](logical-operators.md)
+ [

# Opérateurs de comparaison
](comparison-operators.md)
+ [

# Fonctions de comparaison
](comparison-functions.md)
+ [

# Expressions conditionnelles
](conditional-expressions.md)
+ [

# Fonctions de conversion
](conversion-functions.md)
+ [

# Operateurs mathématiques
](mathematical-operators.md)
+ [

# Fonctions mathématiques
](mathematical-functions.md)
+ [

# Opérateurs de chaîne
](string-operators.md)
+ [

# Fonctions de chaîne
](string-functions.md)
+ [

# Opérateurs de réseaux
](array-operators.md)
+ [

# Fonctions de tableau
](array-functions.md)
+ [

# Fonctions bitwise
](bitwise-functions.md)
+ [

# Fonctions d'expression régulière
](regex-functions.md)
+ [

# Opérateurs de date et d'heure
](date-time-operators.md)
+ [

# Fonctions de date/heure
](date-time-functions.md)
+ [

# Fonctions d’agrégation
](aggregate-functions.md)
+ [

# Fonctions de fenêtrage
](window-functions.md)
+ [

# Exemples de requêtes
](sample-queries.md)

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

Le langage de requête LiveAnalytics de Timestream for prend en charge les types de données suivants.

**Note**  
Les types de données pris en charge pour les écritures sont décrits dans la section [Types de données](https://docs.aws.amazon.com/timestream/latest/developerguide/writes.html#writes.data-types).


| Type de données | Description | 
| --- | --- | 
|  `int`  |  Représente un entier de 32 bits.  | 
|  `bigint`  |  Représente un entier signé de 64 bits.  | 
|  `boolean`  |  L'une des deux valeurs de vérité de la logique, `True` et`False`.  | 
|  `double`  |  Représente un type de données à précision variable de 64 bits. Implémente la [norme IEEE 754 pour l'arithmétique binaire à virgule flottante](https://standards.ieee.org/standard/754-2019.html).  Le langage de requête est destiné à la lecture des données. Il existe des fonctions `Infinity` et des valeurs `NaN` doubles qui peuvent être utilisées dans les requêtes. Mais vous ne pouvez pas écrire ces valeurs dans Timestream.   | 
|  `varchar`  |  Données de caractères de longueur variable avec une taille maximale de 2 Ko.  | 
|  `array[T,...]`  |  Contient un ou plusieurs éléments d'un type de données spécifié*T*, y compris n'*T*importe lequel des types de données pris en charge dans Timestream.  | 
|   `row(T,...)`   |  Contient un ou plusieurs champs nommés de type de données*T*. Les champs peuvent être de n'importe quel type de données pris en charge par Timestream et sont accessibles à l'aide de l'opérateur de référence des champs à points : <pre>.</pre>  | 
|  `date`  |  Représente une date dans le formulaire`YYYY-MM-DD`. Où *YYYY* *MM* sont respectivement l'année, *DD* le mois et le jour. La plage prise en charge est comprise entre `1970-01-01` et`2262-04-11`.   *Exemple :*  <pre>1971-02-03</pre>  | 
|  `time`  |  Représente l'heure du jour en [UTC](https://en.wikipedia.org/wiki/Coordinated_Universal_Time). Le `time` type de données est représenté sous la forme `HH.MM.SS.sssssssss.` Supporte la précision à l'échelle de la nanoseconde.   *Exemple :*  <pre>17:02:07.496000000</pre>  | 
|  `timestamp`  |  Représente une instance dans le temps en utilisant un temps de précision de nanoseconde en UTC. `YYYY-MM-DD hh:mm:ss.sssssssss` La requête prend en charge les horodatages compris entre`1677-09-21 00:12:44.000000000`. `2262-04-11 23:47:16.854775807`  | 
|  `interval`  |  Représente un intervalle de temps sous forme de chaîne littérale`Xt`, composé de deux parties, *X* et*t*.  *X*est une valeur numérique supérieure ou égale à`0`, et *t* est une unité de temps telle que la seconde ou l'heure. L'unité n'est pas pluralisée. L'unité de temps *t* est doit être l'une des chaînes littérales suivantes :  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/timestream/latest/developerguide/supported-data-types.html)  *Exemples :*  <pre>17s</pre> <pre>12second</pre> <pre>21hour</pre> <pre>2d</pre>  | 
|  `timeseries[row(timestamp, T,...)]`  |  Représente les valeurs d'une mesure enregistrée sur un intervalle de temps sous `array` forme d'`row`objets. Chacune `row` contient une `timestamp` et une ou plusieurs valeurs de mesure de type de données*T*, *T* pouvant être l'une des valeurs suivantes : `bigint``boolean`,`double`, ou`varchar`. Les lignes sont triées par ordre croissant par. `timestamp` Le type de données de *série chronologique* représente les valeurs d'une mesure au fil du temps.  | 
|  `unknown`  |  Représente des données nulles.  | 

# Fonctionnalité de série chronologique intégrée
<a name="timeseries-specific-constructs"></a>

Timestream for LiveAnalytics fournit une fonctionnalité de série chronologique intégrée qui traite les données de séries chronologiques comme un concept de premier ordre.

La fonctionnalité de série chronologique intégrée peut être divisée en deux catégories : les vues et les fonctions.

Vous pouvez en savoir plus sur chaque construction ci-dessous.

**Topics**
+ [

# Vues des séries chronologiques
](timeseries-specific-constructs.views.md)
+ [

# Fonctions de séries chronologiques
](timeseries-specific-constructs.functions.md)

# Vues des séries chronologiques
<a name="timeseries-specific-constructs.views"></a>

Timestream for LiveAnalytics prend en charge les fonctions suivantes pour transformer vos données en type de `timeseries` données :

**Topics**
+ [

## CREATE\$1TIME\$1SERIES
](#timeseries-specific-constructs.views.CREATE_TIME_SERIES)
+ [

## UNNEST
](#timeseries-specific-constructs.views.UNNEST)

## CREATE\$1TIME\$1SERIES
<a name="timeseries-specific-constructs.views.CREATE_TIME_SERIES"></a>

 **CREATE\$1TIME\$1SERIES** est une fonction d'agrégation qui prend toutes les mesures brutes d'une série chronologique (valeurs temporelles et valeurs de mesure) et renvoie un type de données de série chronologique. La syntaxe de cette fonction est la suivante : 

```
CREATE_TIME_SERIES(time, measure_value::<data_type>)
```

 où `<data_type>` est le type de données de la valeur de mesure et peut être bigint, boolean, double ou varchar. Le second paramètre ne peut pas être nul.

Tenez compte de l'utilisation du processeur des instances EC2 stockées dans une table nommée **metrics**, comme indiqué ci-dessous :


| Heure | region | az | vpc | instance\$1id | nom\$1mesure | valeur\$1mesure : double | 
| --- | --- | --- | --- | --- | --- | --- | 
|  2019-12-04 19:00:00.000 000000  |  us-east-1  |  us-east-1d  |  vpc-1a2b3c4d  |  i-1234567890abcdef0  |  utilisation du processeur  |  35,0  | 
|  2019-12-04 19:00:01 000 000000  |  us-east-1  |  us-east-1d  |  vpc-1a2b3c4d  |  i-1234567890abcdef0  |  utilisation du processeur  |  38,2  | 
|  2019-12-04 19:00:02 000 000000  |  us-east-1  |  us-east-1d  |  vpc-1a2b3c4d  |  i-1234567890abcdef0  |  utilisation du processeur  |  45,3  | 
|  2019-12-04 19:00:00.000 000000  |  us-east-1  |  us-east-1d  |  vpc-1a2b3c4d  |  i-1234567890abcdef1  |  utilisation du processeur  |  54,1  | 
|  2019-12-04 19:00:01 000 000000  |  us-east-1  |  us-east-1d  |  vpc-1a2b3c4d  |  i-1234567890abcdef1  |  utilisation du processeur  |  42,5  | 
|  2019-12-04 19:00:02 000 000000  |  us-east-1  |  us-east-1d  |  vpc-1a2b3c4d  |  i-1234567890abcdef1  |  utilisation du processeur  |  33,7  | 

Exécution de la requête :

```
SELECT region, az, vpc, instance_id, CREATE_TIME_SERIES(time, measure_value::double) as cpu_utilization FROM metrics
    WHERE measure_name=’cpu_utilization’
    GROUP BY region, az, vpc, instance_id
```

renverra toutes les séries qui ont `cpu_utilization` comme valeur de mesure. Dans ce cas, nous avons deux séries : 


| region | az | vpc | instance\$1id | utilisation du processeur | 
| --- | --- | --- | --- | --- | 
|  us-east-1  |  us-east-1d  |  vpc-1a2b3c4d  |  i-1234567890abcdef0  |  [\$1time : 2019-12-04 19:00:00.000 000000, measure\$1value : :double : 35.0\$1, \$1time : 2019-12-04 19:00:01.000 000000, measure\$1value : :double : 38.2\$1, \$1time : 2019-12-04 19:00:02.000 000000, measure\$1value : :double : 45,3\$1]  | 
|  us-east-1  |  us-east-1d  |  vpc-1a2b3c4d  |  i-1234567890abcdef1  |  [\$1time : 2019-12-04 19:00:00.000 000000, measure\$1value : :double : 35.1\$1, \$1time : 2019-12-04 19:00:01.000 000000, measure\$1value : :double : 38.5\$1, \$1time : 2019-12-04 19:00:02.000 000000, measure\$1value : :double : 45,7\$1]  | 

## UNNEST
<a name="timeseries-specific-constructs.views.UNNEST"></a>

 `UNNEST`est une fonction de table qui vous permet de transformer `timeseries` les données en modèle plat. La syntaxe est la suivante : 

 `UNNEST``timeseries`transforme a en deux colonnes, à savoir, `time` et`value`. Vous pouvez également utiliser des alias avec UNNEST, comme indiqué ci-dessous : 

```
UNNEST(timeseries) AS <alias_name> (time_alias, value_alias)
```

où `<alias_name>` est l'alias de la table plate, `time_alias` l'alias de la `time` colonne et `value_alias` l'alias de la `value` colonne.

Par exemple, imaginez le scénario dans lequel certaines instances EC2 de votre parc sont configurées pour émettre des métriques à un intervalle de 5 secondes, d'autres à un intervalle de 15 secondes, et vous avez besoin des métriques moyennes pour toutes les instances avec une granularité de 10 secondes au cours des 6 dernières heures. Pour obtenir ces données, vous transformez vos métriques en un modèle de série chronologique à l'aide de **CREATE\$1TIME\$1SERIES**. Vous pouvez ensuite utiliser **INTERPOLATE\$1LINEAR** pour obtenir les valeurs manquantes avec une granularité de 10 secondes. Ensuite, vous retransformez les données en modèle plat à l'aide d'**UNNEST**, puis vous utilisez **AVG** pour obtenir les mesures moyennes sur toutes les instances.

```
WITH interpolated_timeseries AS (
    SELECT region, az, vpc, instance_id,
        INTERPOLATE_LINEAR(
            CREATE_TIME_SERIES(time, measure_value::double),
                SEQUENCE(ago(6h), now(), 10s)) AS interpolated_cpu_utilization
    FROM timestreamdb.metrics 
    WHERE measure_name= ‘cpu_utilization’ AND time >= ago(6h)
    GROUP BY region, az, vpc, instance_id
)
SELECT region, az, vpc, instance_id, avg(t.cpu_util)
FROM interpolated_timeseries
CROSS JOIN UNNEST(interpolated_cpu_utilization) AS t (time, cpu_util)
GROUP BY region, az, vpc, instance_id
```

 La requête ci-dessus illustre l'utilisation d'**UNNEST** avec un alias. Vous trouverez ci-dessous un exemple de la même requête sans utiliser d'alias pour **UNNEST** : 

```
WITH interpolated_timeseries AS (
    SELECT region, az, vpc, instance_id,
        INTERPOLATE_LINEAR(
            CREATE_TIME_SERIES(time, measure_value::double),
                SEQUENCE(ago(6h), now(), 10s)) AS interpolated_cpu_utilization
    FROM timestreamdb.metrics 
    WHERE measure_name= ‘cpu_utilization’ AND time >= ago(6h)
    GROUP BY region, az, vpc, instance_id
)
SELECT region, az, vpc, instance_id, avg(value)
FROM interpolated_timeseries
CROSS JOIN UNNEST(interpolated_cpu_utilization)
GROUP BY region, az, vpc, instance_id
```

# Fonctions de séries chronologiques
<a name="timeseries-specific-constructs.functions"></a>

Amazon Timestream LiveAnalytics for prend en charge les fonctions de séries chronologiques, telles que les dérivées, les intégrales et les corrélations, entre autres, afin d'obtenir des informations plus approfondies à partir de vos données de séries chronologiques. Cette section fournit des informations d'utilisation pour chacune de ces fonctions, ainsi que des exemples de requêtes. Sélectionnez un sujet ci-dessous pour en savoir plus. 

**Topics**
+ [

# Fonctions d'interpolation
](timeseries-specific-constructs.functions.interpolation.md)
+ [

# Fonctions dérivées
](timeseries-specific-constructs.functions.derivatives.md)
+ [

# Fonctions intégrales
](timeseries-specific-constructs.functions.integrals.md)
+ [

# Fonctions de corrélation
](timeseries-specific-constructs.functions.correlation.md)
+ [

# Fonctions de filtrage et de réduction
](timeseries-specific-constructs.functions.filter-reduce.md)

# Fonctions d'interpolation
<a name="timeseries-specific-constructs.functions.interpolation"></a>

Si les données de votre série chronologique ne contiennent pas de valeurs pour des événements à certains moments, vous pouvez estimer les valeurs de ces événements manquants à l'aide d'une interpolation. Amazon Timestream prend en charge quatre variantes d'interpolation : l'interpolation linéaire, l'interpolation par spline cubique, l'interpolation de la dernière observation reportée (locf) et l'interpolation constante. Cette section fournit des informations d'utilisation du Timestream pour les fonctions LiveAnalytics d'interpolation, ainsi que des exemples de requêtes. 



## Informations d'utilisation
<a name="w2aab7c59c13c13c11b7"></a>


| Fonction | Type de données de sortie | Description | 
| --- | --- | --- | 
|  `interpolate_linear(timeseries, array[timestamp])`  |  séries chronologiques  |  Complète les données manquantes à l'aide d'[une interpolation linéaire](https://wikipedia.org/wiki/Linear_interpolation).  | 
|  `interpolate_linear(timeseries, timestamp)`  |  double  |  Complète les données manquantes à l'aide d'[une interpolation linéaire](https://wikipedia.org/wiki/Linear_interpolation).  | 
|  `interpolate_spline_cubic(timeseries, array[timestamp])`  |  séries chronologiques  |  Complète les données manquantes à l'aide d'une [interpolation par splines cubiques](https://wikiversity.org/wiki/Cubic_Spline_Interpolation#:~:text=Cubic%20spline%20interpolation%20is%20a,Lagrange%20polynomial%20and%20Newton%20polynomial.).  | 
|  `interpolate_spline_cubic(timeseries, timestamp)`  |  double  |  Complète les données manquantes à l'aide d'une [interpolation par splines cubiques](https://wikiversity.org/wiki/Cubic_Spline_Interpolation#:~:text=Cubic%20spline%20interpolation%20is%20a,Lagrange%20polynomial%20and%20Newton%20polynomial.).  | 
|  `interpolate_locf(timeseries, array[timestamp])`  |  séries chronologiques  |  Complète les données manquantes en utilisant la dernière valeur échantillonnée.  | 
|  `interpolate_locf(timeseries, timestamp)`  |  double  |  Complète les données manquantes en utilisant la dernière valeur échantillonnée.  | 
|  `interpolate_fill(timeseries, array[timestamp], double)`  |  séries chronologiques  |  Complète les données manquantes à l'aide d'une valeur constante.  | 
|  `interpolate_fill(timeseries, timestamp, double)`  |  double  |  Complète les données manquantes à l'aide d'une valeur constante.  | 

## Exemples de requêtes
<a name="w2aab7c59c13c13c11b9"></a>

**Example**  
Trouvez l'utilisation moyenne du processeur regroupée à intervalles de 30 secondes pour un hôte EC2 spécifique au cours des 2 dernières heures, en remplissant les valeurs manquantes à l'aide d'une interpolation linéaire :  

```
WITH binned_timeseries AS (
SELECT hostname, BIN(time, 30s) AS binned_timestamp, ROUND(AVG(measure_value::double), 2) AS avg_cpu_utilization
FROM "sampleDB".DevOps
WHERE measure_name = 'cpu_utilization'
    AND hostname = 'host-Hovjv'
    AND time > ago(2h)
GROUP BY hostname, BIN(time, 30s)
), interpolated_timeseries AS (
SELECT hostname,
    INTERPOLATE_LINEAR(
        CREATE_TIME_SERIES(binned_timestamp, avg_cpu_utilization),
            SEQUENCE(min(binned_timestamp), max(binned_timestamp), 15s)) AS interpolated_avg_cpu_utilization
FROM binned_timeseries
GROUP BY hostname
)
SELECT time, ROUND(value, 2) AS interpolated_cpu
FROM interpolated_timeseries
CROSS JOIN UNNEST(interpolated_avg_cpu_utilization)
```

**Example**  
Trouvez l'utilisation moyenne du processeur regroupée à intervalles de 30 secondes pour un hôte EC2 spécifique au cours des 2 dernières heures, en remplissant les valeurs manquantes à l'aide d'une interpolation basée sur la dernière observation reportée :  

```
WITH binned_timeseries AS (
SELECT hostname, BIN(time, 30s) AS binned_timestamp, ROUND(AVG(measure_value::double), 2) AS avg_cpu_utilization
FROM "sampleDB".DevOps
WHERE measure_name = 'cpu_utilization'
    AND hostname = 'host-Hovjv'
    AND time > ago(2h)
GROUP BY hostname, BIN(time, 30s)
), interpolated_timeseries AS (
SELECT hostname,
    INTERPOLATE_LOCF(
        CREATE_TIME_SERIES(binned_timestamp, avg_cpu_utilization),
            SEQUENCE(min(binned_timestamp), max(binned_timestamp), 15s)) AS interpolated_avg_cpu_utilization
FROM binned_timeseries
GROUP BY hostname
)
SELECT time, ROUND(value, 2) AS interpolated_cpu
FROM interpolated_timeseries
CROSS JOIN UNNEST(interpolated_avg_cpu_utilization)
```

# Fonctions dérivées
<a name="timeseries-specific-constructs.functions.derivatives"></a>

Les dérivés sont utilisés pour calculer le taux de variation d'une métrique donnée et peuvent être utilisés pour répondre de manière proactive à un événement. Supposons, par exemple, que vous calculiez la dérivée de l'utilisation du processeur des instances EC2 au cours des 5 dernières minutes et que vous remarquiez une dérivée positive significative. Cela peut indiquer une augmentation de la charge de travail. Vous pouvez donc décider de créer davantage d'instances EC2 pour mieux gérer votre charge de travail. 

Amazon Timestream prend en charge deux variantes de fonctions dérivées. Cette section fournit des informations d'utilisation du Timestream pour les fonctions LiveAnalytics dérivées, ainsi que des exemples de requêtes. 



## Informations d'utilisation
<a name="w2aab7c59c13c13c13b9"></a>


| Fonction | Type de données de sortie | Description | 
| --- | --- | --- | 
|  `derivative_linear(timeseries, interval)`  |  séries chronologiques  |  Calcule la [dérivée](https://wikipedia.org/wiki/Derivative) de chaque point du `timeseries` pour le spécifié`interval`.  | 
|  `non_negative_derivative_linear(timeseries, interval)`  |  séries chronologiques  |  Identique`derivative_linear(timeseries, interval)`, mais ne renvoie que des valeurs positives.  | 

## Exemples de requêtes
<a name="w2aab7c59c13c13c13c11"></a>

**Example**  
Trouvez le taux de variation de l'utilisation du processeur toutes les 5 minutes au cours de la dernière heure :  

```
SELECT DERIVATIVE_LINEAR(CREATE_TIME_SERIES(time, measure_value::double), 5m) AS result 
FROM “sampleDB”.DevOps 
WHERE measure_name = 'cpu_utilization' 
AND hostname = 'host-Hovjv' and time > ago(1h) 
GROUP BY hostname, measure_name
```

**Example**  
Calculez le taux d'augmentation des erreurs générées par un ou plusieurs microservices :  

```
WITH binned_view as (
    SELECT bin(time, 5m) as binned_timestamp, ROUND(AVG(measure_value::double), 2) as value            
    FROM “sampleDB”.DevOps  
    WHERE micro_service = 'jwt'  
    AND time > ago(1h) 
    AND measure_name = 'service_error'
    GROUP BY bin(time, 5m)
)
SELECT non_negative_derivative_linear(CREATE_TIME_SERIES(binned_timestamp, value), 1m) as rateOfErrorIncrease
FROM binned_view
```

# Fonctions intégrales
<a name="timeseries-specific-constructs.functions.integrals"></a>

Vous pouvez utiliser des intégrales pour déterminer l'aire sous la courbe par unité de temps pour les événements de votre série chronologique. Supposons par exemple que vous suiviez le volume de demandes reçues par votre application par unité de temps. Dans ce scénario, vous pouvez utiliser la fonction intégrale pour déterminer le volume total de demandes traitées par intervalle spécifié sur une période donnée.

Amazon Timestream prend en charge une variante des fonctions intégrales. Cette section fournit des informations d'utilisation du Timestream pour la fonction LiveAnalytics intégrale, ainsi que des exemples de requêtes. 



## Informations d'utilisation
<a name="w2aab7c59c13c13c15b9"></a>


| Fonction | Type de données de sortie | Description | 
| --- | --- | --- | 
|  `integral_trapezoidal(timeseries(double))` `integral_trapezoidal(timeseries(double), interval day to second)` `integral_trapezoidal(timeseries(bigint))` `integral_trapezoidal(timeseries(bigint), interval day to second)` `integral_trapezoidal(timeseries(integer), interval day to second)` `integral_trapezoidal(timeseries(integer))`  |  double  |  Correspond approximativement à l'[intégrale](https://wikipedia.org/wiki/Integral) spécifiée `interval day to second` pour la valeur `timeseries` fournie, en utilisant la règle du [trapèze](https://wikipedia.org/wiki/Trapezoidal_rule). Le paramètre d'intervalle entre le jour et la seconde est facultatif et la valeur par défaut est`1s`. Pour plus d'informations sur les intervalles, consultez[Intervalle et durée](date-time-functions.md#date-time-functions-interval-duration).  | 

## Exemples de requêtes
<a name="w2aab7c59c13c13c15c11"></a>

**Example**  
Calculez le volume total de demandes traitées toutes les cinq minutes au cours de la dernière heure par un hôte spécifique :  

```
SELECT INTEGRAL_TRAPEZOIDAL(CREATE_TIME_SERIES(time, measure_value::double), 5m) AS result FROM sample.DevOps 
WHERE measure_name = 'request' 
AND hostname = 'host-Hovjv' 
AND time > ago (1h) 
GROUP BY hostname, measure_name
```

# Fonctions de corrélation
<a name="timeseries-specific-constructs.functions.correlation"></a>

Pour deux séries chronologiques de longueur similaire, les fonctions de corrélation fournissent un coefficient de corrélation, qui explique l'évolution des deux séries chronologiques dans le temps. Le coefficient de corrélation est compris entre `-1.0` et`1.0`. `-1.0`indique que les deux séries chronologiques évoluent dans des directions opposées au même rythme, alors qu'`1.0`indique que les deux séries chronologiques évoluent dans la même direction au même rythme. La valeur de `0` indique l'absence de corrélation entre les deux séries chronologiques. Par exemple, si le prix du pétrole augmente et que le cours de l'action d'une société pétrolière augmente, la tendance de la hausse du prix du pétrole et celle de la société pétrolière auront un coefficient de corrélation positif. Un coefficient de corrélation positif élevé indiquerait que les deux prix évoluent au même rythme. De même, le coefficient de corrélation entre les cours des obligations et les rendements obligataires est négatif, ce qui indique que ces deux valeurs évoluent dans le sens inverse au fil du temps.

Amazon Timestream prend en charge deux variantes de fonctions de corrélation. Cette section fournit des informations d'utilisation du Timestream pour les fonctions de LiveAnalytics corrélation, ainsi que des exemples de requêtes. 



## Informations d'utilisation
<a name="w2aab7c59c13c13c19c11"></a>


| Fonction | Type de données de sortie | Description | 
| --- | --- | --- | 
|  `correlate_pearson(timeseries, timeseries)`  |  double  |  Calcule le [coefficient de corrélation de Pearson](https://wikipedia.org/wiki/Pearson_correlation_coefficient) pour les deux. `timeseries` Les séries temporelles doivent avoir les mêmes horodatages.  | 
|  `correlate_spearman(timeseries, timeseries)`  |  double  |  Calcule le [coefficient de corrélation de Spearman](https://en.wikipedia.org/wiki/Spearman%27s_rank_correlation_coefficient) pour les deux. `timeseries` Les séries temporelles doivent avoir les mêmes horodatages.  | 

## Exemples de requêtes
<a name="w2aab7c59c13c13c19c13"></a>

**Example**  

```
WITH cte_1 AS (
    SELECT INTERPOLATE_LINEAR(
        CREATE_TIME_SERIES(time, measure_value::double), 
        SEQUENCE(min(time), max(time), 10m)) AS result 
    FROM sample.DevOps 
    WHERE measure_name = 'cpu_utilization' 
    AND hostname = 'host-Hovjv' AND time > ago(1h) 
    GROUP BY hostname, measure_name
), 
cte_2 AS (
    SELECT INTERPOLATE_LINEAR(
        CREATE_TIME_SERIES(time, measure_value::double), 
        SEQUENCE(min(time), max(time), 10m)) AS result 
    FROM sample.DevOps 
    WHERE measure_name = 'cpu_utilization' 
    AND hostname = 'host-Hovjv' AND time > ago(1h) 
    GROUP BY hostname, measure_name
) 
SELECT correlate_pearson(cte_1.result, cte_2.result) AS result 
FROM cte_1, cte_2
```

# Fonctions de filtrage et de réduction
<a name="timeseries-specific-constructs.functions.filter-reduce"></a>

Amazon Timestream prend en charge des fonctions permettant de filtrer et de réduire les opérations sur les données de séries chronologiques. Cette section fournit des informations d'utilisation du Timestream pour les fonctions de LiveAnalytics filtrage et de réduction, ainsi que des exemples de requêtes. 



## Informations d'utilisation
<a name="w2aab7c59c13c13c23b7"></a>


| Fonction | Type de données de sortie | Description | 
| --- | --- | --- | 
|  `filter(timeseries(T), function(T, Boolean))`  |  série chronologique (T)  |  Construit une série chronologique à partir d'une série chronologique en entrée, en utilisant les valeurs pour lesquelles le passé `function` renvoie`true`.  | 
|  `reduce(timeseries(T), initialState S, inputFunction(S, T, S), outputFunction(S, R))`  |  R  |  Renvoie une valeur unique, réduite par rapport à la série chronologique. Le `inputFunction` sera invoqué sur chaque élément des séries temporelles dans l'ordre. En plus de prendre l'élément actuel, InputFunction prend l'état actuel (initialement`initialState`) et renvoie le nouvel état. Le `outputFunction` sera invoqué pour transformer l'état final en valeur de résultat. Il `outputFunction` peut s'agir d'une fonction d'identité.  | 

## Exemples de requêtes
<a name="w2aab7c59c13c13c23b9"></a>

**Example**  
Construisez une série chronologique de l'utilisation du processeur par un hôte et des points de filtrage avec une mesure supérieure à 70 :  

```
WITH time_series_view AS (
    SELECT INTERPOLATE_LINEAR(
        CREATE_TIME_SERIES(time, ROUND(measure_value::double,2)), 
            SEQUENCE(ago(15m), ago(1m), 10s)) AS cpu_user
    FROM sample.DevOps
    WHERE hostname = 'host-Hovjv' and measure_name = 'cpu_utilization'
        AND time > ago(30m)
    GROUP BY hostname
)
SELECT FILTER(cpu_user, x -> x.value > 70.0) AS cpu_above_threshold
from time_series_view
```

**Example**  
Construisez une série chronologique de l'utilisation du processeur d'un hôte et déterminez la somme au carré des mesures :  

```
WITH time_series_view AS (
    SELECT INTERPOLATE_LINEAR(
        CREATE_TIME_SERIES(time, ROUND(measure_value::double,2)), 
            SEQUENCE(ago(15m), ago(1m), 10s)) AS cpu_user
    FROM sample.DevOps
    WHERE hostname = 'host-Hovjv' and measure_name = 'cpu_utilization'
        AND time > ago(30m)
    GROUP BY hostname
)
SELECT REDUCE(cpu_user,
    DOUBLE '0.0',
    (s, x) -> x.value * x.value + s,
    s -> s)
from time_series_view
```

**Example**  
Construisez une série chronologique de l'utilisation du processeur d'un hôte et déterminez la fraction d'échantillons qui se situent au-dessus du seuil du processeur :  

```
WITH time_series_view AS (
    SELECT INTERPOLATE_LINEAR(
        CREATE_TIME_SERIES(time, ROUND(measure_value::double,2)), 
            SEQUENCE(ago(15m), ago(1m), 10s)) AS cpu_user
    FROM sample.DevOps
    WHERE hostname = 'host-Hovjv' and measure_name = 'cpu_utilization'
        AND time > ago(30m)
    GROUP BY hostname
)
SELECT ROUND(
    REDUCE(cpu_user, 
      -- initial state 
      CAST(ROW(0, 0) AS ROW(count_high BIGINT, count_total BIGINT)),
      -- function to count the total points and points above a certain threshold
      (s, x) -> CAST(ROW(s.count_high + IF(x.value > 70.0, 1, 0), s.count_total + 1) AS ROW(count_high BIGINT, count_total BIGINT)),
      -- output function converting the counts to fraction above threshold
      s -> IF(s.count_total = 0, NULL, CAST(s.count_high AS DOUBLE) / s.count_total)), 
    4) AS fraction_cpu_above_threshold
from time_series_view
```

# Prise en charge de SQL
<a name="supported-sql-constructs"></a>

Timestream for LiveAnalytics prend en charge certaines constructions SQL courantes. Vous pouvez en lire plus ci-dessous.

**Topics**
+ [

# SELECT
](supported-sql-constructs.SELECT.md)
+ [

# Support des sous-requêtes
](supported-sql-constructs.subquery-support.md)
+ [

# AFFICHER les déclarations
](supported-sql-constructs.SHOW.md)
+ [

# DÉCRIVEZ les déclarations
](supported-sql-constructs.DESCRIBE.md)
+ [

# UNLOAD
](supported-sql-constructs.UNLOAD.md)

# SELECT
<a name="supported-sql-constructs.SELECT"></a>

Les instructions **SELECT** peuvent être utilisées pour récupérer les données d'une ou de plusieurs tables. Le langage de requête de Timestream prend en charge la syntaxe suivante pour les instructions **SELECT** :

```
[ WITH with_query [, ...] ]
            SELECT [ ALL | DISTINCT ] select_expr [, ...]
            [ function (expression) OVER (
            [ PARTITION BY partition_expr_list ]
            [ ORDER BY order_list ]
            [ frame_clause ] )
            [ FROM from_item [, ...] ]
            [ WHERE condition ]
            [ GROUP BY [ ALL | DISTINCT ] grouping_element [, ...] ]
            [ HAVING condition]
            [ { UNION | INTERSECT | EXCEPT } [ ALL | DISTINCT ] select ]
            [ ORDER BY order_list ]
            [ LIMIT [ count | ALL ] ]
```

où 
+ `function (expression)`est l'une des [fonctions de fenêtre](window-functions.md) prises en charge.
+ `partition_expr_list`c'est :

  ```
  expression | column_name [, expr_list ]
  ```
+ `order_list`c'est :

  ```
  expression | column_name [ ASC | DESC ] 
  [ NULLS FIRST | NULLS LAST ]
  [, order_list ]
  ```
+ `frame_clause`c'est :

  ```
  ROWS | RANGE
  { UNBOUNDED PRECEDING | expression PRECEDING | CURRENT ROW } |
  {BETWEEN
  { UNBOUNDED PRECEDING | expression { PRECEDING | FOLLOWING } |
  CURRENT ROW}
  AND
  { UNBOUNDED FOLLOWING | expression { PRECEDING | FOLLOWING } |
  CURRENT ROW }}
  ```
+ `from_item`est l'un des suivants :

  ```
  table_name [ [ AS ] alias [ ( column_alias [, ...] ) ] ]
  from_item join_type from_item [ ON join_condition | USING ( join_column [, ...] ) ]
  ```
+ `join_type`est l'un des suivants :

  ```
  [ INNER ] JOIN
  LEFT [ OUTER ] JOIN
  RIGHT [ OUTER ] JOIN
  FULL [ OUTER ] JOIN
  ```
+ `grouping_element`est l'un des suivants :

  ```
  ()
  expression
  ```

# Support des sous-requêtes
<a name="supported-sql-constructs.subquery-support"></a>

 Timestream prend en charge les sous-requêtes et les prédicats. `EXISTS` `IN` Le `EXISTS` prédicat détermine si une sous-requête renvoie des lignes. Le `IN` prédicat détermine si les valeurs produites par la sous-requête correspondent aux valeurs ou à l'expression de la clause IN. Le langage de requête Timestream prend en charge les sous-requêtes corrélées et autres. 

```
SELECT t.c1
FROM (VALUES 1, 2, 3, 4, 5) AS t(c1)
WHERE EXISTS
(SELECT t.c2
 FROM (VALUES 1, 2, 3) AS t(c2)
 WHERE t.c1= t.c2
)
ORDER BY t.c1
```


| c1 | 
| --- | 
|  1  | 
|  2  | 
|  3  | 

```
SELECT t.c1
FROM (VALUES 1, 2, 3, 4, 5) AS t(c1)
WHERE t.c1 IN
(SELECT t.c2
 FROM (VALUES 2, 3, 4) AS t(c2)
)
ORDER BY t.c1
```


| c1 | 
| --- | 
|  2  | 
|  3  | 
|  4  | 

# AFFICHER les déclarations
<a name="supported-sql-constructs.SHOW"></a>

Vous pouvez consulter toutes les bases de données d'un compte à l'aide du `SHOW DATABASES` relevé. La syntaxe est la suivante :

```
SHOW DATABASES [LIKE pattern]
```

où la `LIKE` clause peut être utilisée pour filtrer les noms de base de données.

Vous pouvez consulter tous les tableaux d'un compte à l'aide du `SHOW TABLES` relevé. La syntaxe est la suivante :

```
SHOW TABLES [FROM database] [LIKE pattern]
```

où la `FROM` clause peut être utilisée pour filtrer les noms de base de données et la `LIKE` clause pour filtrer les noms de tables.

Vous pouvez afficher toutes les mesures d'un tableau à l'aide de l'`SHOW MEASURES`instruction. La syntaxe est la suivante :

```
SHOW MEASURES FROM database.table [LIKE pattern]
```

où la `FROM` clause sera utilisée pour spécifier le nom de la base de données et de la table et où la `LIKE` clause peut être utilisée pour filtrer les noms des mesures.

# DÉCRIVEZ les déclarations
<a name="supported-sql-constructs.DESCRIBE"></a>

Vous pouvez afficher les métadonnées d'une table à l'aide de l'`DESCRIBE`instruction. La syntaxe est la suivante :

```
DESCRIBE database.table
```

où `table` contient le nom de la table. L'instruction describe renvoie les noms des colonnes et les types de données de la table.

# UNLOAD
<a name="supported-sql-constructs.UNLOAD"></a>

Timestream for LiveAnalytics prend en charge une `UNLOAD` commande en tant qu'extension de son support SQL. Les types de données pris en charge par `UNLOAD` sont décrits dans[Types de données pris en charge](supported-data-types.md). Les `unknown` types `time` et ne s'appliquent pas à`UNLOAD`.

```
UNLOAD (SELECT statement)
 TO 's3://bucket-name/folder'
 WITH ( option = expression [, ...] )
```

où se trouve l'option

```
{ partitioned_by = ARRAY[ col_name[,…] ] 
 | format = [ '{ CSV | PARQUET }' ] 
 | compression = [ '{ GZIP | NONE }' ]
 | encryption = [ '{ SSE_KMS | SSE_S3 }' ]
 | kms_key = '<string>'
 | field_delimiter ='<character>'
 | escaped_by = '<character>'
 | include_header = ['{true, false}']
 | max_file_size = '<value>'
}
```

Déclaration SELECT  
L'instruction de requête utilisée pour sélectionner et récupérer les données d'un ou de plusieurs Timestream pour les LiveAnalytics tables.   

```
(SELECT column 1, column 2, column 3 from database.table
      where measure_name = "ABC" and timestamp between ago (1d) and now() )
```

Clause TO  

```
TO 's3://bucket-name/folder'
```
or  

```
TO 's3://access-point-alias/folder'
```
La `TO` clause contenue dans l'`UNLOAD`instruction indique la destination de sortie des résultats de la requête. Vous devez fournir le chemin complet, y compris soit le nom du compartiment Amazon S3, soit Amazon S3 access-point-alias avec l'emplacement du dossier sur Amazon S3 où Timestream for LiveAnalytics écrit les objets du fichier de sortie. Le compartiment S3 doit appartenir au même compte et se trouver dans la même région. Outre le jeu de résultats de la requête, Timestream for LiveAnalytics écrit le manifeste et les fichiers de métadonnées dans le dossier de destination spécifié. 

Clause PARTITIONED\$1BY  

```
partitioned_by = ARRAY [col_name[,…] , (default: none)
```
La `partitioned_by` clause est utilisée dans les requêtes pour regrouper et analyser les données à un niveau granulaire. Lorsque vous exportez les résultats de votre requête vers le compartiment S3, vous pouvez choisir de partitionner les données en fonction d'une ou de plusieurs colonnes de la requête de sélection. Lors du partitionnement des données, les données exportées sont divisées en sous-ensembles en fonction de la colonne de partition et chaque sous-ensemble est stocké dans un dossier distinct. Dans le dossier de résultats qui contient vos données exportées, un sous-dossier `folder/results/partition column = partition value/` est automatiquement créé. Notez toutefois que les colonnes partitionnées ne sont pas incluses dans le fichier de sortie.   
`partitioned_by`n'est pas une clause obligatoire dans la syntaxe. Si vous choisissez d'exporter les données sans partitionnement, vous pouvez exclure la clause dans la syntaxe.   

**Example**  
En supposant que vous surveillez les données du flux de clics de votre site Web et que vous disposiez de 5 canaux de trafic `direct``Social Media`, à savoir`Organic Search`,`Other`, et`Referral`. Lorsque vous exportez les données, vous pouvez choisir de les partitionner à l'aide de la colonne`Channel`. Dans votre dossier de données`s3://bucketname/results`, vous aurez cinq dossiers portant chacun leur nom de chaîne respectif. Par exemple, `s3://bucketname/results/channel=Social Media/.` dans ce dossier, vous trouverez les données de tous les clients qui ont accédé à votre site Web via le `Social Media` canal. De même, vous aurez d'autres dossiers pour les chaînes restantes.
Données exportées partitionnées par colonne de canal  

![\[Folder structure showing channels: Direct, Organic search, Other, Referral, and Social media.\]](http://docs.aws.amazon.com/fr_fr/timestream/latest/developerguide/images/unload-results.png)


FORMAT  

```
format = [ '{ CSV | PARQUET }' , default: CSV
```
Les mots clés permettant de spécifier le format des résultats de requête écrits dans votre compartiment S3. Vous pouvez exporter les données soit sous forme de valeur séparée par des virgules (CSV) en utilisant une virgule (,) comme séparateur par défaut, soit au format Apache Parquet, un format de stockage en colonnes ouvert efficace pour les analyses. 

COMPRESSION  

```
compression = [ '{ GZIP | NONE }' ], default: GZIP
```
Vous pouvez compresser les données exportées à l'aide de l'algorithme de compression GZIP ou les décompresser en spécifiant l'`NONE`option.

CHIFFREMENT  

```
encryption = [ '{ SSE_KMS | SSE_S3 }' ], default: SSE_S3
```
Les fichiers de sortie sur Amazon S3 sont chiffrés à l'aide de l'option de chiffrement que vous avez sélectionnée. Outre vos données, le manifeste et les fichiers de métadonnées sont également chiffrés en fonction de l'option de chiffrement que vous avez sélectionnée. Nous prenons actuellement en charge le chiffrement SSE\$1S3 et SSE\$1KMS. SSE\$1S3 est un chiffrement côté serveur, Amazon S3 chiffrant les données à l'aide d'un chiffrement AES (Advanced Encryption Standard) 256 bits. SSE\$1KMS est un chiffrement côté serveur qui permet de chiffrer les données à l'aide de clés gérées par le client.

KMS\$1KEY  

```
kms_key = '<string>'
```
La clé KMS est une clé définie par le client pour chiffrer les résultats de requête exportés. La clé KMS est gérée de manière sécurisée par le service de gestion des AWS clés (AWS KMS) et utilisée pour chiffrer les fichiers de données sur Amazon S3.

DÉLIMITEUR DE CHAMP  

```
field_delimiter ='<character>' , default: (,)
```
Lors de l'exportation des données au format CSV, ce champ spécifie un seul caractère ASCII utilisé pour séparer les champs du fichier de sortie, tel qu'un tube (\$1), une virgule (,) ou un onglet (/t). Le délimiteur par défaut pour les fichiers CSV est un caractère de virgule. Si une valeur de vos données contient le délimiteur choisi, celui-ci sera mis entre guillemets. Par exemple, si la valeur de vos données contient`Time,stream`, elle sera indiquée entre guillemets comme `"Time,stream"` dans les données exportées. Les guillemets utilisés par Timestream LiveAnalytics sont des guillemets doubles («).  
Évitez de spécifier le caractère de renvoi (ASCII 13, hexadécimal`0D`, texte « \$1 r ») ou le caractère de saut de ligne (ASCII 10, hexadécimal 0A, texte «\$1n») `FIELD_DELIMITER` si vous souhaitez inclure des en-têtes dans le CSV, car cela empêcherait de nombreux analyseurs de les analyser correctement dans la sortie CSV résultante.

ÉVADÉ PAR  

```
escaped_by = '<character>', default: (\)
```
Lors de l'exportation des données au format CSV, ce champ indique le caractère qui doit être traité comme un caractère d'échappement dans le fichier de données écrit dans le compartiment S3. L'évasion se produit dans les scénarios suivants :  

1. Si la valeur elle-même contient le caractère guillemet («), elle sera échappée à l'aide d'un caractère d'échappement. Par exemple, si la valeur est`Time"stream`, où (\$1) est le caractère d'échappement configuré, il sera échappé en tant que`Time\"stream`. 

1. Si la valeur contient le caractère d'échappement configuré, il sera échappé. Par exemple, si la valeur est`Time\stream`, elle sera ignorée en tant que`Time\\stream`. 
Si la sortie exportée contient des types de données complexes tels que des tableaux, des lignes ou des séries temporelles, elle sera sérialisée sous forme de chaîne JSON. Voici un exemple.    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/timestream/latest/developerguide/supported-sql-constructs.UNLOAD.html)

INCLUDE\$1EN-TÊTE  

```
include_header = 'true' , default: 'false'
```
Lorsque vous exportez les données au format CSV, ce champ vous permet d'inclure les noms de colonnes dans la première ligne des fichiers de données CSV exportés.  
Les valeurs acceptées sont « vrai » et « faux » et la valeur par défaut est « faux ». Les options de transformation de texte telles que `escaped_by` et `field_delimiter` s'appliquent également aux en-têtes.  
Lorsque vous incluez des en-têtes, il est important de ne pas sélectionner un caractère de renvoi (ASCII 13, hexadécimal 0D, texte « \$1 r ») ou un caractère de saut de ligne (ASCII 10, hexadécimal 0A, texte «\$1n»)`FIELD_DELIMITER`, car cela empêcherait de nombreux analyseurs d'analyser correctement les en-têtes dans la sortie CSV résultante.

TAILLE MAXIMALE DU FICHIER  

```
max_file_size = 'X[MB|GB]' , default: '78GB'
```
Ce champ indique la taille maximale des fichiers créés par l'`UNLOAD`instruction dans Amazon S3. L'`UNLOAD`instruction peut créer plusieurs fichiers, mais la taille maximale de chaque fichier écrit sur Amazon S3 sera approximativement celle spécifiée dans ce champ.  
La valeur du champ doit être comprise entre 16 Mo et 78 Go inclus. Vous pouvez le spécifier en nombre entier tel que`12GB`, ou en décimaux tels que `0.5GB` ou. `24.7MB` La valeur par défaut est de 78 Go.  
La taille réelle du fichier est approximative au moment de l'écriture du fichier, de sorte que la taille maximale réelle peut ne pas être exactement égale au nombre que vous spécifiez.

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

Timestream for LiveAnalytics prend en charge les opérateurs logiques suivants.


| Opérateur | Description | Exemple | 
| --- | --- | --- | 
|  AND  |  Vrai si les deux valeurs sont vraies  |  a ET b  | 
|  OU  |  Vrai si l'une des valeurs est vraie  |  a OU b  | 
|  NOT  |  Vrai si la valeur est fausse  |  PAS un  | 
+ Le résultat d'une `AND` comparaison peut être `NULL` si l'un ou les deux côtés de l'expression le sont`NULL`. 
+ Si au moins un côté d'un `AND` opérateur est, `FALSE` l'expression est évaluée à`FALSE`. 
+ Le résultat d'une `OR` comparaison peut être `NULL` si l'un ou les deux côtés de l'expression le sont`NULL`. 
+ Si au moins un côté d'un `OR` opérateur est, `TRUE` l'expression est évaluée à`TRUE`. 
+ `NULL`C'est le complément logique`NULL`. 

Le tableau de vérité suivant illustre le traitement de `NULL` in `AND` et `OR` :


| A | B | A et b | A ou b | 
| --- | --- | --- | --- | 
|  null  |  null  |  null  |  null  | 
|  false   |  null  |  false  |  null  | 
|  null  |  false  |  false  |  null  | 
|  true  |  null  |  null  |  true  | 
|  null  |  true  |  null  |  vrai  | 
|  false  |  false  |  false  |  false  | 
|  vrai  |  false  |  false  |  vrai  | 
|  false  |  vrai  |  false  |  true  | 
|  true  |  true  |  true  |  true  | 

Le tableau de vérité suivant illustre le traitement de NULL dans NOT :


| A | Ce n'est pas un | 
| --- | --- | 
|  null  |  null  | 
|  vrai  |  false  | 
|  false  |  true  | 

# Opérateurs de comparaison
<a name="comparison-operators"></a>

Timestream for LiveAnalytics prend en charge les opérateurs de comparaison suivants.


| Opérateur | Description | 
| --- | --- | 
|  <  |  Inférieur à  | 
|  >  |  Supérieur à  | 
|  <=  |  Inférieur ou égal à  | 
|  >=  |  Supérieur ou égal à  | 
|  =  |  Égal à  | 
|  <>  |  Non égal à  | 
|  \$1=  |  Non égal à  | 

**Note**  
L'`BETWEEN`opérateur vérifie si une valeur se situe dans une plage spécifiée. La syntaxe est la suivante :  

  ```
  BETWEEN min AND max
  ```
La présence de la `NOT BETWEEN` mention `NULL` in a `BETWEEN` or fera en sorte que l'instruction soit évaluée à`NULL`.
`IS NULL `et `IS NOT NULL` les opérateurs vérifient si une valeur est nulle (non définie). L'utilisation `NULL` de with `IS NULL` donne la valeur true.
En SQL, une `NULL` valeur signifie une valeur inconnue.

# Fonctions de comparaison
<a name="comparison-functions"></a>

Timestream for LiveAnalytics prend en charge les fonctions de comparaison suivantes.

**Topics**
+ [

# le plus grand ()
](comparison-functions.greatest.md)
+ [

# le moins ()
](comparison-functions.least.md)
+ [

# TOUS (), TOUS () et CERTAINS ()
](comparison-functions.all-any-some.md)

# le plus grand ()
<a name="comparison-functions.greatest"></a>

La fonction **greatest ()** renvoie la plus grande des valeurs fournies. Elle renvoie `NULL` si l'une des valeurs fournies l'est`NULL`. La syntaxe est la suivante.

```
greatest(value1, value2, ..., valueN) 
```

# le moins ()
<a name="comparison-functions.least"></a>

La fonction **least ()** renvoie la plus petite des valeurs fournies. Elle renvoie `NULL` si l'une des valeurs fournies l'est`NULL`. La syntaxe est la suivante.

```
least(value1, value2, ..., valueN) 
```

# TOUS (), TOUS () et CERTAINS ()
<a name="comparison-functions.all-any-some"></a>

Les `ALL` `SOME` quantificateurs `ANY` et peuvent être utilisés conjointement avec les opérateurs de comparaison de la manière suivante.


| Expression | Signification | 
| --- | --- | 
|  A = TOUS (...)  |  Est considéré comme vrai lorsque A est égal à toutes les valeurs.  | 
|  A <> TOUS (...)  |  Est considéré comme vrai lorsque A ne correspond à aucune valeur.  | 
|  A < TOUS (...)  |  Est considéré comme vrai lorsque A est inférieur à la plus petite valeur.  | 
|  A = N'IMPORTE LEQUEL (...)  |  Est considéré comme vrai lorsque A est égal à l'une des valeurs.   | 
|  A <> N'IMPORTE QUEL (...)  |  Est considéré comme vrai lorsque A ne correspond pas à une ou plusieurs valeurs.  | 
|  A < N'IMPORTE QUEL (...)  |  Est considéré comme vrai lorsque A est inférieur à la valeur la plus élevée.  | 

## Exemples et notes d'utilisation
<a name="comparison-functions.all-any-some.examples-usage"></a>

**Note**  
Lorsque vous utilisez `ANY` ou `ALL``SOME`, le mot clé `VALUES` doit être utilisé si les valeurs de comparaison sont une liste de littéraux. 

## Exemple : `ANY()`
<a name="w2aab7c59c21c11c11"></a>

Voici un exemple de requête `ANY()` dans une instruction de requête.

```
SELECT 11.7 = ANY (VALUES 12.0, 13.5, 11.7)
```

Une syntaxe alternative pour la même opération est la suivante.

```
SELECT 11.7 = ANY (SELECT 12.0 UNION ALL SELECT 13.5 UNION ALL SELECT 11.7)
```

Dans ce cas, est `ANY()` évalué à. `True`

## Exemple : `ALL()`
<a name="w2aab7c59c21c11c13"></a>

Voici un exemple de requête `ALL()` dans une instruction de requête.

```
SELECT 17 < ALL (VALUES 19, 20, 15);
```

Une syntaxe alternative pour la même opération est la suivante.

```
SELECT 17 < ALL (SELECT 19 UNION ALL SELECT 20 UNION ALL SELECT 15);
```

Dans ce cas, est `ALL()` évalué à. `False`

## Exemple : `SOME()`
<a name="w2aab7c59c21c11c15"></a>

Voici un exemple de requête `SOME()` dans une instruction de requête.

```
SELECT 50 >= SOME (VALUES 53, 77, 27);
```

Une syntaxe alternative pour la même opération est la suivante.

```
SELECT 50 >= SOME (SELECT 53 UNION ALL SELECT 77 UNION ALL SELECT 27);
```

Dans ce cas, est `SOME()` évalué à. `True`

# Expressions conditionnelles
<a name="conditional-expressions"></a>

Timestream for LiveAnalytics prend en charge les expressions conditionnelles suivantes.

**Topics**
+ [

# La déclaration CASE
](conditional-expressions.CASE.md)
+ [

# La déclaration IF
](conditional-expressions.IF.md)
+ [

# La déclaration COALESCE
](conditional-expressions.COALESCE.md)
+ [

# La déclaration NULLIF
](conditional-expressions.NULLIF.md)
+ [

# La déclaration TRY
](conditional-expressions.TRY.md)

# La déclaration CASE
<a name="conditional-expressions.CASE"></a>

L'instruction **CASE** recherche chaque expression de valeur de gauche à droite jusqu'à ce qu'elle en trouve une égale`expression`. S'il trouve une correspondance, le résultat correspondant à la valeur correspondante est renvoyé. Si aucune correspondance n'est trouvée, le résultat de la `ELSE` clause est renvoyé s'il existe ; dans le cas contraire, il `null` est renvoyé. La syntaxe est la suivante :

```
CASE expression
    WHEN value THEN result
    [ WHEN ... ]
    [ ELSE result ]
END
```

 Timestream prend également en charge la syntaxe suivante pour les instructions **CASE**. Dans cette syntaxe, le formulaire « recherché » évalue chaque condition booléenne de gauche à droite jusqu'à ce qu'une condition le soit `true` et renvoie le résultat correspondant. Si aucune condition ne l'est`true`, le résultat de la `ELSE` clause est renvoyé s'il existe ; dans le cas contraire, il `null` est renvoyé. Voir ci-dessous pour la syntaxe alternative : 

```
CASE
    WHEN condition THEN result
    [ WHEN ... ]
    [ ELSE result ]
END
```

# La déclaration IF
<a name="conditional-expressions.IF"></a>

L'instruction **IF** évalue une condition comme vraie ou fausse et renvoie la valeur appropriée. **Timestream prend en charge les deux représentations syntaxiques suivantes pour IF :**

```
if(condition, true_value)
```

Cette syntaxe évalue et renvoie `true_value` si la condition est `true` ; dans le cas contraire, elle `null` est renvoyée et n'`true_value`est pas évaluée.

```
if(condition, true_value, false_value)
```

Cette syntaxe évalue et renvoie `true_value` si la condition est`true`, sinon évalue et renvoie. `false_value`

## Exemples
<a name="conditional-expressions.IF.examples"></a>

```
SELECT
  if(true, 'example 1'),
  if(false, 'example 2'),
  if(true, 'example 3 true', 'example 3 false'),
  if(false, 'example 4 true', 'example 4 false')
```


| \$1col0 | \$1col1 | \$1col2 | \$1col3 | 
| --- | --- | --- | --- | 
|  `example 1`  |  `-` `null`  |  `example 3 true`  |  `example 4 false`  | 

# La déclaration COALESCE
<a name="conditional-expressions.COALESCE"></a>

 **COALESCE** renvoie la première valeur non nulle d'une liste d'arguments. La syntaxe est la suivante :

```
coalesce(value1, value2[,...])
```

# La déclaration NULLIF
<a name="conditional-expressions.NULLIF"></a>

L'instruction **IF** évalue une condition comme vraie ou fausse et renvoie la valeur appropriée. **Timestream prend en charge les deux représentations syntaxiques suivantes pour IF :**

**NULLIF** renvoie null s'il `value1` est égal `value2` ; dans le cas contraire, il renvoie la valeur. `value1` La syntaxe est la suivante :

```
nullif(value1, value2)
```

# La déclaration TRY
<a name="conditional-expressions.TRY"></a>

La fonction **TRY** évalue une expression et gère certains types d'erreurs en la `null` renvoyant. La syntaxe est la suivante :

```
try(expression)
```

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

Timestream for LiveAnalytics prend en charge les fonctions de conversion suivantes.

**Topics**
+ [

## cast()
](#conversion-functions.cast)
+ [

## try\$1cast ()
](#conversion-functions.try-cast)

## cast()
<a name="conversion-functions.cast"></a>

 La syntaxe de la fonction cast permettant de convertir explicitement une valeur en type est la suivante.

```
cast(value AS type)
```

## try\$1cast ()
<a name="conversion-functions.try-cast"></a>

Timestream for prend LiveAnalytics également en charge la fonction try\$1cast qui est similaire à cast mais renvoie null en cas d'échec du cast. La syntaxe est la suivante.

```
try_cast(value AS type)
```

# Operateurs mathématiques
<a name="mathematical-operators"></a>

Timestream for LiveAnalytics prend en charge les opérateurs mathématiques suivants.


| Opérateur | Description | 
| --- | --- | 
|  \$1  |  Addition  | 
|  -  |  Soustraction  | 
|  \$1  |  Multiplication  | 
|  /  |  Division (la division entière effectue la troncature)  | 
|  %  |  Module (reste)  | 

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

Timestream for LiveAnalytics prend en charge les fonctions mathématiques suivantes.


| Fonction | Type de données de sortie | Description | 
| --- | --- | --- | 
|  abdos (x)  |  [identique à l'entrée]  |  Renvoie la valeur absolue de x.  | 
|  cbrt (x)  |  double  |  Renvoie la racine cubique de x.  | 
|  plafond (x) ou plafond (x)  |  [identique à l'entrée]  |  Renvoie x arrondi au nombre entier le plus proche.  | 
|  degrés (x)  |  double  |  Convertit l'angle x en radians en degrés.  | 
|  e ()  |  double  |  Renvoie le nombre d'Euler constant.  | 
|  exp (x)  |  double  |  Renvoie le nombre d'Euler élevé à la puissance x.  | 
|  étage (x)  |  [identique à l'entrée]  |  Renvoie x arrondi à l'entier inférieur le plus proche.  | 
|  from\$1base (chaîne, base)  |  bigint  |  Renvoie la valeur d'une chaîne interprétée comme un nombre de base de base.  | 
|  ln (x)  |  double  |  Renvoie le logarithme naturel de x.  | 
|  journal 2 (x)  |  double  |  Renvoie le logarithme en base 2 de x.  | 
|  journal 10 (x)  |  double  |  Renvoie le logarithme en base 10 de x.  | 
|  mode (n, m)   |  [identique à l'entrée]  |  Renvoie le module (reste) de n divisé par m.  | 
|  épi ()   |  double  |  Renvoie la constante Pi.  | 
|  pow (x, p) ou puissance (x, p)  |  double  |  Renvoie x élevé à la puissance p.  | 
|  radians (x)  |  double  |  Convertit l'angle x en degrés en radians.  | 
|  rand () ou random ()  |  double  |  Renvoie une valeur pseudo-aléatoire comprise entre 0,0 et 1,0.  | 
|  aléatoire (n)  |  [identique à l'entrée]  |  Renvoie un nombre pseudo-aléatoire compris entre 0 et n (exclusif).  | 
|  rond (x)  |  [identique à l'entrée]  |  Renvoie x arrondi à l'entier le plus proche.  | 
|  rond (x, d)  |  [identique à l'entrée]  |  Renvoie x arrondi à d décimales.  | 
|  signe (x)  |  [identique à l'entrée]  |  Renvoie la fonction signum de x, c'est-à-dire : [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/timestream/latest/developerguide/mathematical-functions.html) Pour les arguments doubles, la fonction renvoie également : [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/timestream/latest/developerguide/mathematical-functions.html)  | 
|  carré (x)   |  double  |  Renvoie la racine carrée de x.  | 
|  to\$1base (x, radix)   |  varchar  |  Renvoie la représentation en base de x.  | 
|  tronquer (x)   |  double  |  Renvoie x arrondi à un entier en supprimant les chiffres après la virgule décimale.  | 
|  macos (x)  |  double  |  Renvoie l'arc cosinus de x.  | 
|  ASIN (x)   |  double  |  Renvoie l'arc sinusoïdal de x.  | 
|  Satan (x)   |  double  |  Renvoie l'arc tangent de x.  | 
|  atan2 (y, x)  |  double  |  Renvoie l'arc tangent de y/ x.  | 
|  cos (x)  |  double  |  Renvoie le cosinus de x.  | 
|  douillet (x)  |  double  |  Renvoie le cosinus hyperbolique de x.  | 
|  péché (x)   |  double  |  Renvoie le sinus de x.  | 
|  beige (x)  |  double  |  Renvoie la tangente de x.  | 
|  bronzage (x)  |  double  |  Renvoie la tangente hyperbolique de x.  | 
|  infini ()  |  double  |  Renvoie la constante représentant l'infini positif.  | 
|  is\$1fini (x)  |  boolean  |  Déterminez si x est fini.  | 
|  is\$1infini (x)  |  boolean  |  Déterminez si x est infini.  | 
|  is\$1nan (x)  |  boolean  |  Déterminez si x est not-a-number.  | 
|  homme (1)  |  double  |  Renvoie la constante représentant not-a-number.  | 

# Opérateurs de chaîne
<a name="string-operators"></a>

Timestream for LiveAnalytics permet à l'`||`opérateur de concaténer une ou plusieurs chaînes.

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

**Note**  
Le type de données d'entrée de ces fonctions est supposé être varchar, sauf indication contraire.


| Fonction | Type de données de sortie | Description | 
| --- | --- | --- | 
|  chr (n)   |  varchar  |  Renvoie le point de code Unicode n sous forme de varchar.  | 
|  point de code (x)   |  entier  |  Renvoie le point de code Unicode du seul caractère de str.  | 
|  concat (x1,..., xN)  |  varchar  |  Renvoie la concaténation de x1, x2,..., xN.  | 
|  hamming\$1distance (x1, x2)   |  bigint  |  Renvoie la distance de Hamming de x1 et x2, c'est-à-dire le nombre de positions auxquelles les caractères correspondants sont différents. Notez que les deux entrées varchar doivent avoir la même longueur.  | 
|  longueur (x)  |  bigint  |  Renvoie la longueur de x en caractères.  | 
|  levenshtein\$1distance (x1, x2)   |  bigint  |  Renvoie la distance d'édition Levenshtein de x1 et x2, c'est-à-dire le nombre minimum de modifications d'un seul caractère (insertions, suppressions ou substitutions) nécessaires pour transformer x1 en x2.  | 
|  inférieur (x)  |  varchar  |  Convertit x en minuscules.  | 
|  charge (x1, taille bigint, x2)  |  varchar  |  Les blocs gauches sont x1 pour dimensionner les caractères avec x2. Si la taille est inférieure à la longueur de x1, le résultat est tronqué en caractères de taille. La taille ne doit pas être négative et x2 ne doit pas être vide.  | 
|  Ultrim (x)  |  varchar  |  Supprime les espaces blancs principaux de x.  | 
|  remplacer (x1, x2)  |  varchar  |  Supprime toutes les instances de x2 de x1.  | 
|  remplacer (x1, x2, x3)  |  varchar  |  Remplace toutes les instances de x2 par x3 dans x1.  | 
|  Inverser (x)   |  varchar  |  Renvoie x avec les caractères dans l'ordre inverse.  | 
|  route (x1, taille bigint, x2)  |  varchar  |  Le clavier droit contient x1 pour dimensionner les caractères avec x2. Si la taille est inférieure à la longueur de x1, le résultat est tronqué en caractères de taille. La taille ne doit pas être négative et x2 ne doit pas être vide.  | 
|  garniture (x)  |  varchar  |  Supprime les espaces blancs de fin de x.  | 
|  scindé (x1, x2)  |  array(varchar)  |  Divise x1 sur le délimiteur x2 et renvoie un tableau.  | 
|  split (x1, x2, limite bigint)  |  array(varchar)  |  Divise x1 sur le délimiteur x2 et renvoie un tableau. Le dernier élément du tableau contient toujours tout ce qui reste dans la limite x1. Ce doit être un nombre positif.  | 
|  split\$1part (x1, x2, bigint pos)   |  varchar  |  Divise x1 sur le délimiteur x2 et renvoie le champ varchar à pos. Les index de champs commencent par 1. Si pos est supérieur au nombre de champs, la valeur null est renvoyée.  | 
|  sangles (x1, x2)   |  bigint  |  Renvoie la position de départ de la première instance de x2 dans x1. Les positions commencent par 1. S'il n'est pas trouvé, 0 est renvoyé.  | 
|  strpos (x1, x2, instance de bigint)   |  bigint  |  Renvoie la position de la nième instance de x2 dans x1. L'instance doit être un nombre positif. Les positions commencent par 1. S'il n'est pas trouvé, 0 est renvoyé.  | 
|  strapos (x1, x2)   |  bigint  |  Renvoie la position de départ de la dernière instance de x2 dans x1. Les positions commencent par 1. S'il n'est pas trouvé, 0 est renvoyé.  | 
|  strrpos (x1, x2, instance de bigint)   |  bigint  |  Renvoie la position de la nième instance de x2 dans x1 à partir de la fin de x1. L'instance doit être un nombre positif. Les positions commencent par 1. S'il n'est pas trouvé, 0 est renvoyé.  | 
|  position (x2 IN x1)   |  bigint  |  Renvoie la position de départ de la première instance de x2 dans x1. Les positions commencent par 1. S'il n'est pas trouvé, 0 est renvoyé.  | 
|  substr (x, bigint start)   |  varchar  |  Renvoie le reste de x à partir de la position de départ. Les positions commencent par 1. Une position de départ négative est interprétée comme étant relative à la fin de x.  | 
|  substr (x, bigint start, bigint len)   |  varchar  |  Renvoie une sous-chaîne à partir de x de longueur len à partir de la position de départ. Les positions commencent par 1. Une position de départ négative est interprétée comme étant relative à la fin de x.  | 
|  garniture (x)   |  varchar  |  Supprime les espaces blancs de début et de fin de x.  | 
|  supérieur (x)   |  varchar  |  Convertit x en majuscules.  | 

# Opérateurs de réseaux
<a name="array-operators"></a>

Timestream for LiveAnalytics prend en charge les opérateurs de tableau suivants.


| Opérateur | Description | 
| --- | --- | 
|  []  |  Accédez à un élément d'un tableau dont le premier index commence à 1.  | 
|  \$1\$1  |  Concatène un tableau avec un autre tableau ou élément du même type.  | 

# Fonctions de tableau
<a name="array-functions"></a>

Timestream for LiveAnalytics prend en charge les fonctions de tableau suivantes.


| Fonction | Type de données de sortie | Description | 
| --- | --- | --- | 
|  tableau distinct (x)  |  array  |  Supprimez les valeurs dupliquées du tableau x. <pre>SELECT array_distinct(ARRAY[1,2,2,3])</pre> Exemple de résultat : `[ 1,2,3 ]`  | 
|  array\$1intersect (x, y)  |  array  |  Renvoie un tableau des éléments situés à l'intersection de x et y, sans doublons. <pre>SELECT array_intersect(ARRAY[1,2,3], ARRAY[3,4,5])</pre> Exemple de résultat : `[ 3 ]`  | 
|  array\$1union (x, y)  |  array  |  Renvoie un tableau des éléments dans l'union de x et y, sans doublons. <pre>SELECT array_union(ARRAY[1,2,3], ARRAY[3,4,5])</pre> Exemple de résultat : `[ 1,2,3,4,5 ]`  | 
|  array\$1excepté (x, y)  |  array  |  Renvoie un tableau d'éléments en x mais pas en y, sans doublons. <pre>SELECT array_except(ARRAY[1,2,3], ARRAY[3,4,5])</pre> Exemple de résultat : `[ 1,2 ]`  | 
|  array\$1join (x, délimiteur, remplacement nul)   |  varchar  |  Concatène les éléments du tableau donné à l'aide du délimiteur et d'une chaîne facultative pour remplacer les valeurs nulles. <pre>SELECT array_join(ARRAY[1,2,3], ';', '')</pre> Exemple de résultat : `1;2;3`  | 
|  array\$1max (x)  |  identique aux éléments du tableau  |  Renvoie la valeur maximale du tableau d'entrée. <pre>SELECT array_max(ARRAY[1,2,3])</pre> Exemple de résultat : `3`  | 
|  table\$1min (x)  |  identique aux éléments du tableau  |  Renvoie la valeur minimale du tableau d'entrée. <pre>SELECT array_min(ARRAY[1,2,3])</pre> Exemple de résultat : `1`  | 
|  array\$1position (x, élément)  |  bigint  |  Renvoie la position de la première occurrence de l'élément dans le tableau x (ou 0 s'il est introuvable). <pre>SELECT array_position(ARRAY[3,4,5,9], 5)</pre> Exemple de résultat : `3`  | 
|  array\$1remove (x, élément)  |  array  |  Supprime tous les éléments qui sont égaux à un élément du tableau x. <pre>SELECT array_remove(ARRAY[3,4,5,9], 4)</pre> Exemple de résultat : `[ 3,5,9 ]`  | 
|  array\$1sort (x)  |  array  |  Trie et renvoie le tableau x. Les éléments de x doivent être commandables. Les éléments nuls seront placés à la fin du tableau renvoyé. <pre>SELECT array_sort(ARRAY[6,8,2,9,3])</pre> Exemple de résultat : `[ 2,3,6,8,9 ]`  | 
|  arrays\$1overlap (x, y)   |  boolean  |  Teste si les tableaux x et y ont des éléments non nuls en commun. Renvoie null s'il n'y a aucun élément non nul en commun mais que l'un ou l'autre des tableaux contient des valeurs nulles. <pre>SELECT arrays_overlap(ARRAY[6,8,2,9,3], ARRAY[6,8])</pre> Exemple de résultat : `true`  | 
|  cardinalité (x)  |  bigint  |  Renvoie la taille du tableau x. <pre>SELECT cardinality(ARRAY[6,8,2,9,3])</pre> Exemple de résultat : `5`  | 
|  concat (tableau1, matrice2,..., arrayN)  |  array  |  Concatène les tableaux array1, array2,..., arrayN. <pre>SELECT concat(ARRAY[6,8,2,9,3], ARRAY[11,32], ARRAY[6,8,2,0,14])</pre> Exemple de résultat : `[ 6,8,2,9,3,11,32,6,8,2,0,14 ]`  | 
|  element\$1at (tableau (E), index)  |  E  |  Renvoie l'élément du tableau à un index donné. Si index est inférieur à 0, element\$1at accède aux éléments du dernier au premier. <pre>SELECT element_at(ARRAY[6,8,2,9,3], 1)</pre> Exemple de résultat : `6`  | 
|  répéter (élément, nombre)   |  array  |  Répétez l'élément pour le comptage des fois. <pre>SELECT repeat(1, 3)</pre> Exemple de résultat : `[ 1,1,1 ]`  | 
|  inverse (x)  |  array  |  Renvoie un tableau dont l'ordre est inversé du tableau x. <pre>SELECT reverse(ARRAY[6,8,2,9,3])</pre> Exemple de résultat : `[ 3,9,2,8,6 ]`  | 
|  séquence (démarrage, arrêt)  |  tableau (bigint)  |  Générez une séquence d'entiers du début à la fin, en l'incrémentant de 1 si le début est inférieur ou égal à l'arrêt, sinon -1. <pre>SELECT sequence(3, 8)</pre> Exemple de résultat : `[ 3,4,5,6,7,8 ]`  | 
|  séquence (démarrage, arrêt, étape)   |  tableau (bigint)  |  Générez une séquence d'entiers du début à la fin, en les incrémentant pas à pas. <pre>SELECT sequence(3, 15, 2)</pre> Exemple de résultat : `[ 3,5,7,9,11,13,15 ]`  | 
|  séquence (démarrage, arrêt)   |  tableau (horodatage)  |  Générez une séquence d'horodatages allant de la date de début à la date de fin, en l'incrémentant d'un jour. <pre>SELECT sequence('2023-04-02 19:26:12.941000000', '2023-04-06 19:26:12.941000000', 1d)</pre> Exemple de résultat : `[ 2023-04-02 19:26:12.941000000,2023-04-03 19:26:12.941000000,2023-04-04 19:26:12.941000000,2023-04-05 19:26:12.941000000,2023-04-06 19:26:12.941000000 ]`  | 
|  séquence (démarrage, arrêt, étape)   |  tableau (horodatage)  |  Générez une séquence d'horodatages du début à la fin, en incrémentant par étapes. Le type de données de l'étape est intervalle. <pre>SELECT sequence('2023-04-02 19:26:12.941000000', '2023-04-10 19:26:12.941000000', 2d)</pre> Exemple de résultat : `[ 2023-04-02 19:26:12.941000000,2023-04-04 19:26:12.941000000,2023-04-06 19:26:12.941000000,2023-04-08 19:26:12.941000000,2023-04-10 19:26:12.941000000 ]`  | 
|  mélanger (x)  |  array  |  Génère une permutation aléatoire du tableau x donné. <pre>SELECT shuffle(ARRAY[6,8,2,9,3])</pre> Exemple de résultat : `[ 6,3,2,9,8 ]`  | 
|  tranche (x, début, longueur)  |  array  |  Sous-ensembles le tableau x à partir du début de l'index (ou à partir de la fin si le début est négatif) avec une longueur de longueur. <pre>SELECT slice(ARRAY[6,8,2,9,3], 1, 3)</pre> Exemple de résultat : `[ 6,8,2 ]`  | 
|  zip (tableau1, tableau2 [,...])  |  tableau (ligne)  |  Fusionne les tableaux donnés, élément par élément, en un seul tableau de lignes. Si les arguments ont une longueur inégale, les valeurs manquantes sont remplies avec la valeur NULL. <pre>SELECT zip(ARRAY[6,8,2,9,3], ARRAY[15,24])</pre> Exemple de résultat : `[ ( 6, 15 ),( 8, 24 ),( 2, - ),( 9, - ),( 3, - ) ]`  | 

# Fonctions bitwise
<a name="bitwise-functions"></a>

Timestream for LiveAnalytics prend en charge les fonctions binaires suivantes.


| Fonction | Type de données de sortie | Description | 
| --- | --- | --- | 
| bit\$1count (bigint, bigint) | bigint (complément à deux) |  Renvoie le nombre de bits dans le premier paramètre bigint où le second paramètre est un entier signé par un bit tel que 8 ou 64. <pre>SELECT bit_count(19, 8)</pre> Exemple de résultat : `3` <pre>SELECT bit_count(19, 2)</pre> Exemple de résultat : `Number must be representable with the bits specified. 19 can not be represented with 2 bits`   | 
| bitwise\$1and (bigint, bigint) | bigint (complément à deux) |  Renvoie l'AND au niveau du bit des paramètres bigint. <pre>SELECT bitwise_and(12, 7)</pre> Exemple de résultat : `4`  | 
| bitwise\$1not (bigint) | bigint (complément à deux) |  Renvoie le NOT au niveau du bit du paramètre bigint. <pre>SELECT bitwise_not(12)</pre> Exemple de résultat : `-13`  | 
| bitwise\$1or (bigint, bigint) | bigint (complément à deux) |  Renvoie le OR bit à bit des paramètres bigint. <pre>SELECT bitwise_or(12, 7)</pre> Exemple de résultat : `15`  | 
| bitwise\$1xor (bigint, bigint) | bigint (complément à deux) |  Renvoie le XOR bit à bit des paramètres bigint. <pre>SELECT bitwise_xor(12, 7)</pre> Exemple de résultat : `11`  | 

# Fonctions d'expression régulière
<a name="regex-functions"></a>

Les fonctions d'expression régulière dans Timestream prennent en LiveAnalytics charge la syntaxe des [modèles Java.](http://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html) Timestream for LiveAnalytics prend en charge les fonctions d'expression régulière suivantes.


| Fonction | Type de données de sortie | Description | 
| --- | --- | --- | 
|  regexp\$1extract\$1all (chaîne, modèle)  |  array(varchar)  |  Renvoie la ou les sous-chaînes correspondant au modèle d'expression régulière dans la chaîne. <pre>SELECT regexp_extract_all('example expect complex', 'ex\w')</pre> Exemple de résultat : `[ exa,exp ]`  | 
|  regexp\$1extract\$1all (chaîne, modèle, groupe)  |  array(varchar)  |  Trouve toutes les occurrences du modèle d'expression régulière dans une chaîne et renvoie le groupe de [numéros du groupe de capture](http://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html#gnumber). <pre>SELECT regexp_extract_all('example expect complex', '(ex)(\w)', 2)</pre> Exemple de résultat : `[ a,p ]`  | 
|  regexp\$1extract (chaîne, modèle)  |  varchar  |  Renvoie la première sous-chaîne correspondant au modèle d'expression régulière dans la chaîne. <pre>SELECT regexp_extract('example expect', 'ex\w')</pre> Exemple de résultat : `exa`  | 
|  regexp\$1extract (chaîne, modèle, groupe)   |  varchar  |  Trouve la première occurrence du modèle d'expression régulière dans une chaîne et renvoie le groupe de [numéros du groupe de capture](http://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html#gnumber). <pre>SELECT regexp_extract('example expect', '(ex)(\w)', 2)</pre> Exemple de résultat : `a`  | 
|  regexp\$1like (chaîne, motif)   |  boolean  |  Évalue le modèle d'expression régulière et détermine s'il est contenu dans une chaîne. Cette fonction est similaire à l'opérateur LIKE, sauf que le motif doit uniquement être contenu dans une chaîne, au lieu de devoir correspondre à l'ensemble de la chaîne. En d'autres termes, cela effectue une opération de contenu plutôt qu'une opération de correspondance. Vous pouvez faire correspondre la chaîne entière en ancrant le motif en utilisant ^ et \$1. <pre>SELECT regexp_like('example', 'ex')</pre> Exemple de résultat : `true`  | 
|  regexp\$1replace (chaîne, modèle)  |  varchar  |  Supprime toutes les instances de la sous-chaîne correspondant au modèle d'expression régulière de la chaîne. <pre>SELECT regexp_replace('example expect', 'expect')</pre> Exemple de résultat : `example`  | 
|  regexp\$1replace (chaîne, modèle, remplacement)   |  varchar  |  Remplace chaque instance de la sous-chaîne correspondant au modèle regex dans la chaîne par un remplacement. Les groupes de capture peuvent être référencés en remplacement en utilisant \$1g pour un groupe numéroté ou \$1 \$1name\$1 pour un groupe nommé. Un signe dollar (\$1) peut être inclus dans le remplacement en le remplaçant par une barre oblique inverse (\$1 \$1). <pre>SELECT regexp_replace('example expect', 'expect', 'surprise')</pre> Exemple de résultat : `example surprise`  | 
|  regexp\$1replace (chaîne, modèle, fonction)   |  varchar  |  Remplace chaque instance de la sous-chaîne correspondant au modèle d'expression régulière dans une chaîne à l'aide d'une fonction. La fonction [d'expression lambda](https://prestodb.io/docs/current/functions/lambda.html) est invoquée pour chaque correspondance, les groupes de capture étant transmis sous forme de tableau. La capture des numéros de groupe commence par un ; il n'existe aucun groupe pour l'ensemble de la correspondance (si nécessaire, entourez l'expression entière de parenthèses). <pre>SELECT regexp_replace('example', '(\w)', x -> upper(x[1]))</pre> Exemple de résultat : `EXAMPLE`  | 
|  regexp\$1split (chaîne, modèle)   |  array(varchar)  |  Divise la chaîne en utilisant le modèle d'expression régulière et renvoie un tableau. Les chaînes vides de fin sont conservées. <pre>SELECT regexp_split('example', 'x')</pre> Exemple de résultat : `[ e,ample ]`  | 

# Opérateurs de date et d'heure
<a name="date-time-operators"></a>

**Note**  
Timestream for LiveAnalytics ne prend pas en charge les valeurs temporelles négatives. Toute opération entraînant une durée négative entraîne une erreur.

Timestream for LiveAnalytics prend en charge les opérations suivantes sur `timestamps``dates`, et. `intervals`


| Opérateur | Description | 
| --- | --- | 
|  \$1  |  Addition  | 
|  -  |  Soustraction  | 

**Topics**
+ [

## Opérations
](#date-time-operators-operations)
+ [

## Addition
](#date-time-operators-addition)
+ [

## Soustraction
](#date-time-operators-subtraction)

## Opérations
<a name="date-time-operators-operations"></a>

Le type de résultat d'une opération est basé sur les opérandes. Des littéraux d'intervalle tels que `1day` et `3s` peuvent être utilisés.

```
SELECT date '2022-05-21' + interval '2' day
```

```
SELECT date '2022-05-21' + 2d
```

```
SELECT date '2022-05-21' + 2day
```

Exemple de résultat pour chacun d'entre eux : `2022-05-23`

Les unités d'intervalle incluent `second` `minute``hour`,`day`,`week`,`month`, et`year`. Mais dans certains cas, tous ne sont pas applicables. Par exemple, les secondes, les minutes et les heures ne peuvent pas être ajoutées ou soustraites à une date.

```
SELECT interval '4' year + interval '2' month
```

Exemple de résultat : `4-2`

```
SELECT typeof(interval '4' year + interval '2' month)
```

Exemple de résultat : `interval year to month`

Le type de résultat des opérations d'intervalle peut être `'interval year to month'` ou `'interval day to second'` dépendre des opérandes. Les intervalles peuvent être ajoutés ou soustraits de `dates` et`timestamps`. Mais un `date` ou `timestamp` ne peut pas être ajouté ou soustrait d'un `date` ou`timestamp`. Pour trouver les intervalles ou les durées liés aux dates ou aux horodatages, voir `date_diff` et les fonctions associées dans. [Intervalle et durée](date-time-functions.md#date-time-functions-interval-duration)

## Addition
<a name="date-time-operators-addition"></a>

**Example**  

```
SELECT date '2022-05-21' + interval '2' day
```
Exemple de résultat : `2022-05-23`

**Example**  

```
SELECT typeof(date '2022-05-21' + interval '2' day)
```
Exemple de résultat : `date`

**Example**  

```
SELECT interval '2' year + interval '4' month
```
Exemple de résultat : `2-4`

**Example**  

```
SELECT typeof(interval '2' year + interval '4' month)
```
Exemple de résultat : `interval year to month`

## Soustraction
<a name="date-time-operators-subtraction"></a>

**Example**  

```
SELECT timestamp '2022-06-17 01:00' - interval '7' hour
```
Exemple de résultat : `2022-06-16 18:00:00.000000000`

**Example**  

```
SELECT typeof(timestamp '2022-06-17 01:00' - interval '7' hour)
```
Exemple de résultat : `timestamp`

**Example**  

```
SELECT interval '6' day - interval '4' hour
```
Exemple de résultat : `5 20:00:00.000000000`

**Example**  

```
SELECT typeof(interval '6' day - interval '4' hour)
```
Exemple de résultat : `interval day to second`

# Fonctions de date/heure
<a name="date-time-functions"></a>

**Note**  
Timestream for LiveAnalytics ne prend pas en charge les valeurs temporelles négatives. Toute opération entraînant une durée négative entraîne une erreur.

Timestream pour LiveAnalytics utilise le fuseau horaire UTC pour la date et l'heure. Timestream prend en charge les fonctions suivantes pour la date et l'heure.

**Topics**
+ [

## Généralités et conversion
](#date-time-functions-general)
+ [

## Intervalle et durée
](#date-time-functions-interval-duration)
+ [

## Formatage et analyse
](#date-time-functions-formatting-parsing)
+ [

## Extraction
](#date-time-functions-extraction)

## Généralités et conversion
<a name="date-time-functions-general"></a>

Timestream for LiveAnalytics prend en charge les fonctions générales et de conversion suivantes pour la date et l'heure.


| Fonction | Type de données de sortie | Description | 
| --- | --- | --- | 
|  date\$1actuelle  |  date  |  Renvoie la date actuelle en UTC. Aucune parenthèse n'est utilisée. <pre>SELECT current_date</pre> Exemple de résultat : `2022-07-07`  Il s'agit également d'un mot clé réservé. Pour obtenir la liste des mots clés réservés, consultez[Mots-clés réservés](ts-limits.md#limits.reserved).   | 
|  heure\$1actuelle  |  time  |  Renvoie l'heure actuelle en UTC. Aucune parenthèse n'est utilisée. <pre>SELECT current_time</pre> Exemple de résultat : `17:41:52.827000000`  Il s'agit également d'un mot clé réservé. Pour obtenir la liste des mots clés réservés, consultez[Mots-clés réservés](ts-limits.md#limits.reserved).   | 
|  current\$1timestamp ou now ()  |  timestamp  |  Renvoie l'horodatage actuel en UTC. <pre>SELECT current_timestamp</pre> Exemple de résultat : `2022-07-07 17:42:32.939000000`  Il s'agit également d'un mot clé réservé. Pour obtenir la liste des mots clés réservés, consultez[Mots-clés réservés](ts-limits.md#limits.reserved).   | 
|  fuse\$1horaire actuel ()  |  varchar La valeur sera « UTC ».  |  Timestream utilise le fuseau horaire UTC pour la date et l'heure. <pre>SELECT current_timezone()</pre> Exemple de résultat : `UTC`  | 
|  date (varchar (x)), date (horodatage)  |  date  |  <pre>SELECT date(TIMESTAMP '2022-07-07 17:44:43.771000000')</pre> Exemple de résultat : `2022-07-07`  | 
|  dernier\$1jour\$1de\$1mois (horodatage), dernier\$1jour\$1de\$1mois (date)  |  date  |  <pre>SELECT last_day_of_month(TIMESTAMP '2022-07-07 17:44:43.771000000')</pre> Exemple de résultat : `2022-07-31`  | 
|  from\$1iso8601\$1timestamp (chaîne de caractères)  |  timestamp  |  Analyse l'horodatage ISO 8601 au format d'horodatage interne. <pre>SELECT from_iso8601_timestamp('2022-06-17T08:04:05.000000000+05:00')</pre> Exemple de résultat : `2022-06-17 03:04:05.000000000`  | 
|  from\$1iso8601\$1date (chaîne de caractères)  |  date  |  Analyse la chaîne de date ISO 8601 au format d'horodatage interne pour UTC 00:00:00 de la date spécifiée. <pre>SELECT from_iso8601_date('2022-07-17')</pre> Exemple de résultat : `2022-07-17`  | 
|  to\$1iso8601 (horodatage), to\$1iso8601 (date)  |  varchar  |  Renvoie une chaîne au format ISO 8601 pour l'entrée. <pre>SELECT to_iso8601(from_iso8601_date('2022-06-17'))</pre> Exemple de résultat : `2022-06-17`  | 
|  from\$1milliseconds (bigint)  |  timestamp  |  <pre>SELECT from_milliseconds(1)</pre> Exemple de résultat : `1970-01-01 00:00:00.001000000`  | 
|  from\$1nanoseconds (bigint)  |  timestamp  |  <pre>select from_nanoseconds(300000001)</pre> Exemple de résultat : `1970-01-01 00:00:00.300000001`  | 
|  from\$1unixtime (double)  |  timestamp  |  Renvoie un horodatage qui correspond à l'unixtime fourni. <pre>SELECT from_unixtime(1)</pre> Exemple de résultat : `1970-01-01 00:00:01.000000000`  | 
|  heure locale  |  time  |  Renvoie l'heure actuelle en UTC. Aucune parenthèse n'est utilisée. <pre>SELECT localtime</pre> Exemple de résultat : `17:58:22.654000000`  Il s'agit également d'un mot clé réservé. Pour obtenir la liste des mots clés réservés, consultez[Mots-clés réservés](ts-limits.md#limits.reserved).   | 
|  horodatage local  |  timestamp  |  Renvoie l'horodatage actuel en UTC. Aucune parenthèse n'est utilisée. <pre>SELECT localtimestamp</pre> Exemple de résultat : `2022-07-07 17:59:04.368000000`  Il s'agit également d'un mot clé réservé. Pour obtenir la liste des mots clés réservés, consultez[Mots-clés réservés](ts-limits.md#limits.reserved).   | 
|  to\$1milliseconds (intervalle jour par seconde), to\$1milliseconds (horodatage)  |  bigint  |  <pre>SELECT to_milliseconds(INTERVAL '2' DAY + INTERVAL '3' HOUR)</pre> Exemple de résultat : `183600000` <pre>SELECT to_milliseconds(TIMESTAMP '2022-06-17 17:44:43.771000000')</pre> Exemple de résultat : `1655487883771`  | 
|  to\$1nanoseconds (intervalle jour par seconde), to\$1nanoseconds (horodatage)  |  bigint  |  <pre>SELECT to_nanoseconds(INTERVAL '2' DAY + INTERVAL '3' HOUR)</pre> Exemple de résultat : `183600000000000` <pre>SELECT to_nanoseconds(TIMESTAMP '2022-06-17 17:44:43.771000678')</pre> Exemple de résultat : `1655487883771000678`  | 
|  to\$1unixtime (horodatage)  |  double  |  Renvoie unixtime pour l'horodatage fourni. <pre>SELECT to_unixtime('2022-06-17 17:44:43.771000000')</pre> Exemple de résultat : `1.6554878837710001E9`  | 
|  date\$1trunc (unité, horodatage)  |  timestamp  |  Renvoie l'horodatage tronqué en unité, où l'unité est [seconde, minute, heure, jour, semaine, mois, trimestre ou année]. <pre>SELECT date_trunc('minute', TIMESTAMP '2022-06-17 17:44:43.771000000')</pre> Exemple de résultat : `2022-06-17 17:44:00.000000000`  | 

## Intervalle et durée
<a name="date-time-functions-interval-duration"></a>

Timestream for LiveAnalytics prend en charge les fonctions d'intervalle et de durée suivantes pour la date et l'heure.


| Fonction | Type de données de sortie | Description | 
| --- | --- | --- | 
|  date\$1add (unité, bigint, date), date\$1add (unité, bigint, heure), date\$1add (varchar (x), bigint, horodatage)  |  timestamp  |  Ajoute un bigint d'unités, où l'unité est l'une des valeurs suivantes : [seconde, minute, heure, jour, semaine, mois, trimestre ou année]. <pre>SELECT date_add('hour', 9, TIMESTAMP '2022-06-17 00:00:00')</pre> Exemple de résultat : `2022-06-17 09:00:00.000000000`  | 
|  date\$1diff (unité, date, date), date\$1diff (unité, heure, heure), date\$1diff (unité, horodatage, horodatage)  |  bigint  |  Renvoie une différence dont l'unité est [seconde, minute, heure, jour, semaine, mois, trimestre ou année]. <pre>SELECT date_diff('day', DATE '2020-03-01', DATE '2020-03-02')</pre> Exemple de résultat : `1`  | 
|  parse\$1duration (chaîne de caractères)  |  interval  |  Analyse la chaîne d'entrée pour renvoyer un `interval` équivalent. <pre>SELECT parse_duration('42.8ms')</pre> Exemple de résultat : `0 00:00:00.042800000` <pre>SELECT typeof(parse_duration('42.8ms'))</pre> Exemple de résultat : `interval day to second`  | 
| bin (horodatage, intervalle) | timestamp |  Arrondit la valeur entière du `timestamp` paramètre au multiple le plus proche de la valeur entière du `interval` paramètre. La signification de cette valeur de retour n'est peut-être pas évidente. Il est calculé à l'aide de l'arithmétique des entiers en divisant d'abord le nombre entier d'horodatage par l'entier d'intervalle, puis en multipliant le résultat par l'entier d'intervalle. En gardant à l'esprit qu'un horodatage indique un point UTC exprimé en fractions de seconde écoulées depuis l'époque POSIX (1er janvier 1970), la valeur renvoyée s'alignera rarement sur les unités du calendrier. Par exemple, si vous spécifiez un intervalle de 30 jours, tous les jours écoulés depuis l'époque sont divisés en tranches de 30 jours, et le début de la dernière tranche de 30 jours est renvoyé, ce qui n'a aucun rapport avec les mois du calendrier. Voici quelques exemples : <pre>bin(TIMESTAMP '2022-06-17 10:15:20', 5m)     ==> 2022-06-17 10:15:00.000000000<br />bin(TIMESTAMP '2022-06-17 10:15:20', 1d)     ==> 2022-06-17 00:00:00.000000000<br />bin(TIMESTAMP '2022-06-17 10:15:20', 10day)  ==> 2022-06-17 00:00:00.000000000<br />bin(TIMESTAMP '2022-06-17 10:15:20', 30day)  ==> 2022-05-28 00:00:00.000000000</pre>  | 
|  il y a (intervalle)  |  timestamp  |  Renvoie la valeur correspondant à `interval` current\$1timestamp. <pre>SELECT ago(1d)</pre> Exemple de résultat : `2022-07-06 21:08:53.245000000`  | 
|  littéraux d'intervalle tels que 1h, 1d et 30m  |  interval  |  Les littéraux d'intervalle sont pratiques pour parse\$1duration (chaîne). Par exemple, `1d` est identique à `parse_duration('1d')`. Cela permet d'utiliser les littéraux partout où un intervalle est utilisé. Par exemple : `ago(1d)` et `bin(<timestamp>, 1m)`.  | 

Certains littéraux d'intervalle servent de raccourci pour parse\$1duration. Par exemple,`parse_duration('1day')`, `1day``parse_duration('1d')`, et `1d` chaque retour `1 00:00:00.000000000` où se trouve le type`interval day to second`. L'espace est autorisé dans le format fourni à`parse_duration`. Par exemple, les retours sont `parse_duration('1day')` également`00:00:00.000000000`. Mais ce n'`1 day`est pas un intervalle littéral.

Les unités associées `interval day to second` sont ns, nanoseconde, us, microseconde, ms, milliseconde, s, seconde, m, minute, h, heure, d et jour.

Il y en a également`interval year to month`. Les unités associées à l'intervalle d'une année à l'autre sont y, année et mois. Par exemple, les `SELECT 1year` retours`1-0`. `SELECT 12month`revient également`1-0`. `SELECT 8month`retours`0-8`.

Bien que l'unité de `quarter` soit également disponible pour certaines fonctions telles que `date_trunc` et`date_add`, elle n'`quarter`est pas disponible dans le cadre d'un intervalle littéral.

## Formatage et analyse
<a name="date-time-functions-formatting-parsing"></a>

Timestream for LiveAnalytics prend en charge les fonctions de formatage et d'analyse suivantes pour la date et l'heure.


| Fonction | Type de données de sortie | Description | 
| --- | --- | --- | 
|  date\$1format (horodatage, varchar (x))  |  varchar  |  [Pour plus d'informations sur les spécificateurs de format utilisés par cette fonction, voir \$1 https://trino.io/docs/current/functions/datetime.html mysql-date-functions](https://trino.io/docs/current/functions/datetime.html#mysql-date-functions) <pre>SELECT date_format(TIMESTAMP '2019-10-20 10:20:20', '%Y-%m-%d %H:%i:%s')</pre> Exemple de résultat : `2019-10-20 10:20:20`  | 
|  date\$1parse (varchar (x), varchar (y))  |  timestamp  |  [Pour plus d'informations sur les spécificateurs de format utilisés par cette fonction, voir \$1 https://trino.io/docs/current/functions/datetime.html mysql-date-functions](https://trino.io/docs/current/functions/datetime.html#mysql-date-functions) <pre>SELECT date_parse('2019-10-20 10:20:20', '%Y-%m-%d %H:%i:%s')</pre> Exemple de résultat : `2019-10-20 10:20:20.000000000`  | 
|  format\$1datetime (horodatage, varchar (x))  |  varchar  |  Pour plus d'informations sur la chaîne de format utilisée par cette fonction, consultez [http://joda-time.sourceforge. net/apidocs/org/joda/time/format/DateTimeFormat.html](http://joda-time.sourceforge.net/apidocs/org/joda/time/format/DateTimeFormat.html) <pre>SELECT format_datetime(parse_datetime('1968-01-13 12', 'yyyy-MM-dd HH'), 'yyyy-MM-dd HH')</pre> Exemple de résultat : `1968-01-13 12`  | 
|  parse\$1datetime (varchar (x), varchar (y))  |  timestamp  |  Pour plus d'informations sur la chaîne de format utilisée par cette fonction, consultez [http://joda-time.sourceforge. net/apidocs/org/joda/time/format/DateTimeFormat.html](http://joda-time.sourceforge.net/apidocs/org/joda/time/format/DateTimeFormat.html) <pre>SELECT parse_datetime('2019-12-29 10:10 PST', 'uuuu-LL-dd HH:mm z')</pre> Exemple de résultat : `2019-12-29 18:10:00.000000000`  | 

## Extraction
<a name="date-time-functions-extraction"></a>

Timestream for LiveAnalytics prend en charge les fonctions d'extraction suivantes pour la date et l'heure. La fonction d'extraction est à la base des autres fonctions pratiques.


| Fonction | Type de données de sortie | Description | 
| --- | --- | --- | 
|  extract  |  bigint  |  Extrait un champ d'un horodatage, le champ étant l'un des suivants : [YEAR, QUARTER, MONTH, WEEK, DAY, DAY\$1OF\$1MONTH, DAY\$1OF\$1WEEK, DOW, DAY\$1OF\$1YEAR, DOY, YEAR\$1OF\$1WEEK, YOW, HOUR, MINUTE ou SECOND]. <pre>SELECT extract(YEAR FROM '2019-10-12 23:10:34.000000000')</pre> Exemple de résultat : `2019`  | 
|  jour (horodatage), jour (date), jour (intervalle de jour à seconde)  |  bigint  |  <pre>SELECT day('2019-10-12 23:10:34.000000000')</pre> Exemple de résultat : `12`  | 
|  jour\$1of\$1month (horodatage), day\$1of\$1month (date), day\$1of\$1month (intervalle d'un jour à une seconde)  |  bigint  |  <pre>SELECT day_of_month('2019-10-12 23:10:34.000000000')</pre> Exemple de résultat : `12`  | 
|  jour\$1de\$1semaine (horodatage), jour\$1de\$1semaine (date)  |  bigint  |  <pre>SELECT day_of_week('2019-10-12 23:10:34.000000000')</pre> Exemple de résultat : `6`  | 
|  jour\$1de\$1année (horodatage), jour\$1de\$1année (date)  |  bigint  |  <pre>SELECT day_of_year('2019-10-12 23:10:34.000000000')</pre> Exemple de résultat : `285`  | 
|  dow (horodatage), dow (date)  |  bigint  |  Alias pour day\$1of\$1week  | 
|  doy (horodatage), doy (date)  |  bigint  |  Alias pour day\$1of\$1year  | 
|  heure (horodatage), heure (heure), heure (intervalle du jour à la seconde)  |  bigint  |  <pre>SELECT hour('2019-10-12 23:10:34.000000000')</pre> Exemple de résultat : `23`  | 
|  milliseconde (horodatage), milliseconde (heure), milliseconde (intervalle jour par seconde)  |  bigint  |  <pre>SELECT millisecond('2019-10-12 23:10:34.000000000')</pre> Exemple de résultat : `0`  | 
|  minute (horodatage), minute (heure), minute (intervalle du jour à la seconde)  |  bigint  |  <pre>SELECT minute('2019-10-12 23:10:34.000000000')</pre> Exemple de résultat : `10`  | 
|  mois (horodatage), mois (date), mois (intervalle d'une année à l'autre)  |  bigint  |  <pre>SELECT month('2019-10-12 23:10:34.000000000')</pre> Exemple de résultat : `10`  | 
|  nanoseconde (horodatage), nanoseconde (temps), nanoseconde (intervalle entre un jour et une seconde)  |  bigint  |  <pre>SELECT nanosecond(current_timestamp)</pre> Exemple de résultat : `162000000`  | 
|  trimestre (horodatage), trimestre (date)  |  bigint  |  <pre>SELECT quarter('2019-10-12 23:10:34.000000000')</pre> Exemple de résultat : `4`  | 
|  seconde (horodatage), seconde (heure), seconde (intervalle de jour à seconde)  |  bigint  |  <pre>SELECT second('2019-10-12 23:10:34.000000000')</pre> Exemple de résultat : `34`  | 
|  semaine (horodatage), semaine (date)  |  bigint  |  <pre>SELECT week('2019-10-12 23:10:34.000000000')</pre> Exemple de résultat : `41`  | 
|  semaine\$1de\$1année (horodatage), semaine\$1de\$1année (date)  |  bigint  |  Alias pour la semaine  | 
|  année (horodatage), année (date), année (intervalle d'une année à l'autre)  |  bigint  |  <pre>SELECT year('2019-10-12 23:10:34.000000000')</pre> Exemple de résultat : `2019`  | 
|  année\$1de\$1semaine (horodatage), année\$1de\$1semaine (date)  |  bigint  |  <pre>SELECT year_of_week('2019-10-12 23:10:34.000000000')</pre> Exemple de résultat : `2019`  | 
|  yow (horodatage), yow (date)  |  bigint  |  Alias pour year\$1of\$1week  | 

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

Timestream for LiveAnalytics prend en charge les fonctions d'agrégation suivantes.


| Fonction | Type de données de sortie | Description | 
| --- | --- | --- | 
|  arbitraire (x)  |  [identique à l'entrée]  |  Renvoie une valeur arbitraire non nulle de x, s'il en existe une. <pre>SELECT arbitrary(t.c) FROM (VALUES 1, 2, 3, 4) AS t(c)</pre> Exemple de résultat : `1`  | 
|  array\$1agg (x)  |  array< [identique à l'entrée]  |  Renvoie un tableau créé à partir des éléments x d'entrée. <pre>SELECT array_agg(t.c) FROM (VALUES 1, 2, 3, 4) AS t(c)</pre> Exemple de résultat : `[ 1,2,3,4 ]`  | 
|  moyenne (x)  |  double  |  Renvoie la moyenne (moyenne arithmétique) de toutes les valeurs d'entrée. <pre>SELECT avg(t.c) FROM (VALUES 1, 2, 3, 4) AS t(c)</pre> Exemple de résultat : `2.5`  | 
|  bool\$1and (boolean) every (booléen)   |  boolean  |  Renvoie TRUE si chaque valeur d'entrée est VRAIE, sinon FALSE. <pre>SELECT bool_and(t.c) FROM (VALUES true, true, false, true) AS t(c)</pre> Exemple de résultat : `false`  | 
|  bool\$1or (booléen)  |  boolean  |  Renvoie TRUE si l'une des valeurs d'entrée est VRAIE, sinon FALSE. <pre>SELECT bool_or(t.c) FROM (VALUES true, true, false, true) AS t(c)</pre> Exemple de résultat : `true`  | 
|  compte (\$1) compte (x)  |  bigint  |  count (\$1) renvoie le nombre de lignes d'entrée. count (x) renvoie le nombre de valeurs d'entrée non nulles. <pre>SELECT count(t.c) FROM (VALUES true, true, false, true) AS t(c)</pre> Exemple de résultat : `4`  | 
|  nombre\$1if (x)   |  bigint  |  Renvoie le nombre de valeurs d'entrée TRUE.  <pre>SELECT count_if(t.c) FROM (VALUES true, true, false, true) AS t(c)</pre> Exemple de résultat : `3`  | 
|  moyenne géométrique (x)  |  double  |  Renvoie la moyenne géométrique de toutes les valeurs d'entrée. <pre>SELECT geometric_mean(t.c) FROM (VALUES 1, 2, 3, 4) AS t(c)</pre> Exemple de résultat : `2.213363839400643`  | 
|  max\$1by (x, y)   |  [identique à x]  |  Renvoie la valeur de x associée à la valeur maximale de y sur toutes les valeurs d'entrée. <pre>SELECT max_by(t.c1, t.c2) FROM (VALUES (('a', 1)), (('b', 2)), (('c', 3)), (('d', 4))) AS t(c1, c2)</pre> Exemple de résultat : `d`  | 
|  max\$1by (x, y, n)   |  réseau< [same as x] >  |  Renvoie n valeurs de x associées à la plus grande valeur n de toutes les valeurs d'entrée de y par ordre décroissant de y. <pre>SELECT max_by(t.c1, t.c2, 2) FROM (VALUES (('a', 1)), (('b', 2)), (('c', 3)), (('d', 4))) AS t(c1, c2)</pre> Exemple de résultat : `[ d,c ]`  | 
|  min\$1by (x, y)  |  [identique à x]  |  Renvoie la valeur de x associée à la valeur minimale de y sur toutes les valeurs d'entrée. <pre>SELECT min_by(t.c1, t.c2) FROM (VALUES (('a', 1)), (('b', 2)), (('c', 3)), (('d', 4))) AS t(c1, c2)</pre> Exemple de résultat : `a`  | 
|  min\$1by (x, y, n)  |  réseau< [same as x] >  |  Renvoie n valeurs de x associées à la n plus petite de toutes les valeurs d'entrée de y dans l'ordre croissant de y. <pre>SELECT min_by(t.c1, t.c2, 2) FROM (VALUES (('a', 1)), (('b', 2)), (('c', 3)), (('d', 4))) AS t(c1, c2)</pre> Exemple de résultat : `[ a,b ]`  | 
|  maximum (x)  |  [identique à l'entrée]  |  Renvoie la valeur maximale de toutes les valeurs d'entrée. <pre>SELECT max(t.c) FROM (VALUES 1, 2, 3, 4) AS t(c)</pre> Exemple de résultat : `4`  | 
|  maximum (x, n)  |  réseau< [same as x] >  |  Renvoie n valeurs les plus élevées de toutes les valeurs d'entrée de x. <pre>SELECT max(t.c, 2) FROM (VALUES 1, 2, 3, 4) AS t(c)</pre> Exemple de résultat : `[ 4,3 ]`  | 
|  minute (x)  |  [identique à l'entrée]  |  Renvoie la valeur minimale de toutes les valeurs d'entrée. <pre>SELECT min(t.c) FROM (VALUES 1, 2, 3, 4) AS t(c)</pre> Exemple de résultat : `1`  | 
|  minute (x, n)  |  réseau< [same as x] >  |  Renvoie n plus petites valeurs de toutes les valeurs d'entrée de x. <pre>SELECT min(t.c, 2) FROM (VALUES 1, 2, 3, 4) AS t(c)</pre> Exemple de résultat : `[ 1,2 ]`  | 
|  somme (x)   |  [identique à l'entrée]  |  Renvoie la somme de toutes les valeurs d'entrée. <pre>SELECT sum(t.c) FROM (VALUES 1, 2, 3, 4) AS t(c)</pre> Exemple de résultat : `10`  | 
|  bitwise\$1et\$1agg (x)  |  bigint  |  Renvoie l'AND au niveau du bit de toutes les valeurs d'entrée dans une représentation complémentaire à 2 s. <pre>SELECT bitwise_and_agg(t.c) FROM (VALUES 1, -3) AS t(c)</pre> Exemple de résultat : `1`  | 
|  bitwise\$1or\$1agg (x)  |  bigint  |  Renvoie le OR au niveau du bit de toutes les valeurs d'entrée dans une représentation complémentaire à 2 s. <pre>SELECT bitwise_or_agg(t.c) FROM (VALUES 1, -3) AS t(c)</pre> Exemple de résultat : `-3`  | 
|  approx\$1distinct (x)   |  bigint  |  Renvoie le nombre approximatif de valeurs d'entrée distinctes. Cette fonction fournit une approximation du nombre (DISTINCT x). Zéro est renvoyé si toutes les valeurs d'entrée sont nulles. Cette fonction doit produire une erreur type de 2,3 %, qui est l'écart type de la distribution des erreurs (approximativement normale) sur tous les ensembles possibles. Cela ne garantit pas une limite supérieure de l'erreur pour un ensemble d'entrées spécifique. <pre>SELECT approx_distinct(t.c) FROM (VALUES 1, 2, 3, 4, 8) AS t(c)</pre> Exemple de résultat : `5`  | 
|  approx\$1distinct (x, e)  |  bigint  |  Renvoie le nombre approximatif de valeurs d'entrée distinctes. Cette fonction fournit une approximation du nombre (DISTINCT x). Zéro est renvoyé si toutes les valeurs d'entrée sont nulles. Cette fonction doit produire une erreur type ne dépassant pas e, qui est l'écart type de la distribution d'erreur (approximativement normale) sur tous les ensembles possibles. Cela ne garantit pas une limite supérieure de l'erreur pour un ensemble d'entrées spécifique. L'implémentation actuelle de cette fonction nécessite que e soit compris entre [0,0040625, 0,26000]. <pre>SELECT approx_distinct(t.c, 0.2) FROM (VALUES 1, 2, 3, 4, 8) AS t(c)</pre> Exemple de résultat : `5`  | 
|  approx\$1percentile (x, pourcentage)   |  [identique à x]  |  Renvoie le percentile approximatif pour toutes les valeurs d'entrée de x au pourcentage donné. La valeur du pourcentage doit être comprise entre zéro et un et doit être constante pour toutes les lignes d'entrée. <pre>SELECT approx_percentile(t.c, 0.4) FROM (VALUES 1, 2, 3, 4) AS t(c)</pre> Exemple de résultat : `2`  | 
|  approx\$1percentile (x, pourcentages)   |  réseau< [same as x] >  |  Renvoie le percentile approximatif pour toutes les valeurs d'entrée de x pour chacun des pourcentages spécifiés. Chaque élément du tableau des pourcentages doit être compris entre zéro et un, et le tableau doit être constant pour toutes les lignes d'entrée. <pre>SELECT approx_percentile(t.c, ARRAY[0.1, 0.8, 0.8]) FROM (VALUES 1, 2, 3, 4) AS t(c)</pre> Exemple de résultat : `[ 1,4,4 ]`  | 
|  approx\$1percentile (x, w, pourcentage)   |  [identique à x]  |  Renvoie le percentile pondéré approximatif pour toutes les valeurs d'entrée de x en utilisant le poids par article w au pourcentage p. Le poids doit être une valeur entière d'au moins un. Il s'agit en fait d'un nombre de réplications pour la valeur x dans l'ensemble de percentiles. La valeur de p doit être comprise entre zéro et un et doit être constante pour toutes les lignes d'entrée. <pre>SELECT approx_percentile(t.c, 1, 0.1) FROM (VALUES 1, 2, 3, 4) AS t(c)</pre> Exemple de résultat : `1`  | 
|  approx\$1percentile (x, w, pourcentages)   |  réseau< [same as x] >  |  Renvoie le percentile pondéré approximatif pour toutes les valeurs d'entrée de x en utilisant le poids par article w à chacun des pourcentages indiqués dans le tableau. Le poids doit être une valeur entière d'au moins un. Il s'agit en fait d'un nombre de réplications pour la valeur x dans l'ensemble de percentiles. Chaque élément du tableau doit être compris entre zéro et un, et le tableau doit être constant pour toutes les lignes d'entrée. <pre>SELECT approx_percentile(t.c, 1, ARRAY[0.1, 0.8, 0.8]) FROM (VALUES 1, 2, 3, 4) AS t(c)</pre> Exemple de résultat : `[ 1,4,4 ]`  | 
|  approx\$1percentile (x, w, pourcentage, précision)  |  [identique à x]  |  Renvoie le percentile pondéré approximatif pour toutes les valeurs d'entrée de x en utilisant le poids par article w au pourcentage p, avec une erreur de précision de classement maximale. Le poids doit être une valeur entière d'au moins un. Il s'agit en fait d'un nombre de réplications pour la valeur x dans l'ensemble de percentiles. La valeur de p doit être comprise entre zéro et un et doit être constante pour toutes les lignes d'entrée. La précision doit être une valeur supérieure à zéro et inférieure à un, et elle doit être constante pour toutes les lignes en entrée. <pre>SELECT approx_percentile(t.c, 1, 0.1, 0.5) FROM (VALUES 1, 2, 3, 4) AS t(c)</pre> Exemple de résultat : `1`  | 
|  corr (y, x)  |  double  |  Renvoie le coefficient de corrélation des valeurs d'entrée. <pre>SELECT corr(t.c1, t.c2) FROM (VALUES ((1, 1)), ((2, 2)), ((3, 3)), ((4, 4))) AS t(c1, c2)</pre> Exemple de résultat : `1.0`  | 
|  covar\$1pop (y, x)  |  double  |  Renvoie la covariance des valeurs d'entrée dans la population. <pre>SELECT covar_pop(t.c1, t.c2) FROM (VALUES ((1, 1)), ((2, 2)), ((3, 3)), ((4, 4))) AS t(c1, c2)</pre> Exemple de résultat : `1.25`  | 
|  covar\$1samp (y, x)   |  double  |  Renvoie la covariance de l'échantillon des valeurs d'entrée. <pre>SELECT covar_samp(t.c1, t.c2) FROM (VALUES ((1, 1)), ((2, 2)), ((3, 3)), ((4, 4))) AS t(c1, c2)</pre> Exemple de résultat : `1.6666666666666667`  | 
|  reg\$1interception (y, x)  |  double  |  Renvoie l'intersection par régression linéaire des valeurs d'entrée. y est la valeur dépendante. x est la valeur indépendante. <pre>SELECT regr_intercept(t.c1, t.c2) FROM (VALUES ((1, 1)), ((2, 2)), ((3, 3)), ((4, 4))) AS t(c1, c2)</pre> Exemple de résultat : `0.0`  | 
|  reg\$1slope (y, x)  |  double  |  Renvoie la pente de régression linéaire des valeurs d'entrée. y est la valeur dépendante. x est la valeur indépendante. <pre>SELECT regr_slope(t.c1, t.c2) FROM (VALUES ((1, 1)), ((2, 2)), ((3, 3)), ((4, 4))) AS t(c1, c2)</pre> Exemple de résultat : `1.0`  | 
|  asymétrie (x)  |  double  |  Renvoie l'asymétrie de toutes les valeurs d'entrée. <pre>SELECT skewness(t.c1) FROM (VALUES 1, 2, 3, 4, 8) AS t(c1)</pre> Exemple de résultat : `0.8978957037987335`  | 
|  stddev\$1pop (x)  |  double  |  Renvoie l'écart type de la population de toutes les valeurs d'entrée. <pre>SELECT stddev_pop(t.c1) FROM (VALUES 1, 2, 3, 4, 8) AS t(c1)</pre> Exemple de résultat : `2.4166091947189146`  | 
|  stddev\$1samp (x) stddev (x)  |  double  |  Renvoie l'écart type de l'échantillon de toutes les valeurs d'entrée. <pre>SELECT stddev_samp(t.c1) FROM (VALUES 1, 2, 3, 4, 8) AS t(c1)</pre> Exemple de résultat : `2.701851217221259`  | 
|  var\$1pop (x)   |  double  |  Renvoie la variance de population de toutes les valeurs d'entrée. <pre>SELECT var_pop(t.c1) FROM (VALUES 1, 2, 3, 4, 8) AS t(c1)</pre> Exemple de résultat : `5.840000000000001`  | 
|  var\$1samp (x) variance (x)   |  double  |  Renvoie la variance d'échantillon de toutes les valeurs d'entrée. <pre>SELECT var_samp(t.c1) FROM (VALUES 1, 2, 3, 4, 8) AS t(c1)</pre> Exemple de résultat : `7.300000000000001`  | 

# Fonctions de fenêtrage
<a name="window-functions"></a>

Les fonctions de fenêtre effectuent des calculs sur les lignes du résultat de la requête. Ils s'exécutent après la clause HAVING mais avant la clause ORDER BY. L'appel d'une fonction de fenêtre nécessite une syntaxe spéciale utilisant la clause OVER pour spécifier la fenêtre. Une fenêtre comporte trois éléments :
+ Spécification de partition, qui sépare les lignes d'entrée en différentes partitions. Cela est analogue à la façon dont la clause GROUP BY sépare les lignes en différents groupes pour les fonctions d'agrégation.
+ La spécification d'ordre, qui détermine l'ordre dans lequel les lignes d'entrée seront traitées par la fonction de fenêtre.
+ Le cadre de fenêtre, qui indique une fenêtre coulissante de lignes à traiter par la fonction pour une ligne donnée. Si le cadre n'est pas spécifié, sa valeur par défaut est RANGE UNBOUNDED PRECEDING, identique à RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW. Ce cadre contient toutes les lignes depuis le début de la partition jusqu'au dernier pair de la ligne en cours.

Toutes les fonctions d'agrégation peuvent être utilisées comme fonctions de fenêtre en ajoutant la clause OVER. La fonction d'agrégation est calculée pour chaque ligne au-dessus des lignes du cadre de fenêtre de la ligne en cours. Outre les fonctions d'agrégation, Timestream for LiveAnalytics prend en charge les fonctions de classement et de valeur suivantes.


| Fonction | Type de données de sortie | Description | 
| --- | --- | --- | 
|  cume\$1dist ()  |  bigint  |  Renvoie la distribution cumulée d'une valeur dans un groupe de valeurs. Le résultat est le nombre de lignes précédant ou correspondant à la ligne dans l'ordre des fenêtres de la partition de fenêtre divisé par le nombre total de lignes de la partition de fenêtre. Ainsi, toutes les valeurs d'égalité figurant dans l'ordre seront évaluées à la même valeur de distribution.  | 
|  dense\$1rank ()  |  bigint  |  Renvoie le rang d'une valeur dans un groupe de valeurs. Ceci est similaire à rank (), sauf que les valeurs d'égalité ne produisent pas de lacunes dans la séquence.  | 
|  Titre (n)  |  bigint  |  Divise les lignes de chaque partition de fenêtre en n compartiments allant de 1 à n au maximum. Les valeurs des compartiments différeront d'au plus 1. Si le nombre de lignes de la partition ne correspond pas uniformément au nombre de compartiments, les valeurs restantes sont distribuées une par compartiment, en commençant par le premier compartiment.  | 
|  classement en pourcentage ()  |  double  |  Renvoie le classement en pourcentage d'une valeur dans un groupe de valeurs. Le résultat est (r - 1)/(n - 1) où r est le rang () de la ligne et n est le nombre total de lignes dans la partition de fenêtre.  | 
|  rang ()  |  bigint  |  Renvoie le rang d'une valeur dans un groupe de valeurs. Le rang est égal à un plus le nombre de lignes précédant la ligne qui ne correspondent pas à la ligne. Ainsi, les valeurs d'égalité dans l'ordre produiront des écarts dans la séquence. Le classement est effectué pour chaque partition de fenêtre.  | 
|  numéro\$1ligne ()  |  bigint  |  Renvoie un numéro séquentiel unique pour chaque ligne, en commençant par un, en fonction de l'ordre des lignes dans la partition de fenêtre.  | 
|  première\$1valeur (x)  |  [identique à l'entrée]  |  Renvoie la première valeur de la fenêtre. Cette fonction est limitée au cadre de la fenêtre. La fonction prend une expression ou une cible comme paramètre.  | 
|  dernière\$1valeur (x)  |  [identique à l'entrée]  |  Renvoie la dernière valeur de la fenêtre. Cette fonction est limitée au cadre de la fenêtre. La fonction prend une expression ou une cible comme paramètre.  | 
|  nth\$1value (x, décalage)  |  [identique à l'entrée]  |  Renvoie la valeur au décalage spécifié par rapport au début de la fenêtre. Les décalages commencent à 1. Le décalage peut être n'importe quelle expression scalaire. Si le décalage est nul ou supérieur au nombre de valeurs de la fenêtre, nul est renvoyé. Le fait que le décalage soit nul ou négatif est une erreur. La fonction prend une expression ou une cible comme premier paramètre.  | 
|  plomb (x [, offset [, valeur\$1défaut]])  |  [identique à l'entrée]  |  Renvoie la valeur des lignes décalées après la ligne actuelle de la fenêtre. Les décalages commencent à 0, qui correspond à la ligne actuelle. Le décalage peut être n'importe quelle expression scalaire. Le décalage par défaut est 1. Si le décalage est nul ou supérieur à celui de la fenêtre, la valeur par défaut est renvoyée, ou si elle n'est pas spécifiée, null est renvoyée. La fonction prend une expression ou une cible comme premier paramètre.  | 
|  décalage (x [, offset [, valeur\$1défaut]])  |  [identique à l'entrée]  |  Renvoie la valeur des lignes décalées avant la ligne actuelle de la fenêtre Les décalages commencent à 0, qui est la ligne en cours. Le décalage peut être n'importe quelle expression scalaire. Le décalage par défaut est 1. Si le décalage est nul ou supérieur à celui de la fenêtre, la valeur par défaut est renvoyée, ou si elle n'est pas spécifiée, null est renvoyée. La fonction prend une expression ou une cible comme premier paramètre.  | 

# Exemples de requêtes
<a name="sample-queries"></a>

Cette section inclut des exemples de cas d'utilisation du langage de requête LiveAnalytics de Timestream for.

**Topics**
+ [

# Requêtes simples
](sample-queries.basic-scenarios.md)
+ [

# Requêtes avec fonctions de séries chronologiques
](sample-queries.devops-scenarios.md)
+ [

# Requêtes avec fonctions d'agrégation
](sample-queries.iot-scenarios.md)

# Requêtes simples
<a name="sample-queries.basic-scenarios"></a>

Ce qui suit permet d'obtenir les 10 derniers points de données ajoutés à une table.

```
SELECT * FROM <database_name>.<table_name>
ORDER BY time DESC
LIMIT 10
```

Ce qui suit permet d'obtenir les 5 points de données les plus anciens pour une mesure spécifique.

```
SELECT * FROM <database_name>.<table_name>
WHERE measure_name = '<measure_name>'
ORDER BY time ASC
LIMIT 5
```

Ce qui suit fonctionne avec des horodatages à granularité nanoseconde.

```
SELECT now() AS time_now
, now() - (INTERVAL '12' HOUR) AS twelve_hour_earlier -- Compatibility with ANSI SQL 
, now() - 12h AS also_twelve_hour_earlier -- Convenient time interval literals
, ago(12h) AS twelve_hours_ago -- More convenience with time functionality
, bin(now(), 10m) AS time_binned -- Convenient time binning support
, ago(50ns) AS fifty_ns_ago -- Nanosecond support
, now() + (1h + 50ns) AS hour_fifty_ns_future
```

Les valeurs de mesure pour les enregistrements à mesures multiples sont identifiées par le nom de colonne. Les valeurs de mesure pour les enregistrements à mesure unique sont identifiées par`measure_value::<data_type>`, où se `<data_type>` trouve l'un des `double` `bigint``boolean`, ou `varchar` comme décrit dans[Types de données pris en charge](supported-data-types.md). Pour plus d'informations sur la façon dont les valeurs de mesure sont modélisées, voir [Table unique ou tables multiples](https://docs.aws.amazon.com/timestream/latest/developerguide/data-modeling.html#data-modeling-multiVsinglerecords).

Ce qui suit récupère les valeurs d'une mesure appelée `speed` à partir d'enregistrements de plusieurs mesures avec un `measure_name` de. `IoTMulti-stats`

```
SELECT speed FROM <database_name>.<table_name> where measure_name = 'IoTMulti-stats'
```

Ce qui suit récupère `double` les valeurs des enregistrements à mesure unique avec un `measure_name` de. `load`

```
SELECT measure_value::double FROM <database_name>.<table_name> WHERE measure_name = 'load'
```

# Requêtes avec fonctions de séries chronologiques
<a name="sample-queries.devops-scenarios"></a>

**Topics**
+ [

## Exemple de jeu de données et de requêtes
](#sample-queries.devops-scenarios.example)

## Exemple de jeu de données et de requêtes
<a name="sample-queries.devops-scenarios.example"></a>

Vous pouvez utiliser Timestream LiveAnalytics pour comprendre et améliorer les performances et la disponibilité de vos services et applications. Vous trouverez ci-dessous un exemple de table et des exemples de requêtes exécutées sur cette table. 

La table `ec2_metrics` stocke les données de télémétrie, telles que l'utilisation du processeur et d'autres mesures provenant d'instances EC2. Vous pouvez consulter le tableau ci-dessous.


| Heure | region | az | Hostname | nom\$1mesure | valeur\$1mesure : double | value\$1mesure : :bigint | 
| --- | --- | --- | --- | --- | --- | --- | 
|  2019-12-04 19:00:00.000 000000  |  us-east-1  |  us-east-1a  |  frontend 01  |  utilisation du processeur  |  35,1  |  null  | 
|  2019-12-04 19:00:00.000 000000  |  us-east-1  |  us-east-1a  |  frontend 01  |  memory\$1utilization  |  55,3  |  null  | 
|  2019-12-04 19:00:00.000 000000  |  us-east-1  |  us-east-1a  |  frontend 01  |  network\$1bytes\$1in  |  null  |  1 500  | 
|  2019-12-04 19:00:00.000 000000  |  us-east-1  |  us-east-1a  |  frontend 01  |  octets\$1out du réseau  |  null  |  6 700  | 
|  2019-12-04 19:00:00.000 000000  |  us-east-1  |  us-east-1b  |  frontend 02  |  utilisation du processeur  |  38,5  |  null  | 
|  2019-12-04 19:00:00.000 000000  |  us-east-1  |  us-east-1b  |  frontend 02  |  memory\$1utilization  |  58,4  |  null  | 
|  2019-12-04 19:00:00.000 000000  |  us-east-1  |  us-east-1b  |  frontend 02  |  network\$1bytes\$1in  |  null  |  23 000  | 
|  2019-12-04 19:00:00.000 000000  |  us-east-1  |  us-east-1b  |  frontend 02  |  octets\$1out du réseau  |  null  |  12 000  | 
|  2019-12-04 19:00:00.000 000000  |  us-east-1  |  us-east-1c  |  frontend 03  |  utilisation du processeur  |  45.0  |  null  | 
|  2019-12-04 19:00:00.000 000000  |  us-east-1  |  us-east-1c  |  frontend 03  |  memory\$1utilization  |  65,8  |  null  | 
|  2019-12-04 19:00:00.000 000000  |  us-east-1  |  us-east-1c  |  frontend 03  |  network\$1bytes\$1in  |  null  |  15 000  | 
|  2019-12-04 19:00:00.000 000000  |  us-east-1  |  us-east-1c  |  frontend 03  |  octets\$1out du réseau  |  null  |  836 000  | 
|  2019-12-04 19:00:05 000 000000  |  us-east-1  |  us-east-1a  |  frontend 01  |  utilisation du processeur  |  55,2  |  null  | 
|  2019-12-04 19:00:05 000 000000  |  us-east-1  |  us-east-1a  |  frontend 01  |  memory\$1utilization  |  75.0  |  null  | 
|  2019-12-04 19:00:05 000 000000  |  us-east-1  |  us-east-1a  |  frontend 01  |  network\$1bytes\$1in  |  null  |  1 245  | 
|  2019-12-04 19:00:05 000 000000  |  us-east-1  |  us-east-1a  |  frontend 01  |  octets\$1out du réseau  |  null  |  68 432  | 
|  2019-12-04 19:00:08 000 000000  |  us-east-1  |  us-east-1b  |  frontend 02  |  utilisation du processeur  |  65,6  |  null  | 
|  2019-12-04 19:00:08 000 000000  |  us-east-1  |  us-east-1b  |  frontend 02  |  memory\$1utilization  |  85,3  |  null  | 
|  2019-12-04 19:00:08 000 000000  |  us-east-1  |  us-east-1b  |  frontend 02  |  network\$1bytes\$1in  |  null  |  1 245  | 
|  2019-12-04 19:00:08 000 000000  |  us-east-1  |  us-east-1b  |  frontend 02  |  octets\$1out du réseau  |  null  |  68 432  | 
|  2019-12-04 19:00:20 000 000000  |  us-east-1  |  us-east-1c  |  frontend 03  |  utilisation du processeur  |  12.1  |  null  | 
|  2019-12-04 19:00:20 000 000000  |  us-east-1  |  us-east-1c  |  frontend 03  |  memory\$1utilization  |  32,0  |  null  | 
|  2019-12-04 19:00:20 000 000000  |  us-east-1  |  us-east-1c  |  frontend 03  |  network\$1bytes\$1in  |  null  |  1 400  | 
|  2019-12-04 19:00:20 000 000000  |  us-east-1  |  us-east-1c  |  frontend 03  |  octets\$1out du réseau  |  null  |  345  | 
|  2019-12-04 19:00:10 000 000000  |  us-east-1  |  us-east-1a  |  frontend 01  |  utilisation du processeur  |  15,3  |  null  | 
|  2019-12-04 19:00:10 000 000000  |  us-east-1  |  us-east-1a  |  frontend 01  |  memory\$1utilization  |  35,4  |  null  | 
|  2019-12-04 19:00:10 000 000000  |  us-east-1  |  us-east-1a  |  frontend 01  |  network\$1bytes\$1in  |  null  |  23  | 
|  2019-12-04 19:00:10 000 000000  |  us-east-1  |  us-east-1a  |  frontend 01  |  octets\$1out du réseau  |  null  |  0  | 
|  2019-12-04 19:00:16 000 000000  |  us-east-1  |  us-east-1b  |  frontend 02  |  utilisation du processeur  |  44.0  |  null  | 
|  2019-12-04 19:00:16 000 000000  |  us-east-1  |  us-east-1b  |  frontend 02  |  memory\$1utilization  |  64,2  |  null  | 
|  2019-12-04 19:00:16 000 000000  |  us-east-1  |  us-east-1b  |  frontend 02  |  network\$1bytes\$1in  |  null  |  1 450  | 
|  2019-12-04 19:00:16 000 000000  |  us-east-1  |  us-east-1b  |  frontend 02  |  octets\$1out du réseau  |  null  |  200  | 
|  2019-12-04 19:00:40.000 000000  |  us-east-1  |  us-east-1c  |  frontend 03  |  utilisation du processeur  |  66,4  |  null  | 
|  2019-12-04 19:00:40.000 000000  |  us-east-1  |  us-east-1c  |  frontend 03  |  memory\$1utilization  |  86,3  |  null  | 
|  2019-12-04 19:00:40.000 000000  |  us-east-1  |  us-east-1c  |  frontend 03  |  network\$1bytes\$1in  |  null  |  300  | 
|  2019-12-04 19:00:40.000 000000  |  us-east-1  |  us-east-1c  |  frontend 03  |  octets\$1out du réseau  |  null  |  423  | 

Trouvez l'utilisation moyenne du processeur, p90, p95 et p99 pour un hôte EC2 spécifique au cours des 2 dernières heures :

```
SELECT region, az, hostname, BIN(time, 15s) AS binned_timestamp,
    ROUND(AVG(measure_value::double), 2) AS avg_cpu_utilization,
    ROUND(APPROX_PERCENTILE(measure_value::double, 0.9), 2) AS p90_cpu_utilization,
    ROUND(APPROX_PERCENTILE(measure_value::double, 0.95), 2) AS p95_cpu_utilization,
    ROUND(APPROX_PERCENTILE(measure_value::double, 0.99), 2) AS p99_cpu_utilization
FROM "sampleDB".DevOps
WHERE measure_name = 'cpu_utilization'
    AND hostname = 'host-Hovjv'
    AND time > ago(2h)
GROUP BY region, hostname, az, BIN(time, 15s)
ORDER BY binned_timestamp ASC
```

Identifiez les hôtes EC2 dont l'utilisation du processeur est supérieure de 10 % ou plus à l'utilisation moyenne du processeur de l'ensemble du parc au cours des 2 dernières heures :

```
WITH avg_fleet_utilization AS (
    SELECT COUNT(DISTINCT hostname) AS total_host_count, AVG(measure_value::double) AS fleet_avg_cpu_utilization
    FROM "sampleDB".DevOps
    WHERE measure_name = 'cpu_utilization'
        AND time > ago(2h)
), avg_per_host_cpu AS (
    SELECT region, az, hostname, AVG(measure_value::double) AS avg_cpu_utilization
    FROM "sampleDB".DevOps
    WHERE measure_name = 'cpu_utilization'
        AND time > ago(2h)
    GROUP BY region, az, hostname
)
SELECT region, az, hostname, avg_cpu_utilization, fleet_avg_cpu_utilization
FROM avg_fleet_utilization, avg_per_host_cpu
WHERE avg_cpu_utilization > 1.1 * fleet_avg_cpu_utilization
ORDER BY avg_cpu_utilization DESC
```

Trouvez l'utilisation moyenne du processeur regroupée à intervalles de 30 secondes pour un hôte EC2 spécifique au cours des 2 dernières heures :

```
SELECT BIN(time, 30s) AS binned_timestamp, ROUND(AVG(measure_value::double), 2) AS avg_cpu_utilization
FROM "sampleDB".DevOps
WHERE measure_name = 'cpu_utilization'
    AND hostname = 'host-Hovjv'
    AND time > ago(2h)
GROUP BY hostname, BIN(time, 30s)
ORDER BY binned_timestamp ASC
```

Trouvez l'utilisation moyenne du processeur regroupée à intervalles de 30 secondes pour un hôte EC2 spécifique au cours des 2 dernières heures, en remplissant les valeurs manquantes à l'aide d'une interpolation linéaire :

```
WITH binned_timeseries AS (
    SELECT hostname, BIN(time, 30s) AS binned_timestamp, ROUND(AVG(measure_value::double), 2) AS avg_cpu_utilization
    FROM "sampleDB".DevOps
    WHERE measure_name = 'cpu_utilization'
        AND hostname = 'host-Hovjv'
        AND time > ago(2h)
    GROUP BY hostname, BIN(time, 30s)
), interpolated_timeseries AS (
    SELECT hostname,
        INTERPOLATE_LINEAR(
            CREATE_TIME_SERIES(binned_timestamp, avg_cpu_utilization),
                SEQUENCE(min(binned_timestamp), max(binned_timestamp), 15s)) AS interpolated_avg_cpu_utilization
    FROM binned_timeseries
    GROUP BY hostname
)
SELECT time, ROUND(value, 2) AS interpolated_cpu
FROM interpolated_timeseries
CROSS JOIN UNNEST(interpolated_avg_cpu_utilization)
```

Trouvez l'utilisation moyenne du processeur regroupée à intervalles de 30 secondes pour un hôte EC2 spécifique au cours des 2 dernières heures, en remplissant les valeurs manquantes à l'aide d'une interpolation basée sur la dernière observation reportée :

```
WITH binned_timeseries AS (
    SELECT hostname, BIN(time, 30s) AS binned_timestamp, ROUND(AVG(measure_value::double), 2) AS avg_cpu_utilization
    FROM "sampleDB".DevOps
    WHERE measure_name = 'cpu_utilization'
        AND hostname = 'host-Hovjv'
        AND time > ago(2h)
    GROUP BY hostname, BIN(time, 30s)
), interpolated_timeseries AS (
    SELECT hostname,
        INTERPOLATE_LOCF(
            CREATE_TIME_SERIES(binned_timestamp, avg_cpu_utilization),
                SEQUENCE(min(binned_timestamp), max(binned_timestamp), 15s)) AS interpolated_avg_cpu_utilization
    FROM binned_timeseries
    GROUP BY hostname
)
SELECT time, ROUND(value, 2) AS interpolated_cpu
FROM interpolated_timeseries
CROSS JOIN UNNEST(interpolated_avg_cpu_utilization)
```

# Requêtes avec fonctions d'agrégation
<a name="sample-queries.iot-scenarios"></a>

Vous trouverez ci-dessous un exemple de jeu de données pour un scénario IoT illustrant des requêtes avec des fonctions agrégées.

**Topics**
+ [

## Exemple de données
](#sample-queries.iot-scenarios.example-data)
+ [

## Exemples de requêtes
](#sample-queries.iot-scenarios.example-queries)

## Exemple de données
<a name="sample-queries.iot-scenarios.example-data"></a>

Timestream vous permet de stocker et d'analyser les données des capteurs IoT telles que l'emplacement, la consommation de carburant, la vitesse et la capacité de charge d'une ou de plusieurs flottes de camions afin de permettre une gestion efficace de la flotte. Vous trouverez ci-dessous le schéma et certaines des données d'une table iot\$1trucks qui stocke des données télémétriques telles que l'emplacement, la consommation de carburant, la vitesse et la capacité de charge des camions.


| Heure | truck\$1id | Marque | Modèle | Flotte | capacité\$1carburant | capacité\$1charge | nom\$1mesure | valeur\$1mesure : double | valeur\$1mesure : varchar | 
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | 
|  2019-12-04 19:00:00.000 000000  |  123456781  |  GMC  |  Astro  |  Alpha  |  100  |  500  |  lecture de carburant  |  65,2  |  null  | 
|  2019-12-04 19:00:00.000 000000  |  123456781  |  GMC  |  Astro  |  Alpha  |  100  |  500  |  charge  |  400,0  |  null  | 
|  2019-12-04 19:00:00.000 000000  |  123456781  |  GMC  |  Astro  |  Alpha  |  100  |  500  |  speed  |  90,2  |  null  | 
|  2019-12-04 19:00:00.000 000000  |  123456781  |  GMC  |  Astro  |  Alpha  |  100  |  500  |  location  |  null  |  47,6062 M, 122,3321 W  | 
|  2019-12-04 19:00:00.000 000000  |  123456782  |  Kenworth  |  W900  |  Alpha  |  150  |  1 000  |  lecture de carburant  |  10.1  |  null  | 
|  2019-12-04 19:00:00.000 000000  |  123456782  |  Kenworth  |  W900  |  Alpha  |  150  |  1 000  |  charge  |  950,3  |  null  | 
|  2019-12-04 19:00:00.000 000000  |  123456782  |  Kenworth  |  W900  |  Alpha  |  150  |  1 000  |  speed  |  50,8  |  null  | 
|  2019-12-04 19:00:00.000 000000  |  123456782  |  Kenworth  |  W900  |  Alpha  |  150  |  1 000  |  location  |  null  |  40,7128 degrés N, 74,0060 degrés W  | 

## Exemples de requêtes
<a name="sample-queries.iot-scenarios.example-queries"></a>

Obtenez une liste de tous les attributs et valeurs des capteurs surveillés pour chaque camion de la flotte.

```
SELECT
    truck_id,
    fleet,
    fuel_capacity,
    model,
    load_capacity,
    make,
    measure_name
FROM "sampleDB".IoT
GROUP BY truck_id, fleet, fuel_capacity, model, load_capacity, make, measure_name
```

Obtenez le dernier relevé de consommation de carburant de chaque camion de la flotte au cours des dernières 24 heures.

```
WITH latest_recorded_time AS (
    SELECT
        truck_id,
        max(time) as latest_time
    FROM "sampleDB".IoT
    WHERE measure_name = 'fuel-reading'
    AND time >= ago(24h)
    GROUP BY truck_id
)
SELECT
    b.truck_id,
    b.fleet,
    b.make,
    b.model,
    b.time,
    b.measure_value::double as last_reported_fuel_reading
FROM
latest_recorded_time a INNER JOIN "sampleDB".IoT b
ON a.truck_id = b.truck_id AND b.time = a.latest_time
WHERE b.measure_name = 'fuel-reading'
AND b.time > ago(24h)
ORDER BY b.truck_id
```

Identifiez les camions qui ont consommé peu de carburant (moins de 10 %) au cours des dernières 48 heures :

```
WITH low_fuel_trucks AS (
    SELECT time, truck_id, fleet, make, model, (measure_value::double/cast(fuel_capacity as double)*100) AS fuel_pct
    FROM "sampleDB".IoT
    WHERE time >= ago(48h)
    AND (measure_value::double/cast(fuel_capacity as double)*100) < 10
    AND measure_name = 'fuel-reading'
),
other_trucks AS (
SELECT time, truck_id, (measure_value::double/cast(fuel_capacity as double)*100) as remaining_fuel
    FROM "sampleDB".IoT
    WHERE time >= ago(48h)
    AND truck_id IN (SELECT truck_id FROM low_fuel_trucks)
    AND (measure_value::double/cast(fuel_capacity as double)*100) >= 10
    AND measure_name = 'fuel-reading'
),
trucks_that_refuelled AS (
    SELECT a.truck_id
    FROM low_fuel_trucks a JOIN other_trucks b
    ON a.truck_id = b.truck_id AND b.time >= a.time
)
SELECT DISTINCT truck_id, fleet, make, model, fuel_pct
FROM low_fuel_trucks
WHERE truck_id NOT IN (
    SELECT truck_id FROM trucks_that_refuelled
)
```

Trouvez la charge moyenne et la vitesse maximale de chaque camion au cours de la semaine écoulée :

```
SELECT
    bin(time, 1d) as binned_time,
    fleet,
    truck_id,
    make,
    model,
    AVG(
        CASE WHEN measure_name = 'load' THEN measure_value::double ELSE NULL END
    ) AS avg_load_tons,
    MAX(
        CASE WHEN measure_name = 'speed' THEN measure_value::double ELSE NULL END
    ) AS max_speed_mph
FROM "sampleDB".IoT
WHERE time >= ago(7d)
AND measure_name IN ('load', 'speed')
GROUP BY fleet, truck_id, make, model, bin(time, 1d)
ORDER BY truck_id
```

Découvrez l'efficacité de chargement de chaque camion au cours de la semaine écoulée :

```
WITH average_load_per_truck AS (
    SELECT
        truck_id,
        avg(measure_value::double)  AS avg_load
    FROM "sampleDB".IoT
    WHERE measure_name = 'load'
    AND time >= ago(7d)
    GROUP BY truck_id, fleet, load_capacity, make, model
),
truck_load_efficiency AS (
    SELECT
        a.truck_id,
        fleet,
        load_capacity,
        make,
        model,
        avg_load,
        measure_value::double,
        time,
        (measure_value::double*100)/avg_load as load_efficiency -- , approx_percentile(avg_load_pct, DOUBLE '0.9')
    FROM "sampleDB".IoT a JOIN average_load_per_truck b
    ON a.truck_id = b.truck_id
    WHERE a.measure_name = 'load'
)
SELECT
    truck_id,
    time,
    load_efficiency
FROM truck_load_efficiency
ORDER BY truck_id, time
```