

Para obtener capacidades similares a las de Amazon Timestream, considere Amazon Timestream LiveAnalytics para InfluxDB. Ofrece una ingesta de datos simplificada y tiempos de respuesta a las consultas en milisegundos de un solo dígito para realizar análisis en tiempo real. Obtenga más información [aquí](https://docs.aws.amazon.com//timestream/latest/developerguide/timestream-for-influxdb.html).

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

# Referencia del lenguaje de consulta
<a name="reference"></a>

**nota**  
Esta referencia del lenguaje de consulta incluye la siguiente documentación de terceros de la [Trino Software Foundation](https://trino.io/foundation.html) (anteriormente, Presto Software Foundation), que está licenciada bajo la licencia Apache, versión 2.0. No se puede usar este archivo, salvo en conformidad con esta Licencia. Para obtener una copia de la licencia de Apache, versión 2.0, consulte el [sitio web de Apache](http://www.apache.org/licenses/LICENSE-2.0).

Timestream for LiveAnalytics admite un lenguaje de consulta completo para trabajar con los datos. A continuación, puede ver los tipos de datos, operadores, funciones y constructos disponibles.

También puede empezar de inmediato con el lenguaje de consultas de Timestream en la sección [Consultas de ejemplo](sample-queries.md).

**Topics**
+ [

# Tipos de datos compatibles
](supported-data-types.md)
+ [

# Funcionalidad de serie temporal integrada
](timeseries-specific-constructs.md)
+ [

# Compatibilidad con SQL
](supported-sql-constructs.md)
+ [

# Logical operators (Operadores lógicos)
](logical-operators.md)
+ [

# Operadores de comparación
](comparison-operators.md)
+ [

# Funciones de comparación
](comparison-functions.md)
+ [

# Expresiones condicionales
](conditional-expressions.md)
+ [

# Funciones de conversión
](conversion-functions.md)
+ [

# Operadores matemáticos
](mathematical-operators.md)
+ [

# Funciones matemáticas
](mathematical-functions.md)
+ [

# Operadores de cadena
](string-operators.md)
+ [

# Funciones de cadena
](string-functions.md)
+ [

# Operadores de matrices
](array-operators.md)
+ [

# Funciones de matriz
](array-functions.md)
+ [

# Bitwise functions (Funciones Bitwise)
](bitwise-functions.md)
+ [

# Regular expression functions (Funciones de expresión regular)
](regex-functions.md)
+ [

# Operadores de fecha y hora
](date-time-operators.md)
+ [

# Funciones de fecha y hora
](date-time-functions.md)
+ [

# Funciones de agregación
](aggregate-functions.md)
+ [

# Funciones de ventana
](window-functions.md)
+ [

# Consultas de ejemplo
](sample-queries.md)

# Tipos de datos compatibles
<a name="supported-data-types"></a>

El lenguaje de consulta de Timestream for LiveAnalytics admite los siguientes tipos de datos.

**nota**  
Los tipos de datos compatibles con las escrituras se describen en [Tipos de datos](https://docs.aws.amazon.com/timestream/latest/developerguide/writes.html#writes.data-types).


| Tipo de datos: | Description (Descripción) | 
| --- | --- | 
|  `int`  |  Representa un entero 32 bits.  | 
|  `bigint`  |  Representa un entero con signo de 64 bits.  | 
|  `boolean`  |  Uno de los dos valores de verdad de la lógica, `True` y `False`.  | 
|  `double`  |  Representa un tipo de datos de precisión variable de 64 bits. Implementa el [estándar IEEE 754 para la aritmética binaria de coma flotante](https://standards.ieee.org/standard/754-2019.html).  El lenguaje de consulta sirve para leer datos. Hay funciones para valores dobles `Infinity` y `NaN` que se pueden usar en las consultas. Pero no puede escribir esos valores en Timestream.   | 
|  `varchar`  |  Datos de caracteres de longitud variable con un tamaño máximo de 2 KB.  | 
|  `array[T,...]`  |  Contiene uno o más elementos de un tipo de datos específico*T*, que *T* puede ser cualquiera de los tipos de datos compatibles con Timestream.  | 
|   `row(T,...)`   |  Contiene uno o más campos con nombre del tipo de datos. *T* Los campos pueden ser de cualquier tipo de datos compatible con Timestream y se accede a ellos con el operador de referencia de campos de puntos: <pre>.</pre>  | 
|  `date`  |  Representa una fecha en el formulario`YYYY-MM-DD`. Dónde *YYYY* está el año, *MM* el mes y *DD* el día, respectivamente. El rango admitido es de `1970-01-01` a `2262-04-11`.   *Ejemplo:*  <pre>1971-02-03</pre>  | 
|  `time`  |  Representa la hora del día en [UTC](https://en.wikipedia.org/wiki/Coordinated_Universal_Time). El tipo de datos `time` se representa de la siguiente manera: `HH.MM.SS.sssssssss.` admite una precisión de nanosegundos.   *Ejemplo:*  <pre>17:02:07.496000000</pre>  | 
|  `timestamp`  |  Representa una instancia en el tiempo mediante el tiempo de precisión de nanosegundos en UTC. `YYYY-MM-DD hh:mm:ss.sssssssss` Query admite marcas de tiempo en el intervalo de `1677-09-21 00:12:44.000000000` a `2262-04-11 23:47:16.854775807`.  | 
|  `interval`  |  Representa un intervalo de tiempo como una cadena literal`Xt`, compuesta por dos partes *X* y*t*.  *X*es un valor numérico mayor o igual que y *t* es una unidad de tiempo`0`, como un segundo o una hora. La unidad no se pluraliza. La unidad de tiempo *t* debe ser una de las cadenas literales siguientes:  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/timestream/latest/developerguide/supported-data-types.html)  *Ejemplos*:  <pre>17s</pre> <pre>12second</pre> <pre>21hour</pre> <pre>2d</pre>  | 
|  `timeseries[row(timestamp, T,...)]`  |  Representa los valores de una medida registrados durante un intervalo de tiempo como un conjunto `array` de objetos `row`. Cada uno `row` contiene uno `timestamp` y uno o más valores de medida del tipo de datos*T*, donde *T* puede ser cualquiera de`bigint`, `boolean``double`, o`varchar`. Las filas se ordenan en orden ascendente por `timestamp`. El tipo de datos *serie temporal* representa los valores de una medida a lo largo del tiempo.  | 
|  `unknown`  |  Representa datos nulos.  | 

# Funcionalidad de serie temporal integrada
<a name="timeseries-specific-constructs"></a>

Timestream for LiveAnalytics proporciona una funcionalidad de series temporales integrada que trata los datos de series temporales como un concepto de primera clase.

La funcionalidad integrada de serie temporal se puede dividir en dos categorías: vistas y funciones.

A continuación, puede leer más sobre cada construcción.

**Topics**
+ [

# Vistas de serie temporal
](timeseries-specific-constructs.views.md)
+ [

# Funciones de serie temporal
](timeseries-specific-constructs.functions.md)

# Vistas de serie temporal
<a name="timeseries-specific-constructs.views"></a>

Timestream for LiveAnalytics admite las siguientes funciones para transformar los datos en el tipo de datos: `timeseries`

**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** es una función de agregación que toma todas las medidas sin procesar de una serie temporal (valores de tiempo y medida) y devuelve un tipo de datos de serie temporal. La sintaxis de esta función es la siguiente: 

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

 donde `<data_type>` es el tipo de datos del valor de la medida y puede ser bigint, boolean, double o varchar. El segundo parámetro no puede ser nulo.

Tenga en cuenta el uso de la CPU de las instancias EC2 almacenadas en una tabla denominada **métricas**, como se muestra a continuación:


| Time | region | az | vpc | instance\$1id | measure\$1name | measure\$1value::double | 
| --- | --- | --- | --- | --- | --- | --- | 
|  2019-12-04 19:00:00.000000000  |  us-east-1  |  us-east-1d  |  vpc-1a2b3c4d  |  i-1234567890abcdef0  |  cpu\$1utilization  |  35,0  | 
|  2019-12-04 19:00:01.000000000  |  us-east-1  |  us-east-1d  |  vpc-1a2b3c4d  |  i-1234567890abcdef0  |  cpu\$1utilization  |  38,2  | 
|  2019-12-04 19:00:02.000000000  |  us-east-1  |  us-east-1d  |  vpc-1a2b3c4d  |  i-1234567890abcdef0  |  cpu\$1utilization  |  45,3  | 
|  2019-12-04 19:00:00.000000000  |  us-east-1  |  us-east-1d  |  vpc-1a2b3c4d  |  i-1234567890abcdef1  |  cpu\$1utilization  |  54,1  | 
|  2019-12-04 19:00:01.000000000  |  us-east-1  |  us-east-1d  |  vpc-1a2b3c4d  |  i-1234567890abcdef1  |  cpu\$1utilization  |  42,5  | 
|  2019-12-04 19:00:02.000000000  |  us-east-1  |  us-east-1d  |  vpc-1a2b3c4d  |  i-1234567890abcdef1  |  cpu\$1utilization  |  3.7  | 

Ejecución de la consulta:

```
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
```

devolverá todas las series que tengan un valor de medida `cpu_utilization`. En este caso, tenemos dos series: 


| region | az | vpc | instance\$1id | cpu\$1utilization | 
| --- | --- | --- | --- | --- | 
|  us-east-1  |  us-east-1d  |  vpc-1a2b3c4d  |  i-1234567890abcdef0  |  [\$1time: 2019-12-04 19:00:00.000000000, measure\$1value::double: 35,0\$1, \$1time: 2019-12-04 19:00:01.000000000, measure\$1value::double: 38,2\$1, \$1time: 2019-12-04 19:00:02.000000000, measure\$1value::double: 45,3\$1]  | 
|  us-east-1  |  us-east-1d  |  vpc-1a2b3c4d  |  i-1234567890abcdef1  |  [\$1time: 2019-12-04 19:00:00.000000000, measure\$1value::double: 35,1\$1, \$1time: 2019-12-04 19:00:01.000000000, measure\$1value::double: 38,5\$1, \$1time: 2019-12-04 19:00:02.000000000, measure\$1value::double: 45,7\$1]  | 

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

 `UNNEST` es una función de tabla que permite transformar los datos de `timeseries` en un modelo plano. La sintaxis es la siguiente: 

 `UNNEST` transforma a `timeseries` en dos columnas, a saber, `time` y `value`. También puede usar alias con UNNEST, como se muestra a continuación: 

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

donde `<alias_name>` es el alias de la tabla plana, `time_alias` es el alias de la columna `time` y `value_alias` es el alias de la columna `value`.

Por ejemplo, considere el escenario en el que algunas de las instancias de EC2 de su flota están configuradas para emitir métricas en un intervalo de 5 segundos, otras emiten métricas en un intervalo de 15 segundos y necesita el promedio de las métricas de todas las instancias con una granularidad de 10 segundos durante las últimas 6 horas. Para obtener estos datos, debe transformar las métricas al modelo de serie temporal mediante **CREATE\$1TIME\$1SERIES.** A continuación, puede usar **INTERPOLATE\$1LINEAR** para obtener los valores faltantes con una granularidad de 10 segundos. Luego, vuelva a transformar los datos en el modelo plano con **UNNEST** y, a continuación, use **AVG** para obtener las métricas medias de todas las instancias.

```
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 consulta anterior demuestra el uso de **UNNEST** con un alias. A continuación, se muestra un ejemplo de la misma consulta sin usar un alias para **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
```

# Funciones de serie temporal
<a name="timeseries-specific-constructs.functions"></a>

Amazon Timestream LiveAnalytics for admite funciones de series temporales, como derivadas, integrales y correlaciones, entre otras, para obtener información más profunda a partir de los datos de series temporales. En esta sección, se proporciona información sobre el uso de cada una de estas funciones, así como ejemplos de consultas. Seleccione un tema a continuación para obtener más información al respecto. 

**Topics**
+ [

# Funciones de interpolación
](timeseries-specific-constructs.functions.interpolation.md)
+ [

# Funciones de derivadas
](timeseries-specific-constructs.functions.derivatives.md)
+ [

# Funciones integrales
](timeseries-specific-constructs.functions.integrals.md)
+ [

# Funciones de correlación
](timeseries-specific-constructs.functions.correlation.md)
+ [

# Funciones de filtrado y reducción
](timeseries-specific-constructs.functions.filter-reduce.md)

# Funciones de interpolación
<a name="timeseries-specific-constructs.functions.interpolation"></a>

Si a los datos de serie temporal les faltan valores para los eventos en determinados momentos, puede estimar los valores de esos eventos faltantes mediante la interpolación. Amazon Timestream admite cuatro variantes de interpolación: interpolación lineal, interpolación de spline cúbica, interpolación de última observación transferida (locf) e interpolación constante. En esta sección se proporciona información sobre el uso de Timestream para las funciones de LiveAnalytics interpolación, así como ejemplos de consultas. 



## Información de uso
<a name="w2aab7c59c13c13c11b7"></a>


| Función | Tipo de datos de salida | Description (Descripción) | 
| --- | --- | --- | 
|  `interpolate_linear(timeseries, array[timestamp])`  |  Serie temporal  |  Rellena los datos faltantes mediante [interpolación lineal](https://wikipedia.org/wiki/Linear_interpolation).  | 
|  `interpolate_linear(timeseries, timestamp)`  |  double  |  Rellena los datos faltantes mediante [interpolación lineal](https://wikipedia.org/wiki/Linear_interpolation).  | 
|  `interpolate_spline_cubic(timeseries, array[timestamp])`  |  Serie temporal  |  Rellena los datos faltantes mediante la [interpolación de ranuras cúbicas](https://wikiversity.org/wiki/Cubic_Spline_Interpolation#:~:text=Cubic%20spline%20interpolation%20is%20a,Lagrange%20polynomial%20and%20Newton%20polynomial.).  | 
|  `interpolate_spline_cubic(timeseries, timestamp)`  |  double  |  Rellena los datos faltantes mediante la [interpolación de ranuras cúbicas](https://wikiversity.org/wiki/Cubic_Spline_Interpolation#:~:text=Cubic%20spline%20interpolation%20is%20a,Lagrange%20polynomial%20and%20Newton%20polynomial.).  | 
|  `interpolate_locf(timeseries, array[timestamp])`  |  Serie temporal  |  Rellena los datos faltantes con el último valor muestreado.  | 
|  `interpolate_locf(timeseries, timestamp)`  |  double  |  Rellena los datos faltantes con el último valor muestreado.  | 
|  `interpolate_fill(timeseries, array[timestamp], double)`  |  Serie temporal  |  Rellena los datos faltantes con un valor constante.  | 
|  `interpolate_fill(timeseries, timestamp, double)`  |  double  |  Rellena los datos faltantes con un valor constante.  | 

## Consultas de ejemplo
<a name="w2aab7c59c13c13c11b9"></a>

**Example**  
Calcular la media de uso de la CPU agrupada en intervalos de 30 segundos para un host EC2 específico durante las últimas 2 horas, y rellenar los valores faltantes mediante la interpolación lineal:  

```
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**  
Calcular la media de uso de la CPU agrupada en intervalos de 30 segundos para un host EC2 específico durante las últimas 2 horas, y rellenar los valores faltantes mediante la interpolación lineal en función de la última observación disponible:  

```
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)
```

# Funciones de derivadas
<a name="timeseries-specific-constructs.functions.derivatives"></a>

Las derivadas se utilizan para calcular la tasa de cambio de una métrica determinada y se pueden usar para responder de forma proactiva a un evento. Por ejemplo, supongamos que calcula la derivada del uso de la CPU de las instancias EC2 durante los últimos 5 minutos y observa una derivada positiva significativa. Esto puede ser indicativo de un aumento de la demanda de su carga de trabajo, por lo que puede decidir activar más instancias de EC2 para gestionar mejor su carga de trabajo. 

Amazon Timestream admite dos variantes de funciones derivadas. En esta sección se proporciona información de uso del Timestream para funciones LiveAnalytics derivadas, así como ejemplos de consultas. 



## Información de uso
<a name="w2aab7c59c13c13c13b9"></a>


| Función | Tipo de datos de salida | Description (Descripción) | 
| --- | --- | --- | 
|  `derivative_linear(timeseries, interval)`  |  Serie temporal  |  Calcula la [derivada](https://wikipedia.org/wiki/Derivative) de cada punto en la `timeseries` para el `interval` especificado.  | 
|  `non_negative_derivative_linear(timeseries, interval)`  |  Serie temporal  |  Igual que `derivative_linear(timeseries, interval)`, pero solo devuelve valores positivos.  | 

## Consultas de ejemplo
<a name="w2aab7c59c13c13c13c11"></a>

**Example**  
Calcule la tasa de cambio en el uso de la CPU cada 5 minutos durante la última hora:  

```
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**  
Calcule la tasa de aumento de los errores que se generan por uno o más microservicios:  

```
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
```

# Funciones integrales
<a name="timeseries-specific-constructs.functions.integrals"></a>

Puede usar integrales para encontrar el área bajo la curva por unidad de tiempo para sus eventos de serie temporal. Por ejemplo, supongamos que hace un seguimiento del volumen de solicitudes que recibe su aplicación por unidad de tiempo. En este escenario, puede usar la función integral para determinar el volumen total de solicitudes atendidas por intervalo especificado durante un período específico.

Amazon Timestream admite una variante de funciones integrales. En esta sección se proporciona información de uso de la función Timestream para LiveAnalytics integral, así como ejemplos de consultas. 



## Información de uso
<a name="w2aab7c59c13c13c15b9"></a>


| Función | Tipo de datos de salida | Description (Descripción) | 
| --- | --- | --- | 
|  `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  |  Aproxima la [integral](https://wikipedia.org/wiki/Integral) según el `interval day to second` que se especifique para el `timeseries` que proporcione, mediante la regla [trapezoidal](https://wikipedia.org/wiki/Trapezoidal_rule). El parámetro de intervalo de día a segundo es opcional, y el valor predeterminado es `1s`. Para obtener más información acerca de los intervalos, consulte [Intervalo y duración](date-time-functions.md#date-time-functions-interval-duration).  | 

## Consultas de ejemplo
<a name="w2aab7c59c13c13c15c11"></a>

**Example**  
Calcula el volumen total de solicitudes que se atienden cada cinco minutos durante la última hora por medio de un host específico:  

```
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
```

# Funciones de correlación
<a name="timeseries-specific-constructs.functions.correlation"></a>

Dadas dos series temporales de longitud similar, las funciones de correlación proporcionan un coeficiente de correlación, que explica la tendencia de las dos series temporales a lo largo del tiempo. El coeficiente de correlación varía de `-1.0` a `1.0`. `-1.0` indica que las dos series temporales tienden en direcciones opuestas a la misma velocidad, mientras que `1.0` indica que las dos series temporales tienden en la misma dirección y a la misma velocidad. Un valor de `0` indica que no hay correlación entre las dos series temporales. Por ejemplo, si el precio del petróleo aumenta y el precio de las acciones de una empresa petrolera aumenta, la tendencia del aumento del precio del petróleo y el aumento del precio de la empresa petrolera tendrán un coeficiente de correlación positivo. Un coeficiente de correlación positivo alto indicaría que los dos precios tienen una tendencia similar. Del mismo modo, el coeficiente de correlación entre los precios y los rendimientos de los bonos es negativo, lo que indica que estos dos valores tienen una tendencia en la dirección opuesta a lo largo del tiempo.

Amazon Timestream admite dos variantes de funciones de correlación. En esta sección se proporciona información sobre el uso del Timestream para las funciones de LiveAnalytics correlación, así como ejemplos de consultas. 



## Información de uso
<a name="w2aab7c59c13c13c19c11"></a>


| Función | Tipo de datos de salida | Description (Descripción) | 
| --- | --- | --- | 
|  `correlate_pearson(timeseries, timeseries)`  |  double  |  Calcula el [coeficiente de correlación de Pearson](https://wikipedia.org/wiki/Pearson_correlation_coefficient) para las dos `timeseries`. Las series temporales deben tener las mismas marcas de tiempo.  | 
|  `correlate_spearman(timeseries, timeseries)`  |  double  |  Calcula el [coeficiente de correlación de Spearman](https://en.wikipedia.org/wiki/Spearman%27s_rank_correlation_coefficient) para las dos `timeseries`. Las series temporales deben tener las mismas marcas de tiempo.  | 

## Consultas de ejemplo
<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
```

# Funciones de filtrado y reducción
<a name="timeseries-specific-constructs.functions.filter-reduce"></a>

Amazon Timestream admite funciones para realizar operaciones de filtrado y reducción de datos de serie temporal. En esta sección se proporciona información sobre el uso del Timestream para las funciones de LiveAnalytics filtrado y reducción, así como ejemplos de consultas. 



## Información de uso
<a name="w2aab7c59c13c13c23b7"></a>


| Función | Tipo de datos de salida | Description (Descripción) | 
| --- | --- | --- | 
|  `filter(timeseries(T), function(T, Boolean))`  |  timeseries(T)  |  Construye una serie temporal a partir de una serie temporal de entrada, que usa valores para los que la `function` que se pasa devuelve `true`.  | 
|  `reduce(timeseries(T), initialState S, inputFunction(S, T, S), outputFunction(S, R))`  |  R  |  Devuelve un valor único, reducido de la serie temporal. Se invocará `inputFunction` en cada elemento de la serie temporal en orden. Además de tomar el elemento actual, InputFunction toma el estado actual (inicialmente `initialState`) y devuelve el nuevo estado. Se invocará `outputFunction` para convertir el estado final en el valor resultante. `outputFunction` puede ser una función de identidad.  | 

## Consultas de ejemplo
<a name="w2aab7c59c13c13c23b9"></a>

**Example**  
Cree una serie temporal del uso de la CPU de un host y filtre los puntos con una medición superior a 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**  
Cree una serie temporal del uso de la CPU de un host y determine la suma al cuadrado de las medidas:  

```
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**  
Cree una serie temporal del uso de la CPU de un host y determine la fracción de muestras que están por encima del umbral de la CPU:  

```
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
```

# Compatibilidad con SQL
<a name="supported-sql-constructs"></a>

Timestream for LiveAnalytics es compatible con algunas construcciones SQL comunes. Puede obtener más información a continuación.

**Topics**
+ [

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

# Soporte de subconsultas
](supported-sql-constructs.subquery-support.md)
+ [

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

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

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

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

Las instrucciones **SELECT** se pueden usar para recuperar datos de una o más tablas. El lenguaje de consulta de Timestream también admite la siguiente sintaxis para las instrucciones **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 ] ]
```

donde 
+ `function (expression)` es una de las [funciones de ventana](window-functions.md) compatibles.
+ `partition_expr_list` es:

  ```
  expression | column_name [, expr_list ]
  ```
+ `order_list` es:

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

  ```
  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` es uno de los siguientes:

  ```
  table_name [ [ AS ] alias [ ( column_alias [, ...] ) ] ]
  from_item join_type from_item [ ON join_condition | USING ( join_column [, ...] ) ]
  ```
+ `join_type` es uno de los siguientes:

  ```
  [ INNER ] JOIN
  LEFT [ OUTER ] JOIN
  RIGHT [ OUTER ] JOIN
  FULL [ OUTER ] JOIN
  ```
+ `grouping_element` es uno de los siguientes:

  ```
  ()
  expression
  ```

# Soporte de subconsultas
<a name="supported-sql-constructs.subquery-support"></a>

 Timestream admite subconsultas en predicados `EXISTS` y `IN`. El predicado `EXISTS` determina si una subconsulta devuelve alguna fila. El predicado `IN` determina si los valores que produce la subconsulta coinciden con los valores o la expresión de la cláusula IN. El lenguaje de consultas Timestream admite subconsultas correlacionadas y de otro tipo. 

```
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  | 

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

Puede ver todas las bases de datos de una cuenta mediante la instrucción `SHOW DATABASES`. La sintaxis es la siguiente:

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

donde la cláusula `LIKE` se puede usar para filtrar los nombres de las bases de datos.

Puede ver todas las tablas de una cuenta mediante la instrucción `SHOW TABLES`. La sintaxis es la siguiente:

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

donde la cláusula `FROM` se puede usar para filtrar los nombres de las bases de datos, y la cláusula `LIKE` se puede usar para filtrar los nombres de las tablas.

Puede ver todas las medidas de una tabla mediante la instrucción `SHOW MEASURES`. La sintaxis es la siguiente:

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

donde la cláusula `FROM` se usará para especificar el nombre de la base de datos y la tabla, y la cláusula `LIKE` se puede usar para filtrar los nombres de las medidas.

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

Puede ver los metadatos de una tabla mediante la instrucción `DESCRIBE`. La sintaxis es la siguiente:

```
DESCRIBE database.table
```

donde `table` contiene el nombre de la tabla. La instrucción describir devuelve los nombres de las columnas y los tipos de datos de la tabla.

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

Timestream for LiveAnalytics admite un `UNLOAD` comando como extensión de su compatibilidad con SQL. Los tipos de datos compatibles con `UNLOAD` se describen en [Tipos de datos compatibles](supported-data-types.md). Los tipos `time` y `unknown` no se aplican a `UNLOAD`.

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

donde la opción es

```
{ 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>'
}
```

Instrucción de selección  
La sentencia de consulta utilizada para seleccionar y recuperar datos de uno o más Timestream para tablas. LiveAnalytics   

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

Cláusula TO  

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

```
TO 's3://access-point-alias/folder'
```
La cláusula `TO` en la instrucción `UNLOAD` especifica el destino de la salida de los resultados de la consulta. Debe proporcionar la ruta completa, incluido el nombre del bucket de Amazon S3 o Amazon S3 access-point-alias con la ubicación de la carpeta en Amazon S3 donde Timestream for LiveAnalytics escribe los objetos del archivo de salida. El bucket de S3 debe pertenecer a la misma cuenta y estar en la misma región. Además del conjunto de resultados de la consulta, Timestream for LiveAnalytics escribe los archivos de manifiesto y metadatos en la carpeta de destino especificada. 

Cláusula PARTITIONED\$1BY  

```
partitioned_by = ARRAY [col_name[,…] , (default: none)
```
La cláusula `partitioned_by` se usa en las consultas para agrupar y analizar los datos a un nivel granular. Al exportar los resultados de la consulta al bucket de S3, puede elegir dividir los datos en función de una o más columnas de la consulta seleccionada. Al particionar los datos, los datos exportados se dividen en subconjuntos según la columna de partición y cada subconjunto se almacena en una carpeta independiente. Dentro de la carpeta de resultados que contiene los datos exportados, se crea automáticamente una subcarpeta `folder/results/partition column = partition value/`. Sin embargo, tenga en cuenta que las columnas particionadas no se incluyen en el archivo de salida.   
`partitioned_by` no es una cláusula obligatoria en la sintaxis. Si opta por exportar los datos sin ninguna partición, puede excluir la cláusula de la sintaxis.   

**Example**  
Supongamos que está supervisando los datos del flujo de clics de su sitio web y tiene 5 canales de tráfico, a saber, `direct`, `Social Media`, `Organic Search`, `Other` y `Referral`. Al exportar los datos, puede optar por particionarlos mediante la columna `Channel`. Dentro de la carpeta de datos, `s3://bucketname/results`, tendrá cinco carpetas, cada una con su nombre de canal respectivo. Por ejemplo, `s3://bucketname/results/channel=Social Media/.`. Dentro de esta carpeta, encontrará los datos de todos los clientes que llegaron a tu sitio web a través del canal `Social Media`. Del mismo modo, dispondrá de otras carpetas para el resto de los canales.
Datos exportados particionados por columna de canales  

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


FORMAT  

```
format = [ '{ CSV | PARQUET }' , default: CSV
```
Las palabras clave para especificar el formato de los resultados de la consulta que se escriben en su bucket de S3. Puede exportar los datos como valores separados por comas (CSV) que usan coma (,) como delimitador predeterminado o en el formato Apache Parquet, un eficaz formato de almacenamiento en columnas abiertas para el análisis. 

COMPRESSION  

```
compression = [ '{ GZIP | NONE }' ], default: GZIP
```
Puede comprimir los datos exportados mediante el algoritmo de compresión GZIP o descomprimirlos si especifica la opción `NONE`.

ENCRYPTION  

```
encryption = [ '{ SSE_KMS | SSE_S3 }' ], default: SSE_S3
```
Los archivos de salida en Amazon S3 se cifran mediante la opción de cifrado que haya seleccionado. Además de sus datos, los archivos de manifiesto y metadatos también se cifran en función de la opción de cifrado que haya seleccionado. Actualmente, admitimos el cifrado SSE\$1S3 y SSE\$1KMS. SSE\$1S3 es un cifrado del lado del servidor en el que Amazon S3 cifra los datos mediante el cifrado estándar de cifrado avanzado (AES) de 256 bits. El SSE\$1KMS es un cifrado del lado del servidor para cifrar los datos mediante claves administradas por el cliente.

KMS\$1KEY  

```
kms_key = '<string>'
```
La clave KMS es una clave definida por el cliente para cifrar los resultados de las consultas exportadas. Key Management Service (KMS) gestiona de forma segura la AWS clave AWS KMS y se utiliza para cifrar archivos de datos en Amazon S3.

FIELD\$1DELIMITER  

```
field_delimiter ='<character>' , default: (,)
```
Al exportar los datos en formato CSV, este campo especifica un carácter ASCII único que se utiliza para separar campos en el archivo de salida, como un carácter de barra vertical (\$1), una coma (,) o una tabulación (\$1t). El delimitador predeterminado para los archivos CSV es un carácter de coma. Si un valor de los datos contiene el delimitador elegido, el delimitador aparecerá entre comillas. Por ejemplo, si el valor de sus datos contiene `Time,stream`, este valor se indicará como `"Time,stream"` en los datos exportados. El carácter de comilla utilizado por Timestream LiveAnalytics son comillas dobles («).  
Evite especificar el carácter de retorno (ASCII 13, hexadecimal `0D`, texto “\$1r”) o el carácter de salto de línea (ASCII 10, hexadecimal 0A, texto “\$1n”) como `FIELD_DELIMITER` si desea incluir encabezados en el CSV, ya que esto impedirá que muchos analizadores puedan analizar los encabezados correctamente en la salida CSV resultante.

ESCAPED\$1BY  

```
escaped_by = '<character>', default: (\)
```
Al exportar los datos en formato CSV, este campo especifica el carácter que debe tratarse como un carácter de escape en el archivo de datos escrito en el bucket de S3. Esto ocurre en las siguientes situaciones:  

1. Si el valor en sí contiene el carácter entre comillas ("), se escapará mediante un carácter de escape. Por ejemplo, si el valor es `Time"stream`, donde (\$1) es el carácter de escape configurado, se escapa como `Time\"stream`. 

1. Si el valor contiene el carácter de escape configurado, se escapará. Por ejemplo, si el valor es `Time\stream`, se escapará como `Time\\stream`. 
Si la salida exportada contiene tipos de datos complejos, como matrices, filas o series temporales, se serializará como una cadena JSON. A continuación se muestra un ejemplo.    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/timestream/latest/developerguide/supported-sql-constructs.UNLOAD.html)

INCLUDE\$1HEADER  

```
include_header = 'true' , default: 'false'
```
Al exportar los datos en formato CSV, este campo le permite incluir los nombres de las columnas como la primera fila de los archivos de datos CSV exportados.  
Los valores aceptados son “verdadero” y “falso” y el valor predeterminado es “falso”. Las opciones de transformación de texto, como `escaped_by` y `field_delimiter`, se aplican también a los encabezados.  
Al incluir encabezados, es importante no seleccionar un carácter de retorno (ASCII 13, hexadecimal 0D, texto “\$1r”) o un carácter de salto de línea (ASCII 10, hexadecimal 0A, texto “\$1n”) como `FIELD_DELIMITER`, ya que esto impedirá que muchos analizadores puedan analizar correctamente los encabezados en la salida CSV resultante.

MAX\$1FILE\$1SIZE  

```
max_file_size = 'X[MB|GB]' , default: '78GB'
```
Este campo especifica el tamaño máximo de los archivos que la instrucción `UNLOAD` crea en Amazon S3. La instrucción `UNLOAD` puede crear varios archivos, pero el tamaño máximo de cada archivo escrito en Amazon S3 será aproximadamente el que se especifique en este campo.  
El valor debe estar comprendido entre 16 MB y 78 GB, ambos incluidos. Puede especificarlo en números enteros, como `12GB`, o en decimales, como `0.5GB` o `24.7MB`. El valor predeterminado es 78 GB.  
El tamaño real del archivo es aproximado cuando se está escribiendo el archivo, por lo que es posible que el tamaño real máximo no sea exactamente igual al número que especifique.

# Logical operators (Operadores lógicos)
<a name="logical-operators"></a>

Timestream for LiveAnalytics admite los siguientes operadores lógicos.


| Operador | Description (Descripción) | Ejemplo | 
| --- | --- | --- | 
|  AND  |  Verdadero si ambos valores son verdaderos  |  a AND b  | 
|  OR  |  Verdadero si alguno de los valores es verdadero  |  a OR b  | 
|  NOT  |  Verdadero si el valor es falso  |  NOT a  | 
+ El resultado de una comparación `AND` puede ser `NULL` si uno o ambos lados de la expresión son `NULL`. 
+ Si al menos un lado de un operador `AND` es `FALSE`, el resultado de la expresión es `FALSE`. 
+ El resultado de una comparación `OR` puede ser `NULL` si uno o ambos lados de la expresión son `NULL`. 
+ Si al menos un lado de un operador `OR` es `TRUE`, el resultado de la expresión es `TRUE`. 
+ El complemento lógico de `NULL` es `NULL`. 

La siguiente tabla de verdad muestra el manejo de `NULL` en `AND` y `OR`:


| A | B | A and b | A or b | 
| --- | --- | --- | --- | 
|  null  |  nulo  |  nulo  |  null  | 
|  false   |  null  |  false  |  null  | 
|  null  |  false  |  false  |  null  | 
|  true  |  null  |  null  |  true  | 
|  null  |  true  |  null  |  true  | 
|  false  |  false  |  false  |  false  | 
|  true  |  false  |  false  |  true  | 
|  false  |  true  |  false  |  true  | 
|  true  |  true  |  true  |  true  | 

La siguiente tabla de verdad muestra el manejo de NULL en NOT:


| A | Not a | 
| --- | --- | 
|  null  |  null  | 
|  true  |  false  | 
|  false  |  true  | 

# Operadores de comparación
<a name="comparison-operators"></a>

Timestream for LiveAnalytics admite los siguientes operadores de comparación.


| Operador | Description (Descripción) | 
| --- | --- | 
|  <  |  Menor que  | 
|  >  |  Mayor que  | 
|  <=  |  Menor o igual que  | 
|  >=  |  Mayor o igual que  | 
|  =  |  Igualdad  | 
|  <>  |  Desigualdad  | 
|  \$1=  |  Desigualdad  | 

**nota**  
El operador `BETWEEN` comprueba si un valor está dentro de un rango especificado. La sintaxis es la siguiente:  

  ```
  BETWEEN min AND max
  ```
La presencia de `NULL` en una instrucción `BETWEEN` o `NOT BETWEEN` hará que la instrucción se evalúe como `NULL`.
Los operadores `IS NULL ` y `IS NOT NULL` comprueban si un valor es nulo (indefinido). Si se utiliza `NULL` con `IS NULL`, el resultado es verdadero.
En SQL, un valor `NULL` significa un valor desconocido.

# Funciones de comparación
<a name="comparison-functions"></a>

Timestream for LiveAnalytics admite las siguientes funciones de comparación.

**Topics**
+ [

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

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

# ALL(), ANY() y SOME()
](comparison-functions.all-any-some.md)

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

La función **greatest()** devuelve el mayor de los valores proporcionados. Devuelve `NULL` si alguno de los valores proporcionados es `NULL`. La sintaxis es la siguiente.

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

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

La función **least()** devuelve el menor de los valores proporcionados. Devuelve `NULL` si alguno de los valores proporcionados es `NULL`. La sintaxis es la siguiente.

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

# ALL(), ANY() y SOME()
<a name="comparison-functions.all-any-some"></a>

Los cuantificadores `ALL`, `ANY` y `SOME` se pueden usar junto con los operadores de comparación de la siguiente manera.


| Expression | Significado | 
| --- | --- | 
|  A = ALL(…)  |  Se evalúa como verdadero cuando A es igual a todos los valores.  | 
|  A <> ALL(…)  |  Se evalúa como verdadero cuando A no coincide con ningún valor.  | 
|  A < ALL(…)  |  Se evalúa como verdadero cuando A es menor que el valor más pequeño.  | 
|  A = ANY(…)  |  Se evalúa como verdadero cuando A es igual que cualquiera de los valores.   | 
|  A <> ANY(…)  |  Se evalúa como verdadero cuando A no coincide con uno o más valores.  | 
|  A < ANY(…)  |  Se evalúa como verdadero cuando A es menor que el valor mayor.  | 

## Ejemplo y notas de uso
<a name="comparison-functions.all-any-some.examples-usage"></a>

**nota**  
Cuando se usa `ALL`, `ANY` o `SOME`, se debe usar la palabra clave `VALUES` si los valores de comparación son una lista de literales. 

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

Un ejemplo de `ANY()` en una instrucción de consulta es el siguiente.

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

Una sintaxis alternativa para la misma operación es la siguiente.

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

En este caso, `ANY()` se evalúa como `True`.

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

Un ejemplo de `ALL()` en una instrucción de consulta es el siguiente.

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

Una sintaxis alternativa para la misma operación es la siguiente.

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

En este caso, `ALL()` se evalúa como `False`.

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

Un ejemplo de `SOME()` en una instrucción de consulta es el siguiente.

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

Una sintaxis alternativa para la misma operación es la siguiente.

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

En este caso, `SOME()` se evalúa como `True`.

# Expresiones condicionales
<a name="conditional-expressions"></a>

Timestream for LiveAnalytics admite las siguientes expresiones condicionales.

**Topics**
+ [

# La instrucción CASE
](conditional-expressions.CASE.md)
+ [

# La instrucción IF
](conditional-expressions.IF.md)
+ [

# La instrucción COALESCE
](conditional-expressions.COALESCE.md)
+ [

# La instrucción NULLIF
](conditional-expressions.NULLIF.md)
+ [

# La instrucción TRY
](conditional-expressions.TRY.md)

# La instrucción CASE
<a name="conditional-expressions.CASE"></a>

La instrucción **CASE** busca cada expresión de valor de izquierda a derecha hasta encontrar una que sea igual a `expression`. Si encuentra una coincidencia, se devuelve el resultado del valor coincidente. Si no se encuentra ninguna coincidencia, se devuelve el resultado de la cláusula `ELSE`, si existe; de lo contrario, se devuelve `null`. La sintaxis es la siguiente:

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

 Timestream también admite la siguiente sintaxis para las instrucciones **CASE**. En esta sintaxis, el formulario “buscado” evalúa cada condición booleana de izquierda a derecha hasta que aparezca una `true` y devuelve el resultado coincidente. Si no hay condiciones `true`, se devuelve el resultado de la cláusula `ELSE` si existe; de lo contrario, se devuelve`null`. Consulte la sintaxis alternativa a continuación: 

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

# La instrucción IF
<a name="conditional-expressions.IF"></a>

La instrucción **IF** evalúa una condición como verdadera o falsa y devuelve el valor adecuado. Timestream admite las dos siguientes representaciones sintácticas para **IF**:

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

Esta sintaxis evalúa y devuelve `true_value` si la condición es `true`; de lo contrario, se devuelve `null` y `true_value` no se evalúa.

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

Esta sintaxis evalúa y devuelve `true_value` si la condición es `true`; de lo contrario, se evalúa y devuelve `false_value`.

## Ejemplos
<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 instrucción COALESCE
<a name="conditional-expressions.COALESCE"></a>

 **COALESCE** devuelve el primer valor no nulo en una lista de argumentos. La sintaxis es la siguiente:

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

# La instrucción NULLIF
<a name="conditional-expressions.NULLIF"></a>

La instrucción **IF** evalúa una condición como verdadera o falsa y devuelve el valor adecuado. Timestream admite las dos siguientes representaciones sintácticas para **IF**:

**NULLIF** devuelve nulo si `value1` es igual a `value2`; de lo contrario, devuelve `value1`. La sintaxis es la siguiente:

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

# La instrucción TRY
<a name="conditional-expressions.TRY"></a>

La función **TRY** evalúa una expresión y la devuelve `null` para tratar ciertos tipos de errores. La sintaxis es la siguiente:

```
try(expression)
```

# Funciones de conversión
<a name="conversion-functions"></a>

Timestream for LiveAnalytics admite las siguientes funciones de conversión.

**Topics**
+ [

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

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

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

 La sintaxis de la función cast para convertir explícitamente un valor como un tipo es la siguiente.

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

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

Timestream for LiveAnalytics también admite la función try\$1cast, que es similar a cast, pero devuelve un valor nulo si la transmisión falla. La sintaxis es la siguiente.

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

# Operadores matemáticos
<a name="mathematical-operators"></a>

Timestream for LiveAnalytics admite los siguientes operadores matemáticos.


| Operador | Description (Descripción) | 
| --- | --- | 
|  \$1  |  Suma  | 
|  -  |  Resta  | 
|  \$1  |  Multiplicación  | 
|  /  |  División (la división de enteros realiza el truncamiento)  | 
|  %  |  Módulo (resto)  | 

# Funciones matemáticas
<a name="mathematical-functions"></a>

Timestream for LiveAnalytics admite las siguientes funciones matemáticas.


| Función | Tipo de datos de salida | Description (Descripción) | 
| --- | --- | --- | 
|  abs(x)  |  [igual que la entrada]  |  Devuelve el valor absoluto de x.  | 
|  cbrt(x)  |  double  |  Devuelve la raíz cúbica de x.  | 
|  ceiling(x) o ceil(x)  |  [igual que la entrada]  |  Devuelve x que se redondea a la alta al número entero más cercano.  | 
|  degrees(x)  |  double  |  Convierte el ángulo x en radianes en grados.  | 
|  e()  |  double  |  Devuelve el valor constante del número de Euler.  | 
|  exp(x)  |  double  |  Devuelve e (número de Euler) elevado a la potencia de x.  | 
|  floor(x)  |  [igual que la entrada]  |  Devuelve x que se redondea a la baja al número entero más cercano.  | 
|  from\$1base(cadena, raíz)  |  bigint  |  Devuelve el valor de la cadena interpretada como un número base-radical.  | 
|  ln(x)  |  double  |  Devuelve el logaritmo natural de x.  | 
|  log2(x)  |  double  |  Devuelve el logaritmo de base 2 de x.  | 
|  log10(x)  |  double  |  Devuelve el logaritmo de base 10 de x.  | 
|  mod(n,m)   |  [igual que la entrada]  |  Devuelve el módulo (resto) de n dividido entre m.  | 
|  pi()   |  double  |  Devuelve la constante pi.  | 
|  pow(x, p) o power(x, p)  |  double  |  Devuelve x elevado a la potencia de p.  | 
|  radians(x)  |  double  |  Convierte el ángulo x en grados en radianes.  | 
|  rand() o random()  |  double  |  Devuelve un valor pseudoaleatorio en el rango de 0,0 a 1,0.  | 
|  random(n)  |  [igual que la entrada]  |  Devuelve un número pseudoaleatorio entre 0 y n (exclusivo).  | 
|  round(x)  |  [igual que la entrada]  |  Devuelve x redondeado al entero más cercano.  | 
|  round(x,d)  |  [igual que la entrada]  |  Devuelve x redondeado a d decimales.  | 
|  sign(x)  |  [igual que la entrada]  |  Devuelve la función signum de x, es decir: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/timestream/latest/developerguide/mathematical-functions.html) Para argumentos dobles, la función devuelve además: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/timestream/latest/developerguide/mathematical-functions.html)  | 
|  sqrt(x)   |  double  |  Devuelve la raíz cuadrada de x.  | 
|  to\$1base(x, radix)   |  varchar  |  Devuelve la representación base-radical de x.  | 
|  truncate(x)   |  double  |  Devuelve x redondeada a un número entero y quita los dígitos después de la coma decimal.  | 
|  acos(x)  |  double  |  Devuelve el arco coseno de x.  | 
|  asin(x)   |  double  |  Devuelve el arco seno de x.  | 
|  atan(x)   |  double  |  Devuelve el arco tangente de x.  | 
|  atan2(y,x)  |  double  |  Devuelve el arco tangente de y/x.  | 
|  cos(x)  |  double  |  Devuelve el coseno de x.  | 
|  cosh(x)  |  double  |  Devuelve el coseno hiperbólico de x.  | 
|  sin(x)   |  double  |  Devuelve el seno de x.  | 
|  tan(x)  |  double  |  Devuelve la tangente de x.  | 
|  tanh(x)  |  double  |  Devuelve la tangente hiperbólica de x.  | 
|  infinity()  |  double  |  Devuelve la constante que representa el infinito positivo.  | 
|  is\$1finite(x)  |  booleano  |  Determina si x es finito.  | 
|  is\$1infinite(x)  |  booleano  |  Determina si x es infinito.  | 
|  is\$1nan(x)  |  booleano  |  Determine si x es. not-a-number  | 
|  nan()  |  double  |  Devuelve la constante que representa not-a-number.  | 

# Operadores de cadena
<a name="string-operators"></a>

Timestream for LiveAnalytics admite el `||` operador para concatenar una o más cadenas.

# Funciones de cadena
<a name="string-functions"></a>

**nota**  
Se supone que el tipo de datos de entrada de estas funciones es varchar, a menos que se especifique lo contrario.


| Función | Tipo de datos de salida | Description (Descripción) | 
| --- | --- | --- | 
|  chr(n)   |  varchar  |  Devuelve el punto de código Unicode n como un varchar.  | 
|  codepoint(x)   |  entero  |  Devuelve el punto de código Unicode del único carácter de str.  | 
|  concat(x1, …, xN)  |  varchar  |  Devuelve la concatenación de x1, x2, …, xN.  | 
|  hamming\$1distance(x1,x2)   |  bigint  |  Devuelve la distancia de Hamming de x1 y x2, es decir, el número de posiciones en las que los caracteres correspondientes son diferentes. Tenga en cuenta que las dos entradas de varchar deben tener la misma longitud.  | 
|  length(x)  |  bigint  |  Devuelve la longitud de x en caracteres.  | 
|  levenshtein\$1distance(x1, x2)   |  bigint  |  Devuelve la distancia de edición de Levenshtein de x1 y x2, es decir, el número mínimo de ediciones de un solo carácter (inserciones, eliminaciones o sustituciones) necesarias para cambiar x1 a x2.  | 
|  lower(x)  |  varchar  |  Cambia x a minúsculas.  | 
|  lpad(x1, tamaño de bigint, x2)  |  varchar  |  Rellena x1 por la izquierda con x2 hasta llegar al tamaño que especifique. Si el tamaño es inferior a x1, el resultado se trunca para ajustar el tamaño de los caracteres. El tamaño no debe ser negativo y x2 no debe estar vacío.  | 
|  ltrim(x)  |  varchar  |  Elimina los espacios en blanco iniciales de x.  | 
|  replace(x1, x2)  |  varchar  |  Elimina todas las instancias de x2 de x1.  | 
|  replace(x1, x2, x3)  |  varchar  |  Sustituye todas las instancias de x2 en x1 por x3.  | 
|  Reverse(x)   |  varchar  |  Devuelve x con los caracteres en orden inverso.  | 
|  rpad(x1, tamaño de bigint, x2)  |  varchar  |  Rellena x1 por la derecha con x2 hasta llegar al tamaño que especifique. Si el tamaño es inferior a x1, el resultado se trunca para ajustar el tamaño de los caracteres. El tamaño no debe ser negativo y x2 no debe estar vacío.  | 
|  rtrim(x)  |  varchar  |  Elimina los espacios en blanco finales de x.  | 
|  split(x1, x2)  |  array(varchar)  |  Divide x1 en el delimitador x2 y devuelve una matriz.  | 
|  split(x1, x2, límite de bigint)  |  array(varchar)  |  Divide x1 en el delimitador x2 y devuelve una matriz. El último elemento de la matriz siempre contiene todo lo que queda en la x1. El límite debe ser un número positivo.  | 
|  split\$1part(x1, x2, bigint pos)   |  varchar  |  Divide x1 en el delimitador x2 y devuelve el campo varchar en pos. Los índices de campo comienzan por 1. Si pos es mayor que el número de campos, se devuelve el valor nulo.  | 
|  strpos(x1, x2)   |  bigint  |  Devuelve la posición inicial de la primera instancia de x2 en x1. Las posiciones comienzan con 1. Si no se encuentra, se devuelve 0.  | 
|  strpos(x1, x2, instancia de bigint)   |  bigint  |  Devuelve la posición de la enésima instancia de x2 en x1. La instancia debe ser un número positivo. Las posiciones comienzan con 1. Si no se encuentra, se devuelve 0.  | 
|  strrpos(x1, x2)   |  bigint  |  Devuelve la posición inicial de la última instancia de x2 en x1. Las posiciones comienzan con 1. Si no se encuentra, se devuelve 0.  | 
|  strrpos(x1, x2, instancia de bigint)   |  bigint  |  Devuelve la posición de la enésima instancia de x2 en x1 empezando por el final de x1. La instancia debe ser un número positivo. Las posiciones comienzan con 1. Si no se encuentra, se devuelve 0.  | 
|  position(x2 EN x1)   |  bigint  |  Devuelve la posición inicial de la primera instancia de x2 en x1. Las posiciones comienzan con 1. Si no se encuentra, se devuelve 0.  | 
|  substr(x, bigint start)   |  varchar  |  Devuelve el resto de x desde la posición inicial start. Las posiciones comienzan con 1. Una posición inicial negativa se interpreta como relativa al final de x.  | 
|  substr(x, bigint start, bigint len)   |  varchar  |  Devuelve una subcadena de x de longitud len desde la posición inicial start. Las posiciones comienzan con 1. Una posición inicial negativa se interpreta como relativa al final de x.  | 
|  trim(x)   |  varchar  |  Elimina todos los espacios en blanco del principio y del final de x.  | 
|  upper(x)   |  varchar  |  Cambia x a mayúsculas.  | 

# Operadores de matrices
<a name="array-operators"></a>

Timestream for admite los siguientes operadores de matriz. LiveAnalytics 


| Operador | Description (Descripción) | 
| --- | --- | 
|  []  |  Acceda a un elemento de una matriz donde el primer índice comience en 1.  | 
|  \$1\$1  |  Concatena una matriz con otra matriz o elemento del mismo tipo.  | 

# Funciones de matriz
<a name="array-functions"></a>

Timestream for LiveAnalytics admite las siguientes funciones de matriz.


| Función | Tipo de datos de salida | Description (Descripción) | 
| --- | --- | --- | 
|  array\$1distinct(x)  |  array  |  Elimina los valores duplicados de la matriz x. <pre>SELECT array_distinct(ARRAY[1,2,2,3])</pre> Ejemplo de resultado: `[ 1,2,3 ]`  | 
|  array\$1intersect(x, y)  |  array  |  Devuelve una matriz de los elementos en la intersección de x e y, sin duplicados. <pre>SELECT array_intersect(ARRAY[1,2,3], ARRAY[3,4,5])</pre> Ejemplo de resultado: `[ 3 ]`  | 
|  array\$1union(x, y)  |  array  |  Devuelve una matriz de los elementos en la unión de x e y, sin duplicados. <pre>SELECT array_union(ARRAY[1,2,3], ARRAY[3,4,5])</pre> Ejemplo de resultado: `[ 1,2,3,4,5 ]`  | 
|  array\$1except(x, y)  |  array  |  Devuelve una matriz de elementos en x, pero no en y, sin duplicados. <pre>SELECT array_except(ARRAY[1,2,3], ARRAY[3,4,5])</pre> Ejemplo de resultado: `[ 1,2 ]`  | 
|  array\$1join(x, delimiter, null\$1replacement)   |  varchar  |  Concatena los elementos de la matriz dada mediante el delimitador y una cadena opcional para reemplazar los valores nulos. <pre>SELECT array_join(ARRAY[1,2,3], ';', '')</pre> Ejemplo de resultado: `1;2;3`  | 
|  array\$1max(x)  |  igual que los elementos de la matriz  |  Devuelve el valor máximo de la matriz de entrada. <pre>SELECT array_max(ARRAY[1,2,3])</pre> Ejemplo de resultado: `3`  | 
|  array\$1min(x)  |  igual que los elementos de la matriz  |  Devuelve el valor mínimo de la matriz de entrada. <pre>SELECT array_min(ARRAY[1,2,3])</pre> Ejemplo de resultado: `1`  | 
|  array\$1position(x, elemento)  |  bigint  |  Devuelve la posición de la primera aparición del elemento en la matriz x (o 0 si no se encuentra). <pre>SELECT array_position(ARRAY[3,4,5,9], 5)</pre> Ejemplo de resultado: `3`  | 
|  array\$1remove(x, elemento)  |  array  |  Elimina todos los elementos que sean iguales al elemento de la matriz x. <pre>SELECT array_remove(ARRAY[3,4,5,9], 4)</pre> Ejemplo de resultado: `[ 3,5,9 ]`  | 
|  array\$1sort(x)  |  array  |  Ordena y devuelve la matriz x. Los elementos de x deben poder ordenarse. Los elementos nulos se colocarán al final de la matriz devuelta. <pre>SELECT array_sort(ARRAY[6,8,2,9,3])</pre> Ejemplo de resultado: `[ 2,3,6,8,9 ]`  | 
|  arrays\$1overlap(x, y)   |  booleano  |  Comprueba si las matrices x e y tienen en común algún elemento que no sea nulo. Devuelve nulo si no hay elementos que no sean nulos en común, pero alguna de las matrices contiene valores nulos. <pre>SELECT arrays_overlap(ARRAY[6,8,2,9,3], ARRAY[6,8])</pre> Ejemplo de resultado: `true`  | 
|  cardinality(x)  |  bigint  |  Devuelve el tamaño de la matriz x. <pre>SELECT cardinality(ARRAY[6,8,2,9,3])</pre> Ejemplo de resultado: `5`  | 
|  concat(matriz1, matriz2, …, matrizN)  |  array  |  Concatena las matrices matriz1, matriz2, …, matrizN. <pre>SELECT concat(ARRAY[6,8,2,9,3], ARRAY[11,32], ARRAY[6,8,2,0,14])</pre> Ejemplo de resultado: `[ 6,8,2,9,3,11,32,6,8,2,0,14 ]`  | 
|  element\$1at(matriz(E), índice)  |  E  |  Devuelve el elemento de la matriz en un índice dado. Si el índice es inferior a 0, element\$1at accede a los elementos desde el último hasta el primero. <pre>SELECT element_at(ARRAY[6,8,2,9,3], 1)</pre> Ejemplo de resultado: `6`  | 
|  repeat(elemento, recuento)   |  array  |  Repita el elemento el número de veces según el recuento. <pre>SELECT repeat(1, 3)</pre> Ejemplo de resultado: `[ 1,1,1 ]`  | 
|  reverse(x)  |  array  |  Devuelve una matriz que tiene el orden inverso al de la matriz x. <pre>SELECT reverse(ARRAY[6,8,2,9,3])</pre> Ejemplo de resultado: `[ 3,9,2,8,6 ]`  | 
|  sequence(inicio, parada)  |  array(bigint)  |  Genera una secuencia de números enteros desde el principio hasta la parada y la incrementa a razón de 1 si el inicio es menor o igual que la parada; de lo contrario, disminuye a razón de -1. <pre>SELECT sequence(3, 8)</pre> Ejemplo de resultado: `[ 3,4,5,6,7,8 ]`  | 
|  secuencia(inicio, parada, paso)   |  array(bigint)  |  Genera una secuencia de números enteros desde el inicio hasta la parada y la incrementa paso a paso. <pre>SELECT sequence(3, 15, 2)</pre> Ejemplo de resultado: `[ 3,5,7,9,11,13,15 ]`  | 
|  sequence(inicio, parada)   |  array(marca de tiempo)  |  Genera una secuencia de marcas de tiempo desde la fecha de inicio hasta la fecha de parada, y las incrementa en 1 día. <pre>SELECT sequence('2023-04-02 19:26:12.941000000', '2023-04-06 19:26:12.941000000', 1d)</pre> Ejemplo de resultado: `[ 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 ]`  | 
|  secuencia(inicio, parada, paso)   |  array(marca de tiempo)  |  Genera una secuencia de marcas de tiempo desde el principio hasta la parada y las incrementa paso a paso. El tipo de datos del paso es el intervalo. <pre>SELECT sequence('2023-04-02 19:26:12.941000000', '2023-04-10 19:26:12.941000000', 2d)</pre> Ejemplo de resultado: `[ 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 ]`  | 
|  shuffle(x)  |  array  |  Genera una permutación aleatoria de la matriz x dada. <pre>SELECT shuffle(ARRAY[6,8,2,9,3])</pre> Ejemplo de resultado: `[ 6,3,2,9,8 ]`  | 
|  slice(x, inicio, longitud)  |  array  |  Subestablece la matriz x desde el inicio del índice (o desde el final si el inicio es negativo) con la longitud que especifique. <pre>SELECT slice(ARRAY[6,8,2,9,3], 1, 3)</pre> Ejemplo de resultado: `[ 6,8,2 ]`  | 
|  zip(matriz1, matriz2 [, …])  |  array(fila)  |  Fusiona las matrices dadas, por elementos, en una sola matriz de filas. Si los argumentos tienen una longitud irregular, los valores faltantes se rellenan con NULL. <pre>SELECT zip(ARRAY[6,8,2,9,3], ARRAY[15,24])</pre> Ejemplo de resultado: `[ ( 6, 15 ),( 8, 24 ),( 2, - ),( 9, - ),( 3, - ) ]`  | 

# Bitwise functions (Funciones Bitwise)
<a name="bitwise-functions"></a>

Timestream for LiveAnalytics admite las siguientes funciones bit a bit.


| Función | Tipo de datos de salida | Description (Descripción) | 
| --- | --- | --- | 
| bit\$1count(bigint, bigint) | bigint (complemento de dos) |  Devuelve el recuento de bits del primer parámetro de bigint, donde el segundo parámetro es un entero con signo de bits, como 8 o 64. <pre>SELECT bit_count(19, 8)</pre> Ejemplo de resultado: `3` <pre>SELECT bit_count(19, 2)</pre> Ejemplo de resultado: `Number must be representable with the bits specified. 19 can not be represented with 2 bits`   | 
| bitwise\$1and(bigint, bigint) | bigint (complemento de dos) |  Devuelve el AND bit a bit de los parámetros de bigint. <pre>SELECT bitwise_and(12, 7)</pre> Ejemplo de resultado: `4`  | 
| bitwise\$1not(bigint) | bigint (complemento de dos) |  Devuelve el NOT bit a bit del parámetro de bigint. <pre>SELECT bitwise_not(12)</pre> Ejemplo de resultado: `-13`  | 
| bitwise\$1or(bigint, bigint) | bigint (complemento de dos) |  Devuelve el OR bit a bit de los parámetros de bigint. <pre>SELECT bitwise_or(12, 7)</pre> Ejemplo de resultado: `15`  | 
| bitwise\$1xor(bigint, bigint) | bigint (complemento de dos) |  Devuelve el XOR bit a bit de los parámetros de bigint. <pre>SELECT bitwise_xor(12, 7)</pre> Ejemplo de resultado: `11`  | 

# Regular expression functions (Funciones de expresión regular)
<a name="regex-functions"></a>

La expresión regular funciona en Timestream para LiveAnalytics admitir la sintaxis de [patrones de Java](http://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html). Timestream for LiveAnalytics admite las siguientes funciones de expresiones regulares.


| Función | Tipo de datos de salida | Description (Descripción) | 
| --- | --- | --- | 
|  regexp\$1extract\$1all(cadena, patrón)  |  array(varchar)  |  Devuelve las subcadenas que coinciden con el patrón de expresión regular de la cadena. <pre>SELECT regexp_extract_all('example expect complex', 'ex\w')</pre> Ejemplo de resultado: `[ exa,exp ]`  | 
|  regexp\$1extract\$1all(cadena, patrón, grupo)  |  array(varchar)  |  Busca todas las apariciones del patrón de expresión regular en una cadena y devuelve el grupo [numérico del grupo de captura](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> Ejemplo de resultado: `[ a,p ]`  | 
|  regexp\$1extract(cadena, patrón)  |  varchar  |  Devuelve la primera subcadena que coincide con el patrón de expresión regular de la cadena. <pre>SELECT regexp_extract('example expect', 'ex\w')</pre> Ejemplo de resultado: `exa`  | 
|  regexp\$1extract(cadena, patrón, grupo)   |  varchar  |  Busca la primera aparición del patrón de expresión regular en la cadena y devuelve el grupo [numérico del grupo de captura](http://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html#gnumber). <pre>SELECT regexp_extract('example expect', '(ex)(\w)', 2)</pre> Ejemplo de resultado: `a`  | 
|  regexp\$1like(cadena, patrón)   |  booleano  |  Evalúa el patrón de expresión regular y determina si se encuentra contenido dentro de una cadena. Esta función es similar al operador LIKE, excepto en que el patrón solo debe encontrarse contenido en la cadena, en lugar de tener que coincidir con toda la cadena. En otras palabras, realiza una operación de contención en lugar de una operación de coincidencia. Puede anclar el patrón con ^ y \$1 para hacer coincidir toda la cadena. <pre>SELECT regexp_like('example', 'ex')</pre> Ejemplo de resultado: `true`  | 
|  regexp\$1replace(cadena, patrón)  |  varchar  |  Elimina de la cadena todas las instancias de la subcadena que coincidan con el patrón de expresión regular. <pre>SELECT regexp_replace('example expect', 'expect')</pre> Ejemplo de resultado: `example`  | 
|  regexp\$1replace(cadena, patrón, reemplazo)   |  varchar  |  Sustituye todas las instancias de la subcadena que coincidan con el patrón de expresión regular de la cadena por una de reemplazo. Se puede hacer referencia a los grupos de captura en lugar de usar \$1g para un grupo numerado o \$1 \$1name\$1 para un grupo con nombre. Se puede incluir un signo de dólar (\$1) en el reemplazo si lo escapa con una barra invertida (\$1\$1). <pre>SELECT regexp_replace('example expect', 'expect', 'surprise')</pre> Ejemplo de resultado: `example surprise`  | 
|  regexp\$1replace(cadena, patrón, función)   |  varchar  |  Reemplaza todas las instancias de la subcadena que coincidan con el patrón de expresión regular en la cadena mediante la función. La función de [expresión lambda](https://prestodb.io/docs/current/functions/lambda.html) se invoca para cada coincidencia y los grupos de captura se pasan como una matriz. Los números de los grupos de captura comienzan por el número uno; no hay ningún grupo para toda la coincidencia (si lo necesita, ponga toda la expresión entre paréntesis). <pre>SELECT regexp_replace('example', '(\w)', x -> upper(x[1]))</pre> Ejemplo de resultado: `EXAMPLE`  | 
|  regexp\$1split(cadena, patrón)   |  array(varchar)  |  Divide la cadena mediante el patrón de expresión regular y devuelve una matriz. Se conservan las cadenas vacías finales. <pre>SELECT regexp_split('example', 'x')</pre> Ejemplo de resultado: `[ e,ample ]`  | 

# Operadores de fecha y hora
<a name="date-time-operators"></a>

**nota**  
Timestream for no LiveAnalytics admite valores de tiempo negativos. Cualquier operación que dé como resultado un tiempo negativo genera un error.

Timestream for LiveAnalytics admite las siguientes operaciones en`timestamps`, y. `dates` `intervals`


| Operador | Description (Descripción) | 
| --- | --- | 
|  \$1  |  Suma  | 
|  -  |  Resta  | 

**Topics**
+ [

## Operaciones
](#date-time-operators-operations)
+ [

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

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

## Operaciones
<a name="date-time-operators-operations"></a>

El tipo de resultado de una operación se basa en los operandos. Se pueden usar literales de intervalo como `1day` y `3s`.

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

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

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

Ejemplo de resultado para cada uno: `2022-05-23`

Las unidades de intervalo incluyen `second`, `minute`, `hour`, `day`, `week`, `month` y `year`. Sin embargo, en algunos casos no todas aplican. Por ejemplo, los segundos, los minutos y las horas no se pueden sumar ni restar de una fecha.

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

Ejemplo de resultado: `4-2`

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

Ejemplo de resultado: `interval year to month`

El tipo de resultado de las operaciones de intervalo puede ser `'interval year to month'` o `'interval day to second'` según los operandos. Los intervalos se pueden sumar a `dates` y `timestamps` o restarse de estos valores. Pero `date` o `timestamp` no se pueden sumar a `date` o `timestamp` ni restarse de estos valores. Para buscar intervalos o duraciones relacionados con fechas o marcas de tiempo, consulte `date_diff` y funciones relacionadas en [Intervalo y duración](date-time-functions.md#date-time-functions-interval-duration).

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

**Example**  

```
SELECT date '2022-05-21' + interval '2' day
```
Ejemplo de resultado: `2022-05-23`

**Example**  

```
SELECT typeof(date '2022-05-21' + interval '2' day)
```
Ejemplo de resultado: `date`

**Example**  

```
SELECT interval '2' year + interval '4' month
```
Ejemplo de resultado: `2-4`

**Example**  

```
SELECT typeof(interval '2' year + interval '4' month)
```
Ejemplo de resultado: `interval year to month`

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

**Example**  

```
SELECT timestamp '2022-06-17 01:00' - interval '7' hour
```
Ejemplo de resultado: `2022-06-16 18:00:00.000000000`

**Example**  

```
SELECT typeof(timestamp '2022-06-17 01:00' - interval '7' hour)
```
Ejemplo de resultado: `timestamp`

**Example**  

```
SELECT interval '6' day - interval '4' hour
```
Ejemplo de resultado: `5 20:00:00.000000000`

**Example**  

```
SELECT typeof(interval '6' day - interval '4' hour)
```
Ejemplo de resultado: `interval day to second`

# Funciones de fecha y hora
<a name="date-time-functions"></a>

**nota**  
Timestream for no LiveAnalytics admite valores de tiempo negativos. Cualquier operación que dé como resultado un tiempo negativo genera un error.

Timestream for LiveAnalytics utiliza la zona horaria UTC para la fecha y la hora. Timestream admite las siguientes funciones de fecha y hora:

**Topics**
+ [

## Funciones generales y de conversión
](#date-time-functions-general)
+ [

## Intervalo y duración
](#date-time-functions-interval-duration)
+ [

## Formato y análisis
](#date-time-functions-formatting-parsing)
+ [

## Extracción
](#date-time-functions-extraction)

## Funciones generales y de conversión
<a name="date-time-functions-general"></a>

Timestream for LiveAnalytics admite las siguientes funciones generales y de conversión de fecha y hora.


| Función | Tipo de datos de salida | Description (Descripción) | 
| --- | --- | --- | 
|  current\$1date  |  date  |  Devuelve la fecha actual en UTC. No se usan paréntesis. <pre>SELECT current_date</pre> Ejemplo de resultado: `2022-07-07`  También es una palabra clave reservada. Para obtener una lista de palabras clave reservadas, consulte [Palabras clave reservadas](ts-limits.md#limits.reserved).   | 
|  current\$1time  |  hora  |  Devuelve la hora actual en UTC. No se usan paréntesis. <pre>SELECT current_time</pre> Ejemplo de resultado: `17:41:52.827000000`  También es una palabra clave reservada. Para obtener una lista de palabras clave reservadas, consulte [Palabras clave reservadas](ts-limits.md#limits.reserved).   | 
|  current\$1timestamp o now()  |  timestamp  |  Devuelve la marca de tiempo actual en UTC. <pre>SELECT current_timestamp</pre> Ejemplo de resultado: `2022-07-07 17:42:32.939000000`  También es una palabra clave reservada. Para obtener una lista de palabras clave reservadas, consulte [Palabras clave reservadas](ts-limits.md#limits.reserved).   | 
|  current\$1timezone()  |  varchar El valor será “UTC”.  |  Timestream usa la zona horaria UTC para la fecha y la hora. <pre>SELECT current_timezone()</pre> Ejemplo de resultado: `UTC`  | 
|  date(varchar(x)), date(marca de tiempo)  |  date  |  <pre>SELECT date(TIMESTAMP '2022-07-07 17:44:43.771000000')</pre> Ejemplo de resultado: `2022-07-07`  | 
|  last\$1day\$1of\$1month(marca de tiempo), last\$1day\$1of\$1month(fecha)  |  date  |  <pre>SELECT last_day_of_month(TIMESTAMP '2022-07-07 17:44:43.771000000')</pre> Ejemplo de resultado: `2022-07-31`  | 
|  from\$1iso8601\$1timestamp(cadena)  |  timestamp  |  Analiza la marca de tiempo ISO 8601 en un formato de marca de tiempo interno. <pre>SELECT from_iso8601_timestamp('2022-06-17T08:04:05.000000000+05:00')</pre> Ejemplo de resultado: `2022-06-17 03:04:05.000000000`  | 
|  from\$1iso8601\$1date(cadena)  |  date  |  Analiza la cadena de fecha ISO 8601 para convertirla en un formato de marca de tiempo interno para las 00:00:00 UTC de la fecha especificada. <pre>SELECT from_iso8601_date('2022-07-17')</pre> Ejemplo de resultado: `2022-07-17`  | 
|  to\$1iso8601(marca de tiempo), to\$1iso8601(fecha)  |  varchar  |  Devuelve una cadena con formato ISO 8601 para la entrada. <pre>SELECT to_iso8601(from_iso8601_date('2022-06-17'))</pre> Ejemplo de resultado: `2022-06-17`  | 
|  from\$1milliseconds(bigint)  |  timestamp  |  <pre>SELECT from_milliseconds(1)</pre> Ejemplo de resultado: `1970-01-01 00:00:00.001000000`  | 
|  from\$1nanoseconds(bigint)  |  timestamp  |  <pre>select from_nanoseconds(300000001)</pre> Ejemplo de resultado: `1970-01-01 00:00:00.300000001`  | 
|  from\$1unixtime (doble)  |  timestamp  |  Devuelve una marca de tiempo que corresponde al unixtime proporcionado. <pre>SELECT from_unixtime(1)</pre> Ejemplo de resultado: `1970-01-01 00:00:01.000000000`  | 
|  localtime  |  hora  |  Devuelve la hora actual en UTC. No se usan paréntesis. <pre>SELECT localtime</pre> Ejemplo de resultado: `17:58:22.654000000`  También es una palabra clave reservada. Para obtener una lista de palabras clave reservadas, consulte [Palabras clave reservadas](ts-limits.md#limits.reserved).   | 
|  localtimestamp  |  timestamp  |  Devuelve la marca de tiempo actual en UTC. No se usan paréntesis. <pre>SELECT localtimestamp</pre> Ejemplo de resultado: `2022-07-07 17:59:04.368000000`  También es una palabra clave reservada. Para obtener una lista de palabras clave reservadas, consulte [Palabras clave reservadas](ts-limits.md#limits.reserved).   | 
|  to\$1milliseconds(intervalo de un día a un segundo), to\$1milliseconds(marca de tiempo)  |  bigint  |  <pre>SELECT to_milliseconds(INTERVAL '2' DAY + INTERVAL '3' HOUR)</pre> Ejemplo de resultado: `183600000` <pre>SELECT to_milliseconds(TIMESTAMP '2022-06-17 17:44:43.771000000')</pre> Ejemplo de resultado: `1655487883771`  | 
|  to\$1nanoseconds(intervalo de un día a un segundo), to\$1nanoseconds(marca de tiempo)  |  bigint  |  <pre>SELECT to_nanoseconds(INTERVAL '2' DAY + INTERVAL '3' HOUR)</pre> Ejemplo de resultado: `183600000000000` <pre>SELECT to_nanoseconds(TIMESTAMP '2022-06-17 17:44:43.771000678')</pre> Ejemplo de resultado: `1655487883771000678`  | 
|  to\$1unixtime(marca de tiempo)  |  double  |  Devuelve unixtime para la marca de tiempo proporcionada. <pre>SELECT to_unixtime('2022-06-17 17:44:43.771000000')</pre> Ejemplo de resultado: `1.6554878837710001E9`  | 
|  date\$1trunc(unidad, marca de tiempo)  |  timestamp  |  Devuelve la marca de tiempo truncada a la unidad, donde la unidad puede ser una de las siguientes: [segundo, minuto, hora, día, semana, mes, trimestre o año]. <pre>SELECT date_trunc('minute', TIMESTAMP '2022-06-17 17:44:43.771000000')</pre> Ejemplo de resultado: `2022-06-17 17:44:00.000000000`  | 

## Intervalo y duración
<a name="date-time-functions-interval-duration"></a>

Timestream for LiveAnalytics admite las siguientes funciones de intervalo y duración para la fecha y la hora.


| Función | Tipo de datos de salida | Description (Descripción) | 
| --- | --- | --- | 
|  date\$1add(unidad, bigint, fecha), date\$1add(unidad, bigint, hora), date\$1add(varchar (x), bigint, marca de tiempo)  |  timestamp  |  Añade un bigint de unidades, donde la unidad es una de las siguientes: [segundo, minuto, hora, día, semana, mes, trimestre o año]. <pre>SELECT date_add('hour', 9, TIMESTAMP '2022-06-17 00:00:00')</pre> Ejemplo de resultado: `2022-06-17 09:00:00.000000000`  | 
|  date\$1diff(unidad, fecha, fecha), date\$1diff(unidad, hora, hora), date\$1diff(unidad, marca de tiempo, marca de tiempo)  |  bigint  |  Devuelve una diferencia, donde la unidad es una de las siguientes: [segundo, minuto, hora, día, semana, mes, trimestre o año]. <pre>SELECT date_diff('day', DATE '2020-03-01', DATE '2020-03-02')</pre> Ejemplo de resultado: `1`  | 
|  parse\$1duration(cadena)  |  intervalo  |  Analiza la cadena de entrada para devolver un `interval` equivalente. <pre>SELECT parse_duration('42.8ms')</pre> Ejemplo de resultado: `0 00:00:00.042800000` <pre>SELECT typeof(parse_duration('42.8ms'))</pre> Ejemplo de resultado: `interval day to second`  | 
| bin(marca de tiempo, intervalo) | timestamp |  Redondea el valor entero del parámetro `timestamp` al múltiplo más cercano del valor entero del parámetro `interval`. El significado de este valor devuelto puede no ser obvio. Se calcula mediante aritmética de enteros, donde se divide primero el entero de la marca de tiempo por el entero del intervalo y, a continuación, se multiplica el resultado por el entero del intervalo. Si se tiene en cuenta que una marca de tiempo especifica un punto UTC en el tiempo como el número de fracciones de segundo que han transcurrido desde la época POSIX (1 de enero de 1970), el valor devuelto rara vez se alineará con las unidades del calendario. Por ejemplo, si especifica un intervalo de 30 días, todos los días transcurridos desde la época se dividen en incrementos de 30 días y se devuelve el inicio del incremento de 30 días más reciente, que no tiene relación con los meses naturales. Estos son algunos ejemplos: <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>  | 
|  ago(intervalo)  |  timestamp  |  Devuelve el valor correspondiente al `interval` current\$1timestamp. <pre>SELECT ago(1d)</pre> Ejemplo de resultado: `2022-07-06 21:08:53.245000000`  | 
|  Literales de intervalo como 1h, 1d y 30m  |  intervalo  |  Los literales de intervalo son útiles para parse\$1duration(cadena). Por ejemplo, `1d` es igual que `parse_duration('1d')`. Esto permite el uso de los literales siempre que se utilice un intervalo. Por ejemplo, `ago(1d)` y `bin(<timestamp>, 1m)`.  | 

Algunos literales de intervalo actúan como forma abreviada de parse\$1duration. Por ejemplo, `parse_duration('1day')`, `1day`, `parse_duration('1d')` y `1d` devuelven individualmente `1 00:00:00.000000000` de tipo `interval day to second`. Se permite el espacio en el formato que se proporciona a `parse_duration`. Por ejemplo, `parse_duration('1day')` también devuelve `00:00:00.000000000`. Pero `1 day` no es un intervalo literal.

Las unidades correspondientes a `interval day to second` son ns, nanosegundo, us, microsegundo, ms, milisegundo, s, segundo, m, minuto, h, hora, d y día.

También hay `interval year to month`. Las unidades relacionadas con el intervalo de año a mes son y, año, y mes. Por ejemplo, `SELECT 1year` devuelve `1-0`. `SELECT 12month` también devuelve `1-0`. `SELECT 8month`devuelve `0-8`.

Aunque la unidad de `quarter` también está disponible para algunas funciones, como `date_trunc` y `date_add`, `quarter` no está disponible como parte de un intervalo literal.

## Formato y análisis
<a name="date-time-functions-formatting-parsing"></a>

Timestream for LiveAnalytics admite las siguientes funciones de formato y análisis de fecha y hora.


| Función | Tipo de datos de salida | Description (Descripción) | 
| --- | --- | --- | 
|  date\$1format(timestamp, varchar (x))  |  varchar  |  [Para obtener más información sobre los especificadores de formato utilizados por esta función, consulte \$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> Ejemplo de resultado: `2019-10-20 10:20:20`  | 
|  date\$1parse(varchar (x), varchar (y))  |  timestamp  |  [Para obtener más información sobre los especificadores de formato utilizados por esta función, consulte \$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> Ejemplo de resultado: `2019-10-20 10:20:20.000000000`  | 
|  format\$1datetime(timestamp, varchar (x))  |  varchar  |  Para obtener más información sobre la cadena de formato utilizada por esta función, consulte [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> Ejemplo de resultado: `1968-01-13 12`  | 
|  parse\$1datetime(varchar(x), varchar(y))  |  timestamp  |  Para obtener más información sobre la cadena de formato utilizada por esta función, consulte [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> Ejemplo de resultado: `2019-12-29 18:10:00.000000000`  | 

## Extracción
<a name="date-time-functions-extraction"></a>

Timestream for LiveAnalytics admite las siguientes funciones de extracción de fecha y hora. La función de extracción es la base de las demás funciones prácticas.


| Función | Tipo de datos de salida | Description (Descripción) | 
| --- | --- | --- | 
|  extract  |  bigint  |  Extrae un campo de una marca de tiempo, donde el campo es uno de los siguientes: [YEAR, QUARTER, MONTH, WEEK, DAY, DAY\$1OF\$1MONTH, DAY\$1OF\$1WEEK, DOW, DAY\$1OF\$1YEAR, DOY, YEAR\$1OF\$1WEEK, YOW, HOUR, MINUTE o SECOND]. <pre>SELECT extract(YEAR FROM '2019-10-12 23:10:34.000000000')</pre> Ejemplo de resultado: `2019`  | 
|  day(marca de tiempo), day(fecha), day(intervalo de un día a otro)  |  bigint  |  <pre>SELECT day('2019-10-12 23:10:34.000000000')</pre> Ejemplo de resultado: `12`  | 
|  day\$1of\$1month(marca de tiempo), day\$1of\$1month(fecha), day\$1of\$1month(intervalo de día a segundo)  |  bigint  |  <pre>SELECT day_of_month('2019-10-12 23:10:34.000000000')</pre> Ejemplo de resultado: `12`  | 
|  day\$1of\$1week(marca de tiempo), day\$1of\$1week(fecha)  |  bigint  |  <pre>SELECT day_of_week('2019-10-12 23:10:34.000000000')</pre> Ejemplo de resultado: `6`  | 
|  day\$1of\$1year(marca de tiempo), day\$1of\$1year(fecha)  |  bigint  |  <pre>SELECT day_of_year('2019-10-12 23:10:34.000000000')</pre> Ejemplo de resultado: `285`  | 
|  dow(marca de tiempo), dow(fecha)  |  bigint  |  Alias de day\$1of\$1week  | 
|  doy(marca de tiempo), doy(fecha)  |  bigint  |  Alias de day\$1of\$1year  | 
|  hour(marca de tiempo), hour(hora), hour(intervalo de día a segundo)  |  bigint  |  <pre>SELECT hour('2019-10-12 23:10:34.000000000')</pre> Ejemplo de resultado: `23`  | 
|  millisecond(marca de tiempo), millisecond(hora), millisecond(intervalo de día a segundo)  |  bigint  |  <pre>SELECT millisecond('2019-10-12 23:10:34.000000000')</pre> Ejemplo de resultado: `0`  | 
|  minute(marca de tiempo), minute(hora), minute(intervalo de día a segundo)  |  bigint  |  <pre>SELECT minute('2019-10-12 23:10:34.000000000')</pre> Ejemplo de resultado: `10`  | 
|  month(marca de tiempo), month(fecha), month(intervalo de año a mes)  |  bigint  |  <pre>SELECT month('2019-10-12 23:10:34.000000000')</pre> Ejemplo de resultado: `10`  | 
|  nanosecond(marca de tiempo), nanosecond(hora), nanosecond(intervalo de día a segundo)  |  bigint  |  <pre>SELECT nanosecond(current_timestamp)</pre> Ejemplo de resultado: `162000000`  | 
|  quarter(marca de tiempo), quarter(fecha)  |  bigint  |  <pre>SELECT quarter('2019-10-12 23:10:34.000000000')</pre> Ejemplo de resultado: `4`  | 
|  second(marca de tiempo), second(hora), second(intervalo de día a segundo)  |  bigint  |  <pre>SELECT second('2019-10-12 23:10:34.000000000')</pre> Ejemplo de resultado: `34`  | 
|  week(marca de tiempo), week(fecha)  |  bigint  |  <pre>SELECT week('2019-10-12 23:10:34.000000000')</pre> Ejemplo de resultado: `41`  | 
|  week\$1of\$1year(marca de tiempo), week\$1of\$1year(fecha)  |  bigint  |  Alias de semana  | 
|  year(marca de tiempo), year(fecha), year(intervalo de año a mes)  |  bigint  |  <pre>SELECT year('2019-10-12 23:10:34.000000000')</pre> Ejemplo de resultado: `2019`  | 
|  year\$1of\$1week(marca de tiempo), year\$1of\$1week(fecha)  |  bigint  |  <pre>SELECT year_of_week('2019-10-12 23:10:34.000000000')</pre> Ejemplo de resultado: `2019`  | 
|  yow(marca de tiempo), yow(fecha)  |  bigint  |  Alias de year\$1of\$1week  | 

# Funciones de agregación
<a name="aggregate-functions"></a>

Timestream for LiveAnalytics admite las siguientes funciones de agregación.


| Función | Tipo de datos de salida | Description (Descripción) | 
| --- | --- | --- | 
|  arbitrary(x)  |  [igual que la entrada]  |  Devuelve un valor arbitrario no nulo de x, si existe. <pre>SELECT arbitrary(t.c) FROM (VALUES 1, 2, 3, 4) AS t(c)</pre> Ejemplo de resultado: `1`  | 
|  array\$1agg(x)  |  array<[igual que la entrada]  |  Devuelve una matriz creada a partir de los elementos de x de entrada. <pre>SELECT array_agg(t.c) FROM (VALUES 1, 2, 3, 4) AS t(c)</pre> Ejemplo de resultado: `[ 1,2,3,4 ]`  | 
|  avg(x)  |  double  |  Devuelve el promedio (media aritmética) de todos los valores de entrada. <pre>SELECT avg(t.c) FROM (VALUES 1, 2, 3, 4) AS t(c)</pre> Ejemplo de resultado: `2.5`  | 
|  bool\$1and(booleano) every(booleano)   |  booleano  |  Devuelve VERDADERO si todos los valores de entrada son VERDADEROS; de lo contrario, devuelve FALSO. <pre>SELECT bool_and(t.c) FROM (VALUES true, true, false, true) AS t(c)</pre> Ejemplo de resultado: `false`  | 
|  bool\$1or(booleano)  |  booleano  |  Devuelve VERDADERO si algún valor de entrada es VERDADERO; de lo contrario, devuelve FALSO. <pre>SELECT bool_or(t.c) FROM (VALUES true, true, false, true) AS t(c)</pre> Ejemplo de resultado: `true`  | 
|  count(\$1) count(x)  |  bigint  |  count(\$1) devuelve el número de filas de entrada. count(x) devuelve el número de valores de entrada no nulos. <pre>SELECT count(t.c) FROM (VALUES true, true, false, true) AS t(c)</pre> Ejemplo de resultado: `4`  | 
|  count\$1if(x)   |  bigint  |  Devuelve el número de valores de entrada TRUE.  <pre>SELECT count_if(t.c) FROM (VALUES true, true, false, true) AS t(c)</pre> Ejemplo de resultado: `3`  | 
|  geometric\$1mean(x)  |  double  |  Devuelve la media geométrica de todos los valores de entrada. <pre>SELECT geometric_mean(t.c) FROM (VALUES 1, 2, 3, 4) AS t(c)</pre> Ejemplo de resultado: `2.213363839400643`  | 
|  max\$1by(x, y)   |  [igual que x]  |  Devuelve el valor de x asociado al valor máximo de y sobre todos los valores de entrada. <pre>SELECT max_by(t.c1, t.c2) FROM (VALUES (('a', 1)), (('b', 2)), (('c', 3)), (('d', 4))) AS t(c1, c2)</pre> Ejemplo de resultado: `d`  | 
|  max\$1by(x, y, n)   |  matriz<[igual que x]>  |  Devuelve n valores de x asociados al n mayor de todos los valores de entrada de y en orden descendente 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> Ejemplo de resultado: `[ d,c ]`  | 
|  min\$1by(x, y)  |  [igual que x]  |  Devuelve el valor de x asociado al valor mínimo de y sobre todos los valores de entrada. <pre>SELECT min_by(t.c1, t.c2) FROM (VALUES (('a', 1)), (('b', 2)), (('c', 3)), (('d', 4))) AS t(c1, c2)</pre> Ejemplo de resultado: `a`  | 
|  min\$1by(x, y, n)  |  matriz<[igual que x]>  |  Devuelve n valores de x asociados al n menor de todos los valores de entrada de y en orden ascendente 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> Ejemplo de resultado: `[ a,b ]`  | 
|  max(x)  |  [igual que la entrada]  |  Devuelve el valor máximo de todos los valores de entrada. <pre>SELECT max(t.c) FROM (VALUES 1, 2, 3, 4) AS t(c)</pre> Ejemplo de resultado: `4`  | 
|  max(x, n)  |  matriz<[igual que x]>  |  Devuelve los n valores más altos de todos los valores de entrada de x. <pre>SELECT max(t.c, 2) FROM (VALUES 1, 2, 3, 4) AS t(c)</pre> Ejemplo de resultado: `[ 4,3 ]`  | 
|  min(x)  |  [igual que la entrada]  |  Devuelve el valor mínimo de todos los valores de entrada. <pre>SELECT min(t.c) FROM (VALUES 1, 2, 3, 4) AS t(c)</pre> Ejemplo de resultado: `1`  | 
|  min(x, n)  |  matriz<[igual que x]>  |  Devuelve los n valores más bajos de todos los valores de entrada de x. <pre>SELECT min(t.c, 2) FROM (VALUES 1, 2, 3, 4) AS t(c)</pre> Ejemplo de resultado: `[ 1,2 ]`  | 
|  sum(x)   |  [igual que la entrada]  |  Devuelve la suma de todos los valores de entrada. <pre>SELECT sum(t.c) FROM (VALUES 1, 2, 3, 4) AS t(c)</pre> Ejemplo de resultado: `10`  | 
|  bitwise\$1and\$1agg(x)  |  bigint  |  Devuelve el AND bit a bit de todos los valores de entrada en una representación de complemento de 2. <pre>SELECT bitwise_and_agg(t.c) FROM (VALUES 1, -3) AS t(c)</pre> Ejemplo de resultado: `1`  | 
|  bitwise\$1or\$1agg(x)  |  bigint  |  Devuelve el OR bit a bit de todos los valores de entrada en una representación de complemento de 2. <pre>SELECT bitwise_or_agg(t.c) FROM (VALUES 1, -3) AS t(c)</pre> Ejemplo de resultado: `-3`  | 
|  approx\$1distinct(x)   |  bigint  |  Devuelve el número aproximado de elementos distintos de una columna. Esta función proporciona una aproximación del recuento (DISTINCT x). Si todos los valores de entrada son nulos, se devuelve cero. Esta función debería producir un error estándar del 2,3 %, que es la desviación estándar de la distribución del error (aproximadamente normal) en todos los conjuntos posibles. No garantiza un límite superior del error para ningún conjunto de entradas específico. <pre>SELECT approx_distinct(t.c) FROM (VALUES 1, 2, 3, 4, 8) AS t(c)</pre> Ejemplo de resultado: `5`  | 
|  approx\$1distinct(x, e)  |  bigint  |  Devuelve el número aproximado de elementos distintos de una columna. Esta función proporciona una aproximación del recuento (DISTINCT x). Si todos los valores de entrada son nulos, se devuelve cero. Esta función debería producir un error estándar inferior a e, que es la desviación estándar de la distribución del error (aproximadamente normal) en todos los conjuntos posibles. No garantiza un límite superior del error para ningún conjunto de entradas específico. La implementación actual de esta función requiere que e esté en el rango de [0,0040625; 0,26000]. <pre>SELECT approx_distinct(t.c, 0.2) FROM (VALUES 1, 2, 3, 4, 8) AS t(c)</pre> Ejemplo de resultado: `5`  | 
|  approx\$1percentile(x, porcentaje)   |  [igual que x]  |  Devuelve el percentil aproximado de todos los valores de entrada de x en el porcentaje indicado. El valor del porcentaje debe estar entre cero y uno y debe ser constante en todas las filas de entrada. <pre>SELECT approx_percentile(t.c, 0.4) FROM (VALUES 1, 2, 3, 4) AS t(c)</pre> Ejemplo de resultado: `2`  | 
|  approx\$1percentile(x, porcentajes)   |  matriz<[igual que x]>  |  Devuelve el percentil aproximado de todos los valores de entrada de x en cada uno de los porcentajes indicados. Cada elemento de la matriz de porcentajes debe estar entre cero y uno, y la matriz debe ser constante en todas las filas de entrada. <pre>SELECT approx_percentile(t.c, ARRAY[0.1, 0.8, 0.8]) FROM (VALUES 1, 2, 3, 4) AS t(c)</pre> Ejemplo de resultado: `[ 1,4,4 ]`  | 
|  approx\$1percentile(x, w, porcentaje)   |  [igual que x]  |  Devuelve el percentil ponderado aproximado de todos los valores de entrada de x mediante el uso del peso w por elemento al porcentaje p. El peso debe ser un valor entero de al menos uno. En efecto, es un recuento de réplicas para el valor x del conjunto de percentiles. El valor de p debe estar entre cero y uno y debe ser constante en todas las filas de entrada. <pre>SELECT approx_percentile(t.c, 1, 0.1) FROM (VALUES 1, 2, 3, 4) AS t(c)</pre> Ejemplo de resultado: `1`  | 
|  approx\$1percentile(x, w, porcentajes)   |  matriz<[igual que x]>  |  Devuelve el percentil ponderado aproximado de todos los valores de entrada de x mediante el uso del peso w por elemento en cada uno de los porcentajes que se especifica en la matriz. El peso debe ser un valor entero de al menos uno. En efecto, es un recuento de réplicas para el valor x del conjunto de percentiles. Cada elemento de la matriz debe estar entre cero y uno, y la matriz debe ser constante en todas las filas de entrada. <pre>SELECT approx_percentile(t.c, 1, ARRAY[0.1, 0.8, 0.8]) FROM (VALUES 1, 2, 3, 4) AS t(c)</pre> Ejemplo de resultado: `[ 1,4,4 ]`  | 
|  approx\$1percentile(x, w, porcentaje, precisión)  |  [igual que x]  |  Devuelve el percentil ponderado aproximado de todos los valores de entrada de x mediante el uso del peso w por elemento en el porcentaje p, con un error de precisión máximo. El peso debe ser un valor entero de al menos uno. En efecto, es un recuento de réplicas para el valor x del conjunto de percentiles. El valor de p debe estar entre cero y uno y debe ser constante en todas las filas de entrada. La precisión debe ser un valor superior a cero e inferior a uno, y debe ser constante en todas las filas de entrada. <pre>SELECT approx_percentile(t.c, 1, 0.1, 0.5) FROM (VALUES 1, 2, 3, 4) AS t(c)</pre> Ejemplo de resultado: `1`  | 
|  corr(y, x)  |  double  |  Devuelve el coeficiente de correlación de los valores de entrada. <pre>SELECT corr(t.c1, t.c2) FROM (VALUES ((1, 1)), ((2, 2)), ((3, 3)), ((4, 4))) AS t(c1, c2)</pre> Ejemplo de resultado: `1.0`  | 
|  covar\$1pop(y, x)  |  double  |  Devuelve la covarianza poblacional de los valores de entrada. <pre>SELECT covar_pop(t.c1, t.c2) FROM (VALUES ((1, 1)), ((2, 2)), ((3, 3)), ((4, 4))) AS t(c1, c2)</pre> Ejemplo de resultado: `1.25`  | 
|  covar\$1samp(y, x)   |  double  |  Devuelve la covarianza muestral de los valores de entrada. <pre>SELECT covar_samp(t.c1, t.c2) FROM (VALUES ((1, 1)), ((2, 2)), ((3, 3)), ((4, 4))) AS t(c1, c2)</pre> Ejemplo de resultado: `1.6666666666666667`  | 
|  regr\$1intercept(y, x)  |  double  |  Devuelve la intersección de regresión lineal de los valores de entrada. y es el valor dependiente. x es el valor independiente. <pre>SELECT regr_intercept(t.c1, t.c2) FROM (VALUES ((1, 1)), ((2, 2)), ((3, 3)), ((4, 4))) AS t(c1, c2)</pre> Ejemplo de resultado: `0.0`  | 
|  regr\$1slope(y, x)  |  double  |  Devuelve la pendiente de regresión lineal de los valores de entrada. y es el valor dependiente. x es el valor independiente. <pre>SELECT regr_slope(t.c1, t.c2) FROM (VALUES ((1, 1)), ((2, 2)), ((3, 3)), ((4, 4))) AS t(c1, c2)</pre> Ejemplo de resultado: `1.0`  | 
|  skewness(x)  |  double  |  Devuelve la asimetría de todos los valores de entrada. <pre>SELECT skewness(t.c1) FROM (VALUES 1, 2, 3, 4, 8) AS t(c1)</pre> Ejemplo de resultado: `0.8978957037987335`  | 
|  stddev\$1pop(x)  |  double  |  Devuelve la desviación estándar poblacional de todos los valores de entrada. <pre>SELECT stddev_pop(t.c1) FROM (VALUES 1, 2, 3, 4, 8) AS t(c1)</pre> Ejemplo de resultado: `2.4166091947189146`  | 
|  stddev\$1samp(x) stddev(x)  |  double  |  Devuelve la desviación estándar muestral de todos los valores de entrada. <pre>SELECT stddev_samp(t.c1) FROM (VALUES 1, 2, 3, 4, 8) AS t(c1)</pre> Ejemplo de resultado: `2.701851217221259`  | 
|  var\$1pop(x)   |  double  |  Devuelve la varianza poblacional de todos los valores de entrada. <pre>SELECT var_pop(t.c1) FROM (VALUES 1, 2, 3, 4, 8) AS t(c1)</pre> Ejemplo de resultado: `5.840000000000001`  | 
|  var\$1samp(x) variance(x)   |  double  |  Devuelve la varianza muestral de todos los valores de entrada. <pre>SELECT var_samp(t.c1) FROM (VALUES 1, 2, 3, 4, 8) AS t(c1)</pre> Ejemplo de resultado: `7.300000000000001`  | 

# Funciones de ventana
<a name="window-functions"></a>

Las funciones de ventana realizan cálculos en todas las filas del resultado de la consulta. Se ejecutan después de la cláusula HAVING, pero antes de la cláusula ORDER BY. La invocación de una función de ventana requiere una sintaxis especial mediante la cláusula OVER para especificar la ventana. Una ventana consta de tres componentes:
+ La especificación de la partición, que separa las filas de entrada en diferentes particiones. Esto es análogo a la forma en que la cláusula GROUP BY separa las filas en diferentes grupos para las funciones de agregación.
+ La especificación de ordenación, que determina el orden en el que la función de ventana procesará las filas de entrada.
+ El marco de la ventana, que especifica una ventana deslizante de filas que la función procesará para una fila determinada. Si no se especifica el marco, el valor predeterminado es RANGE UNBOUNDED PRECEDING, que es lo mismo que RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW. Este marco contiene todas las filas desde el inicio de la partición hasta el último par de la fila actual.

Todas las funciones de agregación se pueden usar como funciones de ventana si añade la cláusula OVER. La función de agregación se calcula para cada fila sobre las filas del marco de ventana de la fila actual. Además de las funciones de agregado, Timestream for LiveAnalytics admite las siguientes funciones de clasificación y valor.


| Función | Tipo de datos de salida | Description (Descripción) | 
| --- | --- | --- | 
|  cume\$1dist()  |  bigint  |  Devuelve la distribución acumulada de un valor en un grupo de valores. El resultado es el número de filas que preceden o coinciden con la fila en el orden de la partición de la ventana dividido por el número total de filas de la partición de la ventana. Por lo tanto, cualquier valor de empate en el orden se evaluará con el mismo valor de distribución.  | 
|  dense\$1rank()  |  bigint  |  Devuelve el rango de un valor en un grupo de valores. Es similar a rank(), excepto en que los valores de empate no producen huecos en la secuencia.  | 
|  ntile(n)  |  bigint  |  Divide las filas de cada partición de ventana en n buckets que van desde 1 hasta n como máximo. Los valores del bucket diferirán como máximo en 1. Si el número de filas de la partición no se divide uniformemente entre el número de buckets, los valores restantes se distribuyen a razón de uno por bucket, a partir del primer bucket.  | 
|  percent\$1rank()  |  double  |  Devuelve el rango de porcentaje de un valor en un grupo de valores. El resultado es (r - 1)/(n - 1) donde r es el rank() de la fila y n es el número total de filas de la partición de la ventana.  | 
|  rank()  |  bigint  |  Devuelve el rango de un valor en un grupo de valores. El rango es uno más el número de filas que preceden a la fila y que no coinciden con la fila. Por lo tanto, los valores de empate en el orden producirán huecos en la secuencia. La clasificación se realiza para cada partición de ventana.  | 
|  row\$1number()  |  bigint  |  Devuelve un número secuencial único para cada fila, a partir de uno, según el orden de las filas dentro de la partición de la ventana.  | 
|  first\$1value(x)  |  [igual que la entrada]  |  Devuelve el primer valor de la ventana. Esta función se limita al marco de la ventana. La función toma una expresión o un objetivo como parámetro.  | 
|  last\$1value(x)  |  [igual que la entrada]  |  Devuelve el valor medio de la ventana. Esta función se limita al marco de la ventana. La función toma una expresión o un objetivo como parámetro.  | 
|  nth\$1value(x, desplazamiento)  |  [igual que la entrada]  |  Devuelve el valor con el desplazamiento que se especifica desde el inicio de la ventana. Los desplazamientos comienzan en 1. El desplazamiento puede ser cualquier expresión escalar. Si el desplazamiento es nulo o superior al número de valores de la ventana, se devuelve un valor nulo. Es un error que el desplazamiento sea cero o negativo. La función toma una expresión o un objetivo como primer parámetro.  | 
|  lead (x [, desplazamiento [, default\$1value]])  |  [igual que la entrada]  |  Devuelve el valor de las filas desplazadas después de la fila actual de la ventana. Los desplazamientos comienzan en 0, que es la fila actual. El desplazamiento puede ser cualquier expresión escalar. El valor predeterminado es 1. Si el desplazamiento es nulo o mayor que la ventana, se devuelve el valor predeterminado o, si no se especifica, se devuelve nulo. La función toma una expresión o un objetivo como primer parámetro.  | 
|  lag (x [, desplazamiento [, default\$1value]])  |  [igual que la entrada]  |  Devuelve el valor de las filas desplazadas antes de la fila actual de la ventana. Las compensaciones comienzan en 0, que es la fila actual. El desplazamiento puede ser cualquier expresión escalar. El valor predeterminado es 1. Si el desplazamiento es nulo o mayor que la ventana, se devuelve el valor predeterminado o, si no se especifica, se devuelve nulo. La función toma una expresión o un objetivo como primer parámetro.  | 

# Consultas de ejemplo
<a name="sample-queries"></a>

Esta sección incluye ejemplos de casos de uso del lenguaje de consulta de Timestream for LiveAnalytics.

**Topics**
+ [

# Consultas sencillas
](sample-queries.basic-scenarios.md)
+ [

# Consultas con funciones de serie temporal
](sample-queries.devops-scenarios.md)
+ [

# Consultas con funciones de agregación
](sample-queries.iot-scenarios.md)

# Consultas sencillas
<a name="sample-queries.basic-scenarios"></a>

A continuación, se obtienen los últimos 10 puntos de datos que se agregaron a una tabla.

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

A continuación, se obtienen los 5 puntos de datos más antiguos de una medida específica.

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

Lo siguiente funciona con marcas de tiempo de granularidad de nanosegundos.

```
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
```

Los valores de medida de los registros de medidas múltiples se identifican por el nombre de la columna. Los valores de medida de los registros de medida única se identifican con `measure_value::<data_type>`, donde `<data_type>` puede ser `double`, `bigint`, `boolean`, o `varchar`, tal como se describe en [Tipos de datos compatibles](supported-data-types.md). Para obtener más información sobre cómo se modelan los valores de medida, consulte [Tabla única frente a tablas múltiples.](https://docs.aws.amazon.com/timestream/latest/developerguide/data-modeling.html#data-modeling-multiVsinglerecords)

A continuación, se recuperan los valores de una medida llamada `speed` partir de registros de varias medidas con un valor `measure_name` de `IoTMulti-stats`.

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

A continuación, se recuperan los valores `double` de registros de medida única con un `measure_name` de `load`.

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

# Consultas con funciones de serie temporal
<a name="sample-queries.devops-scenarios"></a>

**Topics**
+ [

## Conjunto de datos y consultas de ejemplo
](#sample-queries.devops-scenarios.example)

## Conjunto de datos y consultas de ejemplo
<a name="sample-queries.devops-scenarios.example"></a>

Puede usar Timestream para LiveAnalytics comprender y mejorar el rendimiento y la disponibilidad de sus servicios y aplicaciones. A continuación, se muestra una tabla de ejemplo y ejemplos de consultas que se ejecutan en esa tabla. 

La tabla `ec2_metrics` almacena datos de telemetría, como el uso de la CPU y otras métricas de las instancias de EC2. Puede ver la tabla que aparece a continuación.


| Time | region | az | Hostname | measure\$1name | measure\$1value::double | measure\$1value::bigint | 
| --- | --- | --- | --- | --- | --- | --- | 
|  2019-12-04 19:00:00.000000000  |  us-east-1  |  us-east-1a  |  frontend01  |  cpu\$1utilization  |  35.1  |  null  | 
|  2019-12-04 19:00:00.000000000  |  us-east-1  |  us-east-1a  |  frontend01  |  memory\$1utilization  |  55.3  |  null  | 
|  2019-12-04 19:00:00.000000000  |  us-east-1  |  us-east-1a  |  frontend01  |  network\$1bytes\$1in  |  null  |  1500  | 
|  2019-12-04 19:00:00.000000000  |  us-east-1  |  us-east-1a  |  frontend01  |  network\$1bytes\$1out  |  null  |  6700  | 
|  2019-12-04 19:00:00.000000000  |  us-east-1  |  us-east-1b  |  frontend02  |  cpu\$1utilization  |  38,5  |  null  | 
|  2019-12-04 19:00:00.000000000  |  us-east-1  |  us-east-1b  |  frontend02  |  memory\$1utilization  |  58,4  |  null  | 
|  2019-12-04 19:00:00.000000000  |  us-east-1  |  us-east-1b  |  frontend02  |  network\$1bytes\$1in  |  null  |  23.000  | 
|  2019-12-04 19:00:00.000000000  |  us-east-1  |  us-east-1b  |  frontend02  |  network\$1bytes\$1out  |  null  |  12 000  | 
|  2019-12-04 19:00:00.000000000  |  us-east-1  |  us-east-1c  |  frontend03  |  cpu\$1utilization  |  45.0  |  null  | 
|  2019-12-04 19:00:00.000000000  |  us-east-1  |  us-east-1c  |  frontend03  |  memory\$1utilization  |  65,8  |  null  | 
|  2019-12-04 19:00:00.000000000  |  us-east-1  |  us-east-1c  |  frontend03  |  network\$1bytes\$1in  |  null  |  15.000  | 
|  2019-12-04 19:00:00.000000000  |  us-east-1  |  us-east-1c  |  frontend03  |  network\$1bytes\$1out  |  null  |  836.000  | 
|  2019-12-04 19:00:05.000000000  |  us-east-1  |  us-east-1a  |  frontend01  |  cpu\$1utilization  |  55,2  |  null  | 
|  2019-12-04 19:00:05.000000000  |  us-east-1  |  us-east-1a  |  frontend01  |  memory\$1utilization  |  75.0  |  null  | 
|  2019-12-04 19:00:05.000000000  |  us-east-1  |  us-east-1a  |  frontend01  |  network\$1bytes\$1in  |  null  |  1.245  | 
|  2019-12-04 19:00:05.000000000  |  us-east-1  |  us-east-1a  |  frontend01  |  network\$1bytes\$1out  |  null  |  68.432  | 
|  2019-12-04 19:00:08.000000000  |  us-east-1  |  us-east-1b  |  frontend02  |  cpu\$1utilization  |  65,6  |  null  | 
|  2019-12-04 19:00:08.000000000  |  us-east-1  |  us-east-1b  |  frontend02  |  memory\$1utilization  |  85,3  |  null  | 
|  2019-12-04 19:00:08.000000000  |  us-east-1  |  us-east-1b  |  frontend02  |  network\$1bytes\$1in  |  null  |  1.245  | 
|  2019-12-04 19:00:08.000000000  |  us-east-1  |  us-east-1b  |  frontend02  |  network\$1bytes\$1out  |  null  |  68.432  | 
|  2019-12-04 19:00:20.000000000  |  us-east-1  |  us-east-1c  |  frontend03  |  cpu\$1utilization  |  12.1  |  null  | 
|  2019-12-04 19:00:20.000000000  |  us-east-1  |  us-east-1c  |  frontend03  |  memory\$1utilization  |  32,0  |  null  | 
|  2019-12-04 19:00:20.000000000  |  us-east-1  |  us-east-1c  |  frontend03  |  network\$1bytes\$1in  |  null  |  1.400  | 
|  2019-12-04 19:00:20.000000000  |  us-east-1  |  us-east-1c  |  frontend03  |  network\$1bytes\$1out  |  null  |  345  | 
|  2019-12-04 19:00:10.000000000  |  us-east-1  |  us-east-1a  |  frontend01  |  cpu\$1utilization  |  15.3  |  null  | 
|  2019-12-04 19:00:10.000000000  |  us-east-1  |  us-east-1a  |  frontend01  |  memory\$1utilization  |  35,4  |  null  | 
|  2019-12-04 19:00:10.000000000  |  us-east-1  |  us-east-1a  |  frontend01  |  network\$1bytes\$1in  |  null  |  23  | 
|  2019-12-04 19:00:10.000000000  |  us-east-1  |  us-east-1a  |  frontend01  |  network\$1bytes\$1out  |  null  |  0  | 
|  2019-12-04 19:00:16.000000000  |  us-east-1  |  us-east-1b  |  frontend02  |  cpu\$1utilization  |  44.0  |  null  | 
|  2019-12-04 19:00:16.000000000  |  us-east-1  |  us-east-1b  |  frontend02  |  memory\$1utilization  |  64,2  |  null  | 
|  2019-12-04 19:00:16.000000000  |  us-east-1  |  us-east-1b  |  frontend02  |  network\$1bytes\$1in  |  null  |  1.450  | 
|  2019-12-04 19:00:16.000000000  |  us-east-1  |  us-east-1b  |  frontend02  |  network\$1bytes\$1out  |  null  |  200  | 
|  2019-12-04 19:00:40.000000000  |  us-east-1  |  us-east-1c  |  frontend03  |  cpu\$1utilization  |  66,4  |  null  | 
|  2019-12-04 19:00:40.000000000  |  us-east-1  |  us-east-1c  |  frontend03  |  memory\$1utilization  |  86,3  |  null  | 
|  2019-12-04 19:00:40.000000000  |  us-east-1  |  us-east-1c  |  frontend03  |  network\$1bytes\$1in  |  null  |  300  | 
|  2019-12-04 19:00:40.000000000  |  us-east-1  |  us-east-1c  |  frontend03  |  network\$1bytes\$1out  |  null  |  423  | 

Calcular la media de uso de la CPU en los valores p90, p95 y p99 de un host EC2 específico durante las últimas 2 horas:

```
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
```

Identificar los hosts EC2 cuyo uso de la CPU sea superior en un 10 %, o más, a la media de uso de la CPU de toda la flota durante las últimas 2 horas:

```
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
```

Calcular la media de uso de la CPU agrupada en intervalos de 30 segundos para un host EC2 específico durante las últimas 2 horas:

```
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
```

Calcular la media de uso de la CPU agrupada en intervalos de 30 segundos para un host EC2 específico durante las últimas 2 horas, y rellenar los valores faltantes mediante la interpolación lineal:

```
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)
```

Calcular la media de uso de la CPU agrupada en intervalos de 30 segundos para un host EC2 específico durante las últimas 2 horas, y rellenar los valores faltantes mediante la interpolación lineal en función de la última observación disponible:

```
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)
```

# Consultas con funciones de agregación
<a name="sample-queries.iot-scenarios"></a>

A continuación, se muestra un ejemplo de conjunto de datos de un escenario de IoT para ilustrar las consultas con funciones agregadas.

**Topics**
+ [

## Datos de ejemplo
](#sample-queries.iot-scenarios.example-data)
+ [

## Consultas de ejemplo
](#sample-queries.iot-scenarios.example-queries)

## Datos de ejemplo
<a name="sample-queries.iot-scenarios.example-data"></a>

Timestream le permite almacenar y analizar los datos de los sensores de IoT, como la ubicación, el consumo de combustible, la velocidad y la capacidad de carga de una o más flotas de camiones, para permitir una gestión eficaz de la flota. A continuación, se muestra el esquema y algunos de los datos de una tabla iot\$1trucks que almacena la telemetría, como la ubicación, el consumo de combustible, la velocidad y la capacidad de carga de los camiones.


| Time | truck\$1id | Make | Modelo | Fleet | fuel\$1capacity | load\$1capacity | measure\$1name | measure\$1value::double | measure\$1value::varchar | 
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | 
|  2019-12-04 19:00:00.000000000  |  123456781  |  GMC  |  Astro  |  Alpha  |  100  |  500  |  fuel\$1reading  |  65,2  |  null  | 
|  2019-12-04 19:00:00.000000000  |  123456781  |  GMC  |  Astro  |  Alpha  |  100  |  500  |  carga  |  400,0  |  null  | 
|  2019-12-04 19:00:00.000000000  |  123456781  |  GMC  |  Astro  |  Alpha  |  100  |  500  |  speed  |  90,2  |  null  | 
|  2019-12-04 19:00:00.000000000  |  123456781  |  GMC  |  Astro  |  Alpha  |  100  |  500  |  ubicación  |  null  |  47,6062 N, 122,3321 W  | 
|  2019-12-04 19:00:00.000000000  |  123456782  |  Kenworth  |  W900  |  Alpha  |  150  |  1 000  |  fuel\$1reading  |  10.1  |  null  | 
|  2019-12-04 19:00:00.000000000  |  123456782  |  Kenworth  |  W900  |  Alpha  |  150  |  1 000  |  carga  |  950,3  |  null  | 
|  2019-12-04 19:00:00.000000000  |  123456782  |  Kenworth  |  W900  |  Alpha  |  150  |  1 000  |  speed  |  50,8  |  null  | 
|  2019-12-04 19:00:00.000000000  |  123456782  |  Kenworth  |  W900  |  Alpha  |  150  |  1 000  |  ubicación  |  null  |  40,7128 grados N, 74,0060 grados W  | 

## Consultas de ejemplo
<a name="sample-queries.iot-scenarios.example-queries"></a>

Obtener una lista de todos los atributos y valores de los sensores que se monitorean para cada camión de la flota.

```
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
```

Obtener la lectura de combustible más reciente de cada camión de la flota en las últimas 24 horas.

```
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
```

Identificar los camiones que han estado funcionando con poco combustible (menos del 10 %) en las últimas 48 horas:

```
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
)
```

Calcular la carga media y la velocidad máxima de cada camión durante la última semana:

```
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
```

Obtener la eficiencia de carga de cada camión durante la semana pasada:

```
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
```