정의
$iceberg 단계는 연결 레지스트리에서 AWS S3 버킷에 대한 연결을 지정하며, 이 버킷에서 데이터를 Apache iceberg 테이블에 쓰기 (write) 수 있습니다.
배치
$iceberg 파이프라인에 나타나는 경우 파이프라인의 마지막 단계여야 합니다. 파이프라인당 하나의 $iceberg 단계만 사용할 수 있습니다.
구문
$iceberg 파이프라인 단계의 프로토타입 형식은 다음과 같습니다.
{ "$iceberg": { "connectionName": "<registered-connection>", "bucket": "<target-bucket>", "databaseName": "<database>", "tableName": "<string>" | <expression>, "path": "<key-prefix>", "region": "<target-region>", "mode": "cdc" | "insert", "idFieldName": "<field-name>", "partitionedBy": { "<column-name>": "<partition-transform>", . . . }, "catalog": { "type": "hadoop" | "glue" } } }
$iceberg 단계에서는 다음 필드가 있는 문서를 사용합니다.
필드 | 유형 | 필요성 | 설명 |
|---|---|---|---|
| 문자열 | 필수 사항 | 읽기 및 쓰기에 사용할 AWS S3 연결의 이름입니다. 이 이름은 연결 레지스트리의 연결 이름과 일치해야 합니다. |
| 문자열 | 필수 사항 | 대상 Apache 아이스버그 데이터베이스 포함하는 S3 버킷의 이름입니다. |
| 문자열 | 필수 사항 | 대상 테이블이 포함된 Apache 아이스크림 데이터베이스 의 이름입니다. |
| 문자열 | 표현식 | 필수 사항 | 대상 Apache 빙산 테이블의 이름입니다. 문자열 또는 문자열로 평가되는 표현식 이어야 합니다. 문서별 동적 라우팅에 표현식을 사용합니다. |
| 문자열 | 필수 사항 | Apache 아이스크림 데이터베이스 경로의 접두사 키입니다. |
| 문자열 | 조건부 | 버킷의AWS 리전 . AWS에서 실행 않는 스트림 프로세서에 필요합니다. |
| 문자열 | 옵션 | 입력 문서당 수행할 작업을 결정하기 위한 전략입니다.
기본값은 |
| 문자열 | 옵션 |
기본값은 |
| 문서 | 옵션 | 분할 사양. 이 필드를 설정하지 않으면 하나 이상의 키-값 쌍을 포함하는 문서 여야 합니다. 각 키는 파티션 변환을 수행할 열의 이름이어야 하며, 각 값은 사용할 파티션 변환이어야 합니다. 첫 번째 파티션 변환은 주어진 필드의 파티션 변환 값은 다음 중 하나여야 합니다.
Apache 버그 파티션 변환에 대한 자세한 내용은 Apache 버그 설명서를 참조하세요. |
| 문서 | 옵션 | 사용할 빙산 카탈로그를 정의하는 문서입니다. |
행동
$iceberg 단계를 사용하는 경우 스트림 프로세서의 마지막 단계여야 합니다.
Atlas Stream Processing은 SP10, SP30 및 SP50 스트림 프로세서에서만 $iceberg 단계를 지원합니다. 프로세서 계층에 따라 동적 라우팅에 대해 지원되는 최대 테이블 수가 결정됩니다.
계층 | 최대 테이블 |
|---|---|
SP10 | 5 |
SP30 | 10 |
SP50 | 50 |
단계에서는 스트림 $iceberg 프로세서의 출력 데이터의 스키마 에서 결과 Apache 아이스버그 테이블의 스키마 를 추론합니다. Atlas Stream Processing 스트림 의 새 필드를 관찰하면 그에 따라 테이블 스키마 발전합니다.
아직 존재하지 않는 테이블을 지정하는 경우, Apache iceberg는 해당 테이블을 대상으로 하는 첫 번째 메시지를 받을 때 테이블을 생성합니다.
Atlas Stream Processing Apache ice버그 테이블에 대한 출력에 대해 최소 한 번 처리 보장 .
동적 표현식 필드 의 값으로 사용할 tableName 수 있습니다. 동적 표현식 사용하여 문서별 값을 캡처하면 이러한 값에 따라 입력 문서를 다른 테이블로 라우팅할 수 있습니다. 표현식 문자열로 평가되어야 합니다. 예시 는 동적 라우팅을 참조하세요. 자세한 학습 은 표현식 연산자를 참조하세요.
동적 표현식 사용하여 주제 지정했지만 Atlas Stream Processing 특정 메시지의 표현식 평가할 수 없는 경우, Atlas Stream Processing 데드 레터 대기열이 구성된 경우 해당 메시지를 데드 레터 큐 로 보내고 후속 메시지를 처리합니다. 구성된 데드 레터 큐 없는 경우 Atlas Stream Processing 메시지를 완전히 건너뛰고 후속 메시지를 처리합니다.
유형 변환
Atlas Stream Processing 단계에서 테이블에 쓸 때 BSON 에서Iceberg 기본 유형으로 유형 변환을 $iceberg 수행합니다.
BSON | Apache 아이스버그 프리미티브 | 세부 정보 |
|---|---|---|
|
| |
|
| |
|
| |
|
| |
|
| |
|
| 16진수 인코딩되었습니다. |
|
| 문자열화된 UUID |
|
| UUID에 적용되지 않음 |
|
| 마이크로초 단위로 측정되는 UTC 시간 |
|
| UTC 시간, 마이크로초단위로 측정 |
|
| 기본 JSON 문자열로 직렬화됩니다. |
|
| 기본 JSON 문자열로 직렬화됩니다. |
다른 BSON types는 지원되지 않습니다. Atlas Stream Processing은 지원되지 않는 BSON types을 포함한 문서를 DLQ로 보냅니다.
예시
다음 예시는 $iceberg 단계의 다양한 애플리케이션을 설명합니다.
변경 스트림 보관
다음 예시 추가 전용 방식으로 Atlas 데이터베이스 의 초기 콘텐츠와 변경 스트림을 Apache ice버그 테이블에 쓰기 (write) 해당 데이터베이스의 운영 기록에 대한 지속형 아카이브를 생성하는 방법을 보여줍니다. 이 집계 에는 두 단계가 있습니다.
$source단계는 Atlas 데이터베이스와 연결하고 구체적으로db데이터베이스의orders컬렉션을 대상으로 지정합니다. 이를 통해 초기 동기화를 실행하여 프로세서 활성화 시점에 데이터베이스의 문서를 캡처하고 각 변경 스트림 이벤트로 전체 문서가 캡처되도록 합니다.$iceberg단계는 AWS S3 버킷에 대한 연결을 설정하여iceberg-warehouse/경로에 있는myTable이라는 이름의 테이블에 기록합니다.insert연산만 지정하여 추가 전용 로그 스타일 쓰기 (write) 흐름을 보장합니다.
{ "$source": { "connectionName": "atlas1", "db": "db", "coll": "orders", "initialSync": { "enable": true }, "config": { "fullDocument": "required" } }, "$iceberg": { "connectionName": "myS3Connection", "bucket": "myData", "path": "iceberg-warehouse/", "tableName": "myTable", "mode": "insert" } }
컬렉션 미러링
다음 예시 Atlas 컬렉션 전체를 Apache ice버그 테이블에 미러링하는 방법을 보여줍니다.
집계를 정의하기 전에 다음 변수를 설정합니다.
const isDeleteExpr = {$eq: [{$meta: "stream.source.operationType"}, "delete"]};
다음 집계 Atlas 소스 컬렉션 의 변경 사항과 동기화 되어 Apache iceberg 테이블 항목을 추가, 업데이트 및 삭제합니다. 4단계로 구성됩니다.
$source단계는 Atlas 데이터베이스와 연결하고 구체적으로db데이터베이스의orders컬렉션을 대상으로 지정합니다. 이를 통해 초기 동기화를 실행하여 프로세서 활성화 시점에 데이터베이스의 문서를 캡처하고 각 변경 스트림 이벤트로 전체 문서가 캡처되도록 합니다.단계는
$matchoperationType를 필터링하여 유효한 작업 유형 선언이 있는 문서만 처리합니다.$replaceRoot단계는 작업 유형에 따라 문서 루트를 변경합니다.삭제 작업의 경우 문서 루트를 문서의 키로 변경합니다. 이로 인해 문서가 삭제되었음을 기록하지만 그 내용은 추가 처리에서 제외됩니다.
다른 모든 작업의 경우 문서 루트를
fullDocument로 변경하고 문서 내용을 전달하여 추가 처리하도록 하는 동안 변경 스트림 메타데이터는 제외합니다.
$iceberg단계는 AWS S3 버킷에 대한 연결을 설정하여iceberg-warehouse/경로에 있는myTable라는 이름의 Apache 아이스버그 테이블에 기록합니다.cdc모드 에서, 이 단계에서는 각 문서 의stream.source.operationType메타데이터 필드 읽어 Apache iceberg 테이블에 대해 수행할 작업을 결정합니다.
{ "$source": { "connectionName": "atlas1", "db": "db", "coll": "orders", "initialSync": { "enable": true }, "config": { "fullDocument": "required" } }, "$match": { "operationType": { "$in": ["insert", "update", "delete", "replace"] } }, "$replaceRoot": { "newRoot": { "$cond": { "if": isDeleteExpr, "then": "$documentKey", "else": "$fullDocument" } } } "$iceberg": { "connectionName": "myS3Connection", "bucket": "myData", "path": "iceberg-warehouse/", "tableName": "myTable", "mode": "cdc" } }
다중 컬렉션 소스에서 다중 테이블 Apache 아이스버그 대상으로
다음 예시에서 Atlas Stream Processing은 동적 표현식을 사용하여 문서를 다양한 출력 대상으로 동적으로 라우팅합니다.
$source단계는 Atlas 데이터베이스와 연결을 수립하며, 구체적으로db데이터베이스의a,b,c컬렉션을 대상으로 합니다. 이를 통해 초기 동기화를 실행하여 프로세서 활성화 시점에 데이터베이스의 문서를 캡처하고 각 변경 스트림 이벤트로 전체 문서가 캡처되도록 합니다.$match단계는operationType이"insert","update","delete"또는"replace"인 문서를 필터링합니다.$replaceRoot단계는 작업 유형에 따라 문서 루트를 변경합니다.삭제 작업의 경우 문서 루트를 문서의 키로 변경합니다. 이로 인해 문서가 삭제되었음을 기록하지만 그 내용은 추가 처리에서 제외됩니다.
다른 모든 작업의 경우 문서 루트를
fullDocument로 변경하고 문서 내용을 전달하여 추가 처리하도록 하는 동안 변경 스트림 메타데이터는 제외합니다.
$iceberg단계는myData이라는 이름의 AWS S3 버킷에 대한 연결을 설정하여iceberg-warehouse/경로의 Apache 아이스버그 테이블에 기록합니다. 문서 메타데이터 에서 검색된 소스collection의 이름에 따라 테이블 이름을 결정합니다. 또한 문서 메타데이터 에 따라 수행할 작업을 결정합니다.
{ "$source": { "connectionName": "atlas1", "db": "db", "coll": ["a", "b", "c"], "initialSync": { "enable": true }, "config": { "fullDocument": "required" } } }, { "$match": { "operationType": { "$in": ["insert", "update", "delete", "replace"] } } }, { "$replaceRoot": { "newRoot": { "$cond": { "if": { "$eq": [{ "$meta": "stream.source.operationType" }, "delete"] }, "then": "$documentKey", "else": "$fullDocument" } } } }, { "$iceberg": { "connectionName": "myS3Connection", "databaseName": "iceberg-db", "bucket": "myData", "path": "iceberg-warehouse/", "tableName": { "$meta": "stream.source.ns.coll" }, "mode": "cdc" } }