애플리케이션 입력 구성 - SQL애플리케이션용 Amazon Kinesis Data Analytics 개발자 가이드

새 프로젝트의 경우 애플리케이션용 Kinesis Data Analytics보다 Apache Flink Studio용 새로운 관리형 서비스를 사용하는 것이 좋습니다. SQL Managed Service for Apache Flink Studio는 사용 편의성과 고급 분석 기능을 결합하여 정교한 스트림 처리 애플리케이션을 몇 분 만에 구축할 수 있도록 합니다.

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

애플리케이션 입력 구성

Amazon Kinesis Data Analytics 애플리케이션이 단일 스트리밍 소스로부터 입력을 수신할 수도 있고, 선택적으로 하나의 참조 데이터 소스를 사용할 수도 있습니다. 자세한 설명은 Amazon Kinesis Data Analytics for SQL 애플리케이션: 작동 방식 섹션을 참조하세요. 이 주제 섹션에서는 애플리케이션 입력 소스에 대해 설명합니다.

스트리밍 소스 구성

애플리케이션을 생성하는 시점에 스트리밍 소스를 지정합니다. 애플리케이션을 만든 후 입력을 수정할 수도 있습니다. Amazon Kinesis Data Analytics는 애플리케이션에 다음과 같은 스트리밍 소스를 지원합니다.

  • Kinesis 데이터 스트림

  • Firehose 전송 스트림

참고

2023년 9월 12일 이후에는 Kinesis Data Analytics for SQL의 기존 사용자가 아닌 경우, Kinesis Data Firehose를 소스로 사용하여 새 애플리케이션을 생성할 수 없습니다. KinesisFirehoseInput과 함께 Kinesis Data Analytics for SQL 애플리케이션을 사용하는 기존 고객은 Kinesis Data Analytics를 사용하여 기존 계정 내에서 KinesisFirehoseInput와 함께 애플리케이션을 계속 추가할 수 있습니다. 기존 고객이 Kinesis Data Analytics for SQL 애플리케이션을 KinesisFirehoseInput과 함께 사용하여 새 계정을 생성하려는 경우 서비스 한도 증가 양식을 통해 사례를 생성할 수 있습니다. 자세한 정보는 AWS Support Center 섹션을 참조하세요. 프로덕션으로 승격하기 전에 항상 새 애플리케이션을 테스트하는 것이 좋습니다.

참고

Kinesis 데이터 스트림이 암호화되었다면 Kinesis Data Analytics는 추가 구성 없이도 암호화된 시스템 내의 데이터에 액세스할 수 있습니다. Kinesis Data Analytics는 Kinesis Data Streams에서 읽은 암호화되지 않은 데이터는 저장하지 않습니다. 자세한 설명은 Kinesis Data Streams을 위한 서버측 암호화란 무엇인가?를 참조하십시오.

Kinesis Data Analytics는 새로운 데이터에 대해 스트리밍 소스를 지속적으로 폴링하여 입력 구성에 따라 애플리케이션 내 스트림에서 수집합니다.

참고

애플리케이션의 입력으로 Kinesis 스트림을 추가해도 스트림의 데이터에는 영향을 미치지 않습니다. Firehose 전송 스트림과 같은 다른 리소스도 동일한 Kinesis 스트림에 액세스하는 경우 Firehose 전송 스트림과 Kinesis 데이터 분석 애플리케이션 모두 동일한 데이터를 수신합니다. 그러나 처리량 및 조절이 영향을 받을 수 있습니다.

그러면 애플리케이션 코드가 이를 애플리케이션 내 스트림에서 쿼리할 수 있습니다. 입력 구성의 일부로 다음을 제공합니다:

  • 스트리밍 소스 – 스트림의 Amazon 리소스 이름(ARN)과 Kinesis Data Analytics가 사용자를 대신하여 스트림에 액세스할 수 있는 권한을 주는 IAM 역할을 제공합니다.

  • 애플리케이션 내 스트림 명칭의 접두사 – 애플리케이션을 시작할 때 Kinesis Data Analytics가 지정 애플리케이션 내 스트림을 생성합니다. 그러면 애플리케이션 코드에서 이 명칭을 사용하여 애플리케이션 내 스트림에 액세스합니다.

    선택적으로 스트리밍 소스를 복수의 애플리케이션 내 스트림에 매핑할 수 있습니다. 자세한 설명은 한도 섹션을 참조하세요. 이 경우 Amazon Kinesis Data Analytics가 다음과 같은 명칭을 지니는 지정된 수의 애플리케이션 내 스트림을 생성합니다: 접두사_001, 접두사_002접두사_003. 기본 설정으로 Kinesis Data Analytics는 스트리밍 소스를 접두사_001라고 하는 하나의 애플리케이션 내 스트림에 매핑합니다.

    애플리케이션 내 스트림에 행을 삽입할 수 있는 속도에는 한도가 있습니다. 따라서 Kinesis Data Analytics는 그와 같은 애플리케이션 내 스트림을 여러 개 지원하므로 레코드를 훨씬 더 빠른 속도로 애플리케이션에 가져올 수 있습니다. 애플리케이션이 스트리밍 소스에서 데이터를 따라 잡지 못할 경우 병렬 처리 단위를 추가하여 성능을 개선할 수 있습니다.

  • 스키마 매핑 – 스트리밍 소스의 레코드 형식(JSON, CSV)에 대해 명시합니다. 또한 스트림 내 각 레코드를 생성되는 애플리케이션 내 스트림 내 열로 매핑하는 방식에 대해서도 설명합니다. 여기에 열 명칭과 데이터 유형을 입력합니다.

참고

Kinesis Data Analytics는 입력 애플리케이션 내 스트림을 생성할 때 식별자(스트림 명칭 및 열 명칭) 주위에 물음표를 추가합니다. 이 스트림 및 열을 쿼리할 때는 대소문자를 똑같이 구분하여 따옴표로 지정해야 합니다. 식별자에 대한 자세한 설명은 Amazon Managed Service for Apache Flink SQL 참조에서 식별자를 참조하십시오.

Amazon Kinesis Data Analytics 콘솔에서 애플리케이션을 생성하고 입력을 구성할 수 있습니다. 그런 다음에는 콘솔이 필요한 API 호출을 수행합니다. 새 애플리케이션 API를 생성하거나 기존 애플리케이션에 입력 구성을 추가할 때 애플리케이션 입력을 구성할 수 있습니다. 자세한 내용은 CreateApplicationAddApplicationInput 섹션을 참조하세요. 다음은 Createapplication API 요청 본문의 입력 구성 부분입니다.

"Inputs": [ { "InputSchema": { "RecordColumns": [ { "Mapping": "string", "Name": "string", "SqlType": "string" } ], "RecordEncoding": "string", "RecordFormat": { "MappingParameters": { "CSVMappingParameters": { "RecordColumnDelimiter": "string", "RecordRowDelimiter": "string" }, "JSONMappingParameters": { "RecordRowPath": "string" } }, "RecordFormatType": "string" } }, "KinesisFirehoseInput": { "ResourceARN": "string", "RoleARN": "string" }, "KinesisStreamsInput": { "ResourceARN": "string", "RoleARN": "string" }, "Name": "string" } ]

참조 소스 구성

또한 선택적으로 참조 데이터 소스를 기존 애플리케이션에 추가하여 스트리밍 소스에서 들어오는 데이터를 보강할 수 있습니다. 참조 데이터는 Amazon S3 버킷에 객체로 저장해야 합니다. 애플리케이션이 시작되면 Amazon Kinesis Data Analytics이 Amazon S3 객체를 읽고 애플리케이션 내 참조 표를 생성합니다. 그러면 애플리케이션 코드에서 이를 애플리케이션 내 스트림에 조인할 수 있습니다.

지원되는 형식(CSV, JSON)을 사용하여 참조 데이터를 Amazon S3 객체에 저장합니다. 예를 들어, 애플리케이션이 주식 주문에 대한 분석을 수행한다고 가정해 보겠습니다. 스트리밍 소스에 대해 다음이 레코드 형식을 취합니다.

Ticker, SalePrice, OrderId AMZN $700 1003 XYZ $250 1004 ...

이 경우, 참조 데이터 소스를 유지하여 회사 명칭과 같은 각 주식 티커에 관한 상세 정보를 제공하는 것을 고려할 수 있을 것입니다.

Ticker, Company AMZN, Amazon XYZ, SomeCompany ...

API 또는 콘솔을 사용하여 애플리케이션 참조 데이터 소스를 추가할 수 있습니다. Amazon Kinesis Data Analytics는 참조 데이터 소스를 관리하기 위해 다음과 같은 API 작업을 제공합니다.

콘솔을 사용하여 참조 데이터를 추가하는 방법에 대한 자세한 설명은 예: 참조 데이터를 Kinesis Data Analytics 애플리케이션에 추가 섹션을 참조하십시오.

유념할 사항:

  • 애플리케이션이 실행 중이면 Kinesis Data Analytics는 애플리케이션 내 참조 표를 생성한 다음 바로 참조 표를 로드합니다.

  • 애플리케이션이 실행 중이 아니면 (예: 대기 모드에 있을 때) Kinesis Data Analytics는 업데이트된 입력 구성만 저장합니다. 애플리케이션 실행이 시작되면 Kinesis Data Analytics가 참조 표를 애플리케이션에 표로 로드합니다.

Kinesis Data Analytics가 애플리케이션 내 참조 표를 생성한 후 데이터를 새로 고치려고 한다고 가정해 보겠습니다. 아마도 Amazon S3 객체를 업데이트했거나 다른 Amazon S3 객체를 사용하려 하려고 할 것입니다. 이 경우, UpdateApplication을 명시적으로 호출하거나, 콘솔에서 작업, 참조 데이터 표 동기화를 선택할 수 있습니다. Kinesis Data Analytics는 애플리케이션 내 참조 표를 자동으로 새로 고치지 않습니다.

참조 데이터 소스로 생성할 수 있는 Amazon S3 객체의 크기에는 한도가 있습니다. 자세한 설명은 한도 섹션을 참조하세요. 객체 크기가 한도를 초과하는 경우 Kinesis Data Analytics는 데이터를 로드할 수 없습니다. 실행 중에 애플리케이션 상태는 표시되지만, 데이터는 읽혀지지 않습니다.

참조 데이터 소스를 추가할 때 다음의 정보를 제공합니다.

  • S3 버킷 및 객체 키 명칭 – 버킷 명칭 및 객체 키 외에도 Kinesis Data Analytics가 사용자를 대신하여 객체를 읽을 권한을 줄 IAM 역할도 제공합니다.

  • 애플리케이션 내 참조 표 명칭 – Kinesis Data Analytics가 이 애플리케이션 내 표를 생성하고 Amazon S3 객체를 읽어서 표를 채웁니다. 이는 애플리케이션 코드에서 지정한 표 명칭입니다.

  • 스키마 매핑 – 레코드 형식(JSON, CSV), Amazon S3 객체에 저장된 데이터의 인코딩을 기술합니다. 각 데이터 요소가 애플리케이션 내 참조 표에 있는 열에 어떻게 매핑되는지도 기술합니다.

다음은 AddApplicationReferenceDataSource API 요청의 요청 본문입니다.

{ "applicationName": "string", "CurrentapplicationVersionId": number, "ReferenceDataSource": { "ReferenceSchema": { "RecordColumns": [ { "IsDropped": boolean, "Mapping": "string", "Name": "string", "SqlType": "string" } ], "RecordEncoding": "string", "RecordFormat": { "MappingParameters": { "CSVMappingParameters": { "RecordColumnDelimiter": "string", "RecordRowDelimiter": "string" }, "JSONMappingParameters": { "RecordRowPath": "string" } }, "RecordFormatType": "string" } }, "S3ReferenceDataSource": { "BucketARN": "string", "FileKey": "string", "ReferenceRoleARN": "string" }, "TableName": "string" } }