

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# 테이블 API 구성 요소 검토
<a name="how-table"></a>

Apache Flink 애플리케이션은 [Apache Flink 표 API](https://nightlies.apache.org/flink/flink-docs-release-1.19/docs/dev/table/tableapi/)를 사용하여 관계형 모델을 사용하여 스트림의 데이터와 상호 작용합니다. 표 API를 사용하여 표 소스를 사용하여 데이터에 액세스한 다음 표 함수를 사용하여 표 데이터를 변환하고 필터링합니다. API 함수 또는 SQL 명령을 사용하여 표 형식 데이터를 변환하고 필터링할 수 있습니다.

이 섹션은 다음 주제를 포함합니다:
+ [Table API 커넥터](how-table-connectors.md): 이러한 구성 요소는 애플리케이션과 외부 데이터 소스 및 목적지 간에 데이터를 이동합니다.
+ [Table API 시간 속성](how-table-timeattributes.md): 이 항목에서는 Apache Flink용 관리형 서비스가 표 API를 사용할 때 이벤트를 추적하는 방법에 대해 설명합니다.

# Table API 커넥터
<a name="how-table-connectors"></a>

Apache Flink 프로그래밍 모델에서 커넥터는 애플리케이션이 다른 AWS 서비스와 같은 외부 소스에서 데이터를 읽거나 쓰는 데 사용하는 구성 요소입니다.

Apache Flink 표 API를 사용하면 다음과 같은 유형의 커넥터를 사용할 수 있습니다.
+ [Table API 소스](#how-table-connectors-source): 표 API 소스 커넥터를 사용하면 API 호출 또는 SQL 쿼리를 사용하여 귀하의 `TableEnvironment` 내에 표를 생성할 수 있습니다.
+ [Table API 싱크](#how-table-connectors-sink): SQL 명령을 사용하여 Amazon MSK 주제 또는 Amazon S3 버킷과 같은 외부 소스에 표 데이터를 쓸 수 있습니다.

## Table API 소스
<a name="how-table-connectors-source"></a>

데이터 스트림에서 표 소스를 생성합니다. 다음 코드는 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);
```

표 소스에 관한 자세한 내용을 알아보려면 Apache Flink 설명서의 [표 및 SQL 커넥터](https://nightlies.apache.org/flink/flink-docs-release-1.19/docs/connectors/table/overview/)를 참조하세요.

## Table API 싱크
<a name="how-table-connectors-sink"></a>

표 데이터를 싱크에 쓰려면 SQL로 싱크를 만든 다음 `StreamTableEnvironment` 객체에서 SQL 기반 싱크를 실행합니다.

다음 코드 예는 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");
```

 `format` 파라미터를 사용하여 Apache Flink용 관리형 서비스가 싱크에 출력을 기록하는 데 사용하는 형식을 제어할 수 있습니다. 형식에 관한 자세한 내용을 알아보려면 Apache Flink 설명서의 [지원되는 커넥터](https://nightlies.apache.org/flink/flink-docs-release-1.19/docs/connectors/table/overview/)를 참조하세요.

## 사용자 정의 소스 및 싱크
<a name="how-table-connectors-userdef"></a>

기존 Apache Kafka 커넥터를 사용하여 Amazon MSK 및 Amazon S3와 같은 다른 AWS 서비스와 데이터를 주고 받을 수 있습니다. 다른 데이터 소스 및 목적지과 상호 작용하기 위해 자체 소스 및 싱크를 정의할 수 있습니다. 자세한 내용을 알아보려면 Apache Flink 설명서의 [사용자 정의 소스 및 싱크](https://nightlies.apache.org/flink/flink-docs-release-1.19/docs/dev/table/sourcessinks/)를 참조하세요.

# Table API 시간 속성
<a name="how-table-timeattributes"></a>

데이터 스트림의 각 레코드에는 레코드와 관련된 이벤트가 발생한 시기를 정의하는 여러 타임스탬프가 있습니다.
+ **이벤트 시간**: 레코드를 생성한 이벤트가 발생한 시기를 정의하는 사용자 정의 타임스탬프입니다.
+ **통합 시간**: 애플리케이션이 데이터 스트림에서 레코드를 검색한 시간입니다.
+ **처리 시간**: 애플리케이션에서 레코드를 처리한 시간입니다.

Apache Flink Table API가 레코드 시간을 기반으로 창을 생성할 때, `setStreamTimeCharacteristic` 메서드를 사용하여 이러한 타임스탬프 중 어떤 타임스탬프를 사용할지 정의합니다.

Table API에서의 타임스탬프를 사용에 관한 자세한 내용을 알아보려면 Apache Flink 설명서의 [시간 속성](https://nightlies.apache.org/flink/flink-docs-release-1.19/docs/dev/table/concepts/time_attributes/) 및 [적시 스트림 처리](https://nightlies.apache.org/flink/flink-docs-release-1.19/docs/concepts/time/)를 참조하세요.