Amazon S3 객체의 사용자 지정 접두사 이해 - Amazon Data Firehose

Amazon Data Firehose 스트림을 Amazon S3의 Apache Iceberg Table로 전송하는 작업은 미리 보기 중이며 변경될 수 있습니다.

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

Amazon S3 객체의 사용자 지정 접두사 이해

Amazon S3로 전송되는 객체는 의 이름 형식을 따릅니다 <evaluated prefix><suffix>. 런타임에 평가되는 식을 포함하는 사용자 지정 접두사를 지정할 수 있습니다. 지정한 사용자 지정 접두사는 의 기본 접두사보다 우선합니다. YYYY/MM/dd/HH

사용자 지정 접두사에 !{namespace:value} 형식의 표현식을 사용할 수 있으며, 여기서 namespace는 다음 섹션에서 설명하듯이 다음 중 하나가 될 수 있습니다.

  • firehose

  • timestamp

  • partitionKeyFromQuery

  • partitionKeyFromLambda

슬래시로 끝나는 접두사는 Amazon S3 버킷에서 자리 표시자로 나타납니다. 자세한 내용은 Amazon 데이터 FirehoseDeveloper 가이드의 Amazon S3 객체 이름 형식을 참조하십시오.

timestamp 네임스페이스

이 네임스페이스의 유효한 값은 유효한 Java DateTimeFormatter 문자열입니다. 예를 들어 2018년에 !{timestamp:yyyy} 표현식은 2018로 평가됩니다.

타임스탬프를 평가할 때 Firehose는 작성 중인 Amazon S3 객체에 포함된 가장 오래된 레코드의 대략적인 도착 타임스탬프를 사용합니다.

기본적으로 타임스탬프는 in입니다. UTC 하지만 원하는 시간대를 지정할 수 있습니다. 예를 들어, 시간대를 아시아/도쿄로 구성할 수 있습니다. AWS Management Console 일본 표준시를 대신 사용하려는 경우 API 매개변수 setting (CustomTimeZone) 에서 사용할 수도 있습니다. UTC 지원되는 시간대 목록을 보려면 Amazon S3 객체 이름 형식을 참조하십시오.

동일한 접두사 표현식에 timestamp 네임스페이스를 한 번 넘게 사용할 경우 각 인스턴스는 동일한 시간으로 평가됩니다.

firehose 네임스페이스

이 네임스페이스에는 error-output-type 값과 random-string 값을 사용할 수 있습니다. 다음 표에는 사용 방법이 나와 있습니다.

firehose 네임스페이스 값
변환 설명 입력 예 출력 예시 참고
error-output-type Firehose 스트림의 구성 및 실패 이유에 따라 {processing-failed, -failed, splunk-failed, AmazonOpenSearchService,} 문자열 중 하나로 평가됩니다. format-conversion-failed http-endpoint-failed

동일한 접두사 표현식에 한 번 넘게 사용할 경우 각 인스턴스는 동일한 오류 문자열로 평가됩니다.

myPrefix/result=!{firehose:error-output-type}/!{timestamp:yyyy/MM/dd} myPrefix/result=processing-failed/2018/08/03 error-output-type 값은 필드에서만 사용할 수 있습니다. ErrorOutputPrefix
random-string

11자의 무작위 문자열로 평가됩니다. 동일한 접두사 표현식에 한 번 넘게 사용할 경우 각 인스턴스는 새로운 무작위 문자열로 평가됩니다.

myPrefix/!{firehose:random-string}/ myPrefix/046b6c7f-0b/ 두 접두사 유형 모두에 사용할 수 있습니다.

형식 문자열 선두에 이를 배치하여 무작위의 접두사를 얻을 수 있으며, 경우에 따라 이 접두사는 Amazon S3를 통해 최고의 처리량을 얻기 위해 필요한 경우가 있습니다.

partitionKeyFromLambdapartitionKeyFromQuery 네임스페이스

동적 파티셔닝의 경우, S3 버킷 접두사에 다음 표현식 형식을 사용해야 합니다: !{namespace:value}, 여기서 네임스페이스는 partitionKeyFromQuery 또는 partitionKeyFromLambda이거나, 둘 다일 수 있습니다. 인라인 구문 분석을 사용하여 소스 데이터에 대한 파티션 키를 생성하는 경우 다음 형식으로 지정된 표현식으로 구성되는 S3 버킷 접두사 값을 지정해야 합니다: "partitionKeyFromQuery:keyID". 를 사용하는 경우 AWS 소스 데이터에 대한 파티션 키를 생성하는 Lambda 함수를 사용하려면 다음 형식으로 지정된 표현식으로 구성된 S3 버킷 접두사 값을 지정해야 합니다. "partitionKeyFromLambda:keyID" 자세한 내용은 Amazon Firehose 스트림 생성의 “대상으로 Amazon S3 선택”을 참조하십시오.

의미 체계 규칙

PrefixErrorOutputPrefix 표현식에 적용되는 규칙은 다음과 같습니다.

  • timestamp 네임스페이스의 경우 작은따옴표로 묶이지 않은 문자가 평가됩니다. 즉, 값 필드에서 작은따옴표로 이스케이프 처리된 문자열은 문자로 처리됩니다.

  • 타임스탬프 네임스페이스 표현식이 포함되지 않은 접두사를 지정하는 경우 Firehose는 표현식을 필드의 값에 추가합니다. !{timestamp:yyyy/MM/dd/HH/} Prefix

  • !{ 시퀀스는 !{namespace:value} 표현식에만 나타날 수 있습니다.

  • Prefix에 표현식이 없을 경우에만 ErrorOutputPrefix가 null이 될 수 있습니다. 이 경우 Prefix<specified-prefix>yyyy/MM/DDD/HH/로 평가되고 ErrorOutputPrefix<specified-prefix><error-output-type>YYYY/MM/DDD/HH/로 평가됩니다. DDD는 해당 연도의 날짜를 나타냅니다.

  • ErrorOutputPrefix에 표현식을 지정할 경우, 최소 한 개의 !{firehose:error-output-type} 인스턴스를 포함시켜야 합니다.

  • Prefix에는 !{firehose:error-output-type}을 포함할 수 없습니다.

  • Prefix 또는 ErrorOutputPrefix는 평가 후 512자를 넘을 수 없습니다.

  • 대상이 Amazon Redshift인 경우, Prefix에 표현식이 포함되어서는 안 되며, ErrorOutputPrefix는 null이어야 합니다.

  • 대상이 Amazon OpenSearch 서비스 또는 Splunk이고 ErrorOutputPrefix 아니오가 지정되어 있는 경우 Firehose는 이 필드를 사용하여 실패한 Prefix 레코드를 검색합니다.

  • 대상이 Amazon S3인 경우 Amazon S3 대상 구성의 PrefixErrorOutputPrefix를 각각 성공 레코드 및 실패 레코드에 사용합니다. 다음을 사용하는 경우 AWS CLI 또는 를 API 사용하여 자체 PrefixExtendedS3DestinationConfiguration 를 사용하여 Amazon S3 백업 구성을 지정할 수 ErrorOutputPrefix 있습니다.

  • 를 사용하는 경우 AWS Management Console 대상을 Amazon S3로 설정하면 Firehose는 성공적인 레코드와 실패한 레코드에 대해 각각 대상 구성의 및 를 사용합니다. Prefix ErrorOutputPrefix 표현식을 사용하여 접두사를 지정하는 경우 다음을 포함하는 오류 접두사를 지정해야 합니다. !{firehose:error-output-type}

  • 와 함께 사용하는 ExtendedS3DestinationConfiguration 경우 AWS CLI API, 또는 AWS CloudFormationS3BackupConfiguration, a를 지정하면 Firehose는 기본값을 제공하지 않습니다. ErrorOutputPrefix

  • 식을 만들 때는 partitionKeyFromLambdapartitionKeyFromQuery 네임스페이스를 사용할 수 없습니다. ErrorOutputPrefix

접두사의 예

PrefixErrorOutputPrefix의 예
Input 평가된 접두사 (2018년 8월 UTC 27일 오전 10시 30분)

Prefix: 지정 안 함

ErrorOutputPrefix: myFirehoseFailures/!{firehose:error-output-type}/

Prefix: 2018/08/27/10

ErrorOutputPrefix: myFirehoseFailures/processing-failed/

Prefix: !{timestamp:yyyy/MM/dd}

ErrorOutputPrefix: 지정 안 함

잘못된 입력: 접두사에 표현식이 포함된 경우 ErrorOutputPrefix는 null이 될 수 없음

Prefix: myFirehose/DeliveredYear=!{timestamp:yyyy}/anyMonth/rand=!{firehose:random-string}

ErrorOutputPrefix: myFirehoseFailures/!{firehose:error-output-type}/!{timestamp:yyyy}/anyMonth/!{timestamp:dd}

Prefix: myFirehose/DeliveredYear=2018/anyMonth/rand=5abf82daaa5

ErrorOutputPrefix: myFirehoseFailures/processing-failed/2018/anyMonth/10

Prefix: myPrefix/year=!{timestamp:yyyy}/month=!{timestamp:MM}/day=!{timestamp:dd}/hour=!{timestamp:HH}/

ErrorOutputPrefix: myErrorPrefix/year=!{timestamp:yyyy}/month=!{timestamp:MM}/day=!{timestamp:dd}/hour=!{timestamp:HH}/!{firehose:error-output-type}

Prefix: myPrefix/year=2018/month=07/day=06/hour=23/

ErrorOutputPrefix: myErrorPrefix/year=2018/month=07/day=06/hour=23/processing-failed

Prefix: myFirehosePrefix/

ErrorOutputPrefix: 지정 안 함

Prefix: myFirehosePrefix/2018/08/27/

ErrorOutputPrefix: myFirehosePrefix/processing-failed/2018/08/27/