

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.

# Revisión de los componentes de la API de tabla
<a name="how-table"></a>

Su aplicación Apache Flink usa la [API de tabla de Apache Flink](https://nightlies.apache.org/flink/flink-docs-release-1.19/docs/dev/table/tableapi/) para interactuar con los datos de un flujo mediante un modelo relacional. La API de tabla se usa para acceder a los datos mediante fuentes de tablas y, luego, las funciones de tabla se usan para transformar y filtrar los datos de las tablas. Los datos tabulares se pueden transformar y filtrar mediante funciones de la API, o bien, comandos SQL. 

Esta sección contiene los siguientes temas:
+ [Conectores de la API de tabla](how-table-connectors.md): estos componentes mueven los datos entre la aplicación y el origen y destino de datos externos.
+ [Atributos de tiempo de la API de tabla](how-table-timeattributes.md): este tema describe cómo Managed Service para Apache Flink realiza un seguimiento de los eventos cuando se usa la API de tabla.

# Conectores de la API de tabla
<a name="how-table-connectors"></a>

En el modelo de programación de Apache Flink, los conectores son componentes que la aplicación utiliza para leer o escribir datos de fuentes externas, como otros AWS servicios.

Con la API de tabla de Apache Flink, se pueden usar los siguientes tipos de conectores:
+ [Fuentes de la API de tabla](#how-table-connectors-source): se utilizan los conectores fuente de la API de tabla para crear tablas dentro de su `TableEnvironment` mediante solicitudes a la API o, bien, consultas SQL.
+ [Receptores de la API de tabla](#how-table-connectors-sink): se utilizan comandos SQL para escribir datos de tablas en fuentes externas, como un tema de Amazon MSK o un bucket de Amazon S3.

## Fuentes de la API de tabla
<a name="how-table-connectors-source"></a>

Se crea una fuente de tabla a partir de un flujo de datos. El siguiente código crea una tabla a partir de un tema de Amazon MSK:

```
//create the table
    final FlinkKafkaConsumer<StockRecord> consumer = new FlinkKafkaConsumer<StockRecord>(kafkaTopic, new KafkaEventDeserializationSchema(), kafkaProperties);
    consumer.setStartFromEarliest();
    //Obtain stream
    DataStream<StockRecord> events = env.addSource(consumer);

    Table table = streamTableEnvironment.fromDataStream(events);
```

Para obtener más información sobre fuentes de tablas, consulte [Table & SQL Connectors](https://nightlies.apache.org/flink/flink-docs-release-1.19/docs/connectors/table/overview/) en la documentación de Apache Flink.

## Receptores de la API de tabla
<a name="how-table-connectors-sink"></a>

Para escribir datos de tabla en un receptor, se crea el receptor en SQL y, a continuación, se ejecuta el receptor basado en SQL en el objeto `StreamTableEnvironment`.

En el siguiente código de ejemplo, se muestra cómo escribir datos de tablas a un receptor de Amazon S3:

```
final String s3Sink = "CREATE TABLE sink_table (" +
    "event_time TIMESTAMP," +
    "ticker STRING," +
    "price DOUBLE," +
    "dt STRING," +
    "hr STRING" +
    ")" +
    " PARTITIONED BY (ticker,dt,hr)" +
    " WITH" +
    "(" +
    " 'connector' = 'filesystem'," +
    " 'path' = '" + s3Path + "'," +
    " 'format' = 'json'" +
    ") ";

    //send to s3
    streamTableEnvironment.executeSql(s3Sink);
    filteredTable.executeInsert("sink_table");
```

 Se puede usar el parámetro `format` para controlar el formato que Managed Service para Apache Flink utiliza para escribir el resultado en el receptor. Para obtener información sobre formatos, consulte [Supported Connectors](https://nightlies.apache.org/flink/flink-docs-release-1.19/docs/connectors/table/overview/) en la documentación de Apache Flink.

## Orígenes y receptores definidos por el usuario
<a name="how-table-connectors-userdef"></a>

Se puede usar los conectores Apache Kafka existentes para enviar datos a otros servicios de AWS desde estos, como Amazon MSK y Amazon S3. Para interactuar con otros orígenes y destinos de datos, puede definir sus propios orígenes y receptores. Para obtener más información, consulte [User-Defined Sources and Sinks](https://nightlies.apache.org/flink/flink-docs-release-1.19/docs/dev/table/sourcessinks/) en la documentación de Apache Flink.

# Atributos de tiempo de la API de tabla
<a name="how-table-timeattributes"></a>

Cada registro de un flujo de datos tiene varias marcas de tiempo que definen cuándo ocurrieron los eventos relacionados con el registro:
+ **Hora del evento**: una marca de tiempo definida por el usuario que define cuándo ocurrió el evento que creó el registro.
+ **Hora de adquisición de datos**: la hora en que la aplicación obtuvo el registro del flujo de datos.
+ **Hora de procesamiento**: la hora en que su solicitud procesó el registro.

Cuando la API de tabla de Apache Flink crea ventanas en función de los tiempos de registro, usted define cuáles de estas marcas de tiempo utiliza con el método `setStreamTimeCharacteristic`. 

Para obtener más información sobre el uso de marcas de tiempo con la API de tabla, consulte [Time Attributes](https://nightlies.apache.org/flink/flink-docs-release-1.19/docs/dev/table/concepts/time_attributes/) y [Timely Stream Processing](https://nightlies.apache.org/flink/flink-docs-release-1.19/docs/concepts/time/) en la documentación de Apache Flink.