

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.

# OpenSearch Lenguaje de procesamiento canalizado (PPL)
<a name="CWL_AnalyzeLogData_PPL"></a>

Esta sección contiene una introducción básica a la consulta de CloudWatch registros mediante PPL. OpenSearch Con el PPL se pueden recuperar, consultar y analizar datos mediante comandos que están canalizados juntos, lo que facilita la comprensión y la redacción de consultas complejas. Su sintaxis se basa en las canalizaciones de Unix y permite encadenar comandos para transformar y procesar datos. Con el PPL, se pueden filtrar y agregar datos, así como utilizar un amplio conjunto de funciones matemáticas, de cadenas, de fecha, condicionales y de otro tipo para el análisis.

Incluirlo `SOURCE` en una consulta de PPL es una forma útil de especificar los grupos de registros, los índices de campos y las fuentes de datos que se van a incluir en una consulta cuando se utiliza la API AWS CLI o la API para crear una consulta. El `SOURCE` comando solo se admite en la API AWS CLI and, no en la CloudWatch consola. Cuando utiliza la CloudWatch consola para iniciar una consulta, utiliza la interfaz de la consola para especificar los grupos de registros y el nombre y el tipo de la fuente de datos.

Se usa `aws:fieldIndex` para devolver solo datos indexados, mediante el forzado de una consulta a analizar solo los grupos de registros que están indexados en un campo que se especifique en la consulta. Los grupos de registros relevantes se seleccionan automáticamente en función de los campos especificados en el `filterIndex` comando. Esto reduce el volumen escaneado, ya que se omiten los grupos de registro que no tienen ningún evento de registro que contenga el campo especificado en la consulta y se escanean únicamente los grupos de registro que coincidan con el valor especificado en la consulta para este índice de campos. Se utiliza `aws:fieldIndex` para especificar el nombre del campo, junto con el nombre y el valor del campo en el comando source para consultar únicamente los datos indexados que contienen el campo y el valor especificados. Para obtener más información, consulte [Creación de índices de campo para mejorar el rendimiento de las consultas y reducir el volumen de análisis](CloudWatchLogs-Field-Indexing.md) 

Puede usar el OpenSearch PPL para consultas de grupos de registros de la clase de registro estándar. 

**nota**  
Para obtener información sobre todos los comandos de consulta de OpenSearch PPL compatibles con CloudWatch los registros e información detallada sobre la sintaxis y las restricciones, consulte los [comandos de PPL compatibles](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/supported-ppl.html) en la Guía para desarrolladores de OpenSearch servicios.  
 Para obtener información sobre otros lenguajes de consulta que puede utilizar, consulte [CloudWatch Logs Insights](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/CWL_QuerySyntax.html), [OpenSearch Service SQL](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/CWL_AnalyzeLogData_SQL.html) y [CloudWatch Metrics Insights](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/query_with_cloudwatch-metrics-insights.html)


| Comando o función | Consulta de ejemplo | Description (Descripción) | 
| --- | --- | --- | 
| `fields` | `fields field1, field2` | Muestra un conjunto de campos que necesitan ser proyectados. | 
| `join` | `LEFT JOIN left=l, right=r on l.id = r.id `join_right_lg` \| fields l.field_1, r.field_2` | Une dos conjuntos de datos. | 
| `where` | `where field1="success" \| where field2 != "i-023fe0a90929d8822" \| fields field3, field4, field5,field6 \| head 1000` | Filtra los datos en función de las condiciones que especifique. | 
| `aws:fieldIndex` | `source = [`aws:fieldIndex`="region", `region` = "us-west-2"] \| where status = 200 \| head 10` | Devuelve solo datos indexados, al obligar a una consulta a escanear solo los grupos de registros que están indexados en un campo que usted especifique en la consulta. | 
| `stats` | `stats count(), count(field1), min(field1), max(field1), avg(field1) by field2 \| head 1000` | Realiza agregaciones y cálculos. | 
| `parse` | `parse field1 ".*/(?<field2>[^/]+$)" \| where field2 = "requestId" \| fields field1, field2 \| head 1000` | Extrae un patrón de expresión regular (regex) de una cadena y muestra el patrón extraído. El patrón extraído se puede utilizar además para crear nuevos campos o filtrar datos. | 
| `sort` | `stats count(), count(field1), min(field1) as field1Alias, max(`field1`), avg(`field1`) by field2 \| sort -field1Alias \| head 1000` | Ordena los resultados mostrados por un nombre de campo. Use ordenar: FieldName para ordenar en orden descendente. | 
| `eval` | `eval field2 = field1 * 2 \| fields field1, field2 \| head 20` | Modifica o procesa el valor de un campo y lo almacena en un campo diferente. Esto resulta útil para modificar matemáticamente una columna, aplicar funciones de cadena a una columna o aplicar funciones de fecha a una columna. | 
| `rename` | `rename field2 as field1 \| fields field1;` | Cambia el nombre de uno o más campos del resultado de la búsqueda. | 
| `head` | `fields `@message` \| head 20` | Limita los resultados de la consulta a las N primeras filas. | 
| `top` | `top 2 field1 by field2` | Busca los valores más frecuentes de un campo. | 
| `dedup` | `dedup field1 \| fields field1, field2, field3` | Elimina entradas duplicadas en función de los campos que especifique. | 
| `rare` | `rare field1 by field2` | Busca los valores menos frecuentes de todos los campos de la lista de campos. | 
| `subquery` | `where field_1 IN [ search source= `subquery_lg` \| fields field_2 ] \| fields id, field_1 ` | Realiza consultas anidadas y complejas en las instrucciones de PPL. | 
| `trendline` | `trendline sma(2, field1) as field1Alias` | Calcula los promedios móviles de los campos. | 
| `eventStats` | `eventstats sum(field1) by field2` | Enriquece los datos del evento con estadísticas resumidas calculadas. Analiza los campos específicos de sus eventos, calcula varias medidas estadísticas y, a continuación, agrega estos resultados a cada evento original como campos nuevos. | 
| `expand` | `eval tags_array_string = json_extract(`@message`, '$.tags')\| eval tags_array = json_array(json_extract(tags_string, '$[0]'), json_extract(tags_string, '$[1]'))\| expand tags_array as color_tags` | Divide un campo que contiene varios valores en filas independientes, creando una nueva fila para cada valor del campo especificado. | 
| `fillnull` | `fields `@timestamp`, error_code, status_code \| fillnull using status_code = "UNKNOWN", error_code = "UNKNOWN"` | Rellena los campos nulos con el valor que proporcione. Se puede usar en uno o más campos. | 
| `flatten` | `eval metadata_struct = json_object('size', json_extract(metadata_string, '$.size'), 'color', json_extract(metadata_string, '$.color')) \| flatten metadata_struct as (meta_size, meta_color) ` | Aplana un campo. El campo debe ser de este tipo: `struct<?,?>` o `array<struct<?,?>>`. | 
| `cidrmatch` | `where cidrmatch(ip, '2003:db8::/32') \| fields ip ` | Verifica si la dirección IP especificada está dentro del rango de CIDR dado.  | 
| `fieldsummary` | `where field1 != 200 \| fieldsummary includefields= field1 nulls=true` | Calcula las estadísticas básicas de cada campo (recuento, recuento distinto, mínimo, máximo, promedio, stddev y media). | 
| `grok` | `grok email '.+@%{HOSTNAME:host}' \| fields email, host` | Analiza un campo de texto con un patrón grok y agrega los resultados al resultado de la búsqueda. | 
| Funciones de cadena | `eval field1Len = LENGTH(field1) \| fields field1Len` | Funciones integradas en PPL que pueden manipular y transformar datos de texto y cadenas de texto dentro de las consultas de PPL. Por ejemplo, convertir mayúsculas y minúsculas, combinar cadenas, extraer partes y limpiar el texto. | 
| Funciones de fecha y hora | `eval newDate = ADDDATE(DATE('2020-08-26'), 1) \| fields newDate ` | Funciones integradas para administrar y transformar los datos de fecha y hora en las consultas PPL. Por ejemplo, date\_add, date\_format, datediff, date-sub, timestampadd, timestampdiff, current\_timezone, utc\_timestamp y current\_date. | 
| Funciones de condiciones | `eval field2 = isnull(field1) \| fields field2, field1, field3` | Funciones integradas que verifican condiciones de campo específicas y evalúan las expresiones de forma condicional. Por ejemplo, si field1 es nulo, devuelve el field2. | 
| Funciones matemáticas | `eval field2 = ACOS(field1) \| fields field1` | Funciones integradas para realizar cálculos matemáticos y transformaciones en consultas PPL. Por ejemplo, abs (valor absoluto), round (redondea números), sqrt (raíz cuadrada), pow (cálculo de potencia) y ceil (redondea al entero más cercano). | 
| CryptoGraphic funciones | `eval crypto = MD5(field)\| head 1000` | Para calcular el hash de un campo determinado | 
| Funciones JSON | `eval valid_json = json('[1,2,3,{"f1":1,"f2":[5,6]},4]') \| fields valid_json` | Funciones integradas para el manejo de JSON, incluidas las matrices, la extracción y la validación. Por ejemplo, json\_object, json\_array, to\_json\_string, json\_array\_length, json\_extract, json\_keys y json\_valid.  | 

## Alcance de la consulta
<a name="CWL_AnalyzeLogData_PPL-scope"></a>

Incluir SOURCE en una consulta es una forma útil de especificar los grupos de registros que se van a incluir en una consulta cuando se utiliza la API AWS CLI o para crear una consulta. El comando SOURCE solo se admite en la API AWS CLI and, no en la CloudWatch consola. Cuando utiliza la CloudWatch consola para iniciar una consulta, utiliza la interfaz de la consola para especificar los grupos de registros y el nombre y el tipo de la fuente de datos.

El comando source de PPL ahora admite varias formas de especificarlos:

1. Grupo de registro

1. Índices de campo: nuevos

1. Fuente y tipo de datos: nuevos

### Grupo de registros
<a name="CWL_AnalyzeLogData_PPL-scope-loggroup"></a>

La selección de fuentes de grupos de registros se puede utilizar cuando los clientes saben en qué grupos de registros exactos deben buscarse

```
source = [lg:`/aws/lambda/my-function`] | where status = 200 | head 10
```

### Índices de campo
<a name="CWL_AnalyzeLogData_PPL-scope-fieldindex"></a>

La selección de fuentes basada en índices de campos reduce la cantidad de datos consultados al limitar los resultados solo a los datos indexados cuando filtra los campos de destino que se han indexado. Los grupos de registros relevantes se seleccionan automáticamente en función de los campos especificados en el comando. `filterIndex` Para obtener más información sobre los índices de campos y cómo crearlos, consulte [Crear índices de campos para mejorar el rendimiento de las consultas y reducir el volumen de digitalización](CloudWatchLogs-Field-Indexing.md).

Se usa `aws:fieldIndex` para devolver solo datos indexados, mediante el forzado de una consulta a analizar solo los grupos de registros que están indexados en un campo que se especifique en la consulta. Para los grupos de registros que están indexados en este campo, se optimiza aún más la consulta al omitir los grupos de registros que no tienen ningún evento de registro que contenga el campo especificado en la consulta del campo indexado. Se reduce aún más el volumen analizado al intentar analizar solo los eventos de registro de estos grupos de registros que coincidan con el valor especificado en la consulta para este índice de campos. Para obtener más información sobre los índices de campo y cómo crearlos, consulte Crear índices de campo para mejorar el rendimiento de las consultas y reducir el volumen de digitalización.

En PPL, `aws:fieldIndex` se usa para especificar qué pares de valores clave deben tratarse como índices. La sintaxis es la siguiente

```
source = [`aws:fieldIndex`="region", `region` = "us-west-2"] | where status = 200 | head 10
```

donde,

1. ``aws:fieldIndex`="region"`identifica la región como índice de campo.

   1. Nota: En lugar de =, los clientes pueden usar IN para especificar varios índices (ejemplo siguiente)

1. ``region`="us-west-2"`identifica la condición de filtro que se va a aplicar

   1. Nota: En lugar de =, los clientes pueden usar IN para especificar varios valores (ejemplo siguiente)

Los clientes pueden especificar varios índices de campos de la siguiente manera

```
source = [`aws:fieldIndex` IN ("status", "region"), `status` = 200, `region` IN ("us-west-2", "us-east-1")] | head 10
```

### Fuente y tipo de datos
<a name="CWL_AnalyzeLogData_PPL-scope-datasource"></a>

La selección de fuentes basadas en fuentes y tipos de datos se puede utilizar cuando los clientes saben qué fuentes de datos exactas deben consultarse. Esta consulta se ejecuta en uno o más grupos de registros que contienen la fuente y el tipo de datos especificados.

```
source = [ds:`data_source.type`] | where status = 200 | head 10
```

#### PPL compatible para consultas de fuentes de datos
<a name="CWL_AnalyzeLogData_PPL-scope-datasource-supported"></a>

Para respaldar el caso de uso de la consulta de fuentes de datos en PPL, puede utilizar la cláusula de selección dinámica de fuentes. Con esta sintaxis, puede consultar las fuentes de datos especificándolas en el comando de búsqueda. Puede especificar hasta 10 fuentes de datos.

**Sintaxis**

```
source=[ds:`DataSource1.Type1`, ds:`DataSource2.Type2`, ...ds:`DataSourcen.Typen`]
```

**Consulta de ejemplo**

```
search source=[ds:`DataSource1.Type1`, ds:`DataSource2.Type2`] | fields field1, field2
```

### Ejemplo combinado
<a name="CWL_AnalyzeLogData_PPL-scope-combined"></a>

Los clientes pueden especificar todos los operadores de selección de fuentes en cualquier orden y el resultado sería la intersección de todas las condiciones aplicadas.

Por ejemplo,/aws/lambda/my-function-1 puede contener varios tipos y fuentes de datos, incluida una amplia variedad de índices. Cuando se ejecutó la siguiente consulta, los resultados devueltos solo tendrán eventos de origen y tipo DataSource 1.Type1 y que coincidan con el criterio de «estado» = 200.

```
search source=[
    ds:`DataSource1.Type1`, 
    lg:`/aws/lambda/my-function-1`, 
    `aws:fieldIndex` IN ("status"), `status` = 200 
]
```

## Restricciones
<a name="CWL_AnalyzeLogData_PPL-restrictions"></a>

Cuando se utiliza OpenSearch PPL para realizar consultas en Logs Insights, se aplican las siguientes restricciones. CloudWatch 
+ No puede usar comandos de unión o subconsulta con las consultas de fuentes de datos.