Amazon Kinesis Data Streams 를 대상으로 사용AWS Database Migration Service - AWS Database Migration Service

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

Amazon Kinesis Data Streams 를 대상으로 사용AWS Database Migration Service

다음을 사용할 수 있습니다.AWS DMS데이터를 Amazon Kinesis 데이터 스트림으로 마이그레이션합니다. Amazon Kinesis Amazon Kinesis Data Streams 서비스의 일부입니다. Kinesis 데이터 스트림을 사용하여 대량의 데이터 레코드 스트림을 실시간으로 수집 및 처리할 수 있습니다.

Kinesis 데이터 스트림은 샤드로 구성됩니다. 샤드는 스트림에서 고유하게 식별되는 데이터 레코드 시퀀스입니다. Amazon Kinesis Data Streams Streams의 샤드에 대한 자세한 내용은 를 참조하십시오.샤드에서Amazon Kinesis Data Streams 개발자 가이드.

AWS Database Migration ServiceJSON을 사용하여 Kinesis 데이터 스트림에 레코드를 게시합니다. 변환 중 AWS DMS는 각 레코드를 원본 데이터베이스로부터 JSON 형식 또는 JSON_UNFORMATTED 메시지 형식의 속성-값 페어로 직렬화합니다. JSON_UNFORMATTED 메시지 형식은 줄 바꿈 구분 기호가 있는 한 줄 JSON 문자열입니다. 이를 통해 Amazon Kinesis Data Firehose Firehose는 Amazon S3 대상으로 Kinesis 데이터를 전송한 다음 Amazon Athena를 비롯한 다양한 쿼리 엔진을 사용하여 쿼리할 수 있습니다.

객체 매핑을 사용하여 데이터를 지원되는 데이터 원본에서 대상 스트림으로 마이그레이션합니다. 객체 매핑을 통해, 데이터 레코드를 스트림에 구조화하는 방법을 결정합니다. 또한 각 테이블에 대해 Kinesis Data Streams 분할된 데이터베이스로 그룹화하는 데 사용하는 파티션 키를 정의합니다.

일시AWS DMSKinesis Data Streams 대상 엔드포인트에 테이블을 생성하며, 소스 데이터베이스 엔드포인트만큼 많은 테이블을 생성합니다.AWS DMS또한 여러 Kinesis Data Streams 파라미터 값을 설정합니다. 테이블 생성 비용은 마이그레이션할 테이블 수와 데이터 양에 따라 달라집니다.

참고

SSL 모드에 대한 옵션AWS DMS콘솔 또는 API는 일부 데이터 스트리밍 및 Kinesis 및 DynamoDB와 같은 NoSQL 서비스에는 적용되지 않습니다. 기본적으로 안전하므로AWS DMSSSL 모드 설정이 없음과 같음을 보여 줍니다 (SSL 모드=없음). SSL을 사용하기 위해 엔드포인트에 대한 추가 구성을 제공할 필요는 없습니다. 예를 들어 Kinesis를 대상 엔드포인트로 사용하는 경우 기본적으로 안전합니다. Kinesis에 대한 모든 API 호출은 SSL을 사용하므로 추가 SSL 옵션이 필요하지 않습니다.AWS DMS엔드포인트. HTTPS 프로토콜을 사용하여 SSL 엔드포인트를 통해 데이터를 안전하게 저장하고 데이터를 검색할 수 있습니다.AWS DMSKinesis Data Stream에 연결할 때 기본적으로 사용합니다.

Kinesis Data Streams 엔드포인트 설정

Kinesis Data Streams 대상 엔드포인트를 사용하는 경우 다음을 사용하여 트랜잭션 및 제어 세부 정보를 가져올 수 있습니다.KinesisSettings옵션AWS DMSAPI.

다음과 같은 방법으로 연결 설정을 지정할 수 있습니다.

  • 에서AWS DMS콘솔, 엔드포인트 설정 사용

  • CLI에서는kinesis-settings옵션CreateEndpoint명령.

CLI에서는 다음 요청 파라미터를 사용하십시오.kinesis-settings옵션:

참고

SupportIncludeNullAndEmpty엔드포인트 설정은 에서 사용할 수 있습니다AWS DMS버전 3.4.1 이상. 하지만 Kinesis Data Streams 대상에 대한 다음 엔드포인트 설정에 대한 지원은 에서 사용할 수 있습니다.AWS DMS.

  • MessageFormat— 엔드포인트에서 만든 레코드의 출력 형식입니다. 메시지 형식은 JSON(기본값) 또는 JSON_UNFORMATTED(탭이 없는 한 줄)입니다.

  • IncludeControlDetails— Kinesis 메시지 출력에서 Kinesis 메시지 출력에서 테이블 정의, 열 정의, 테이블 정의, 열 정의, 테이블 정의, 열 정의, 테이블 정의 기본값은 false입니다.

  • IncludeNullAndEmpty— NULL 및 빈 열을 대상에 포함합니다. 기본값은 false입니다.

  • IncludePartitionValue— 파티션 유형이 이 아닌 경우 Kinesis 메시지 출력에서 파티션 값을 표시합니다.schema-table-type. 기본값은 false입니다.

  • IncludeTableAlterOperations— 다음과 같이 제어 데이터의 테이블을 변경하는 모든 데이터 정의 언어 (DDL) 작업을 포함합니다.rename-table,drop-table,add-column,drop-column, 및rename-column. 기본값은 false입니다.

  • IncludeTransactionDetails— 소스 데이터베이스의 자세한 트랜잭션 정보를 제공합니다. 이 정보에는 커밋 타임스탬프, 로그 위치 및 transaction_id, previous_transaction_id, transaction_record_id (트랜잭션 내의 레코드 오프셋)에 대한 값이 포함됩니다. 기본값은 false입니다.

  • PartitionIncludeSchemaTable— 파티션 유형이 인 경우 스키마 및 테이블 이름을 파티션 값에 접두사로 지정합니다.primary-key-type. 이렇게 하면 Kinesis 샤드 간의 데이터 분산이 증가합니다. 예를 들어 SysBench 스키마에 수천 개의 테이블이 있고 각 테이블에 기본 키의 범위가 제한되어 있다고 가정하겠습니다. 이 경우 동일한 기본 키가 수천 개의 테이블에서 동일한 샤드로 전송되어 제한이 발생합니다. 기본값은 false입니다.

다음 예제에서는kinesis-settings예제와 함께 사용 중인 옵션create-endpoint를 사용하여 실행한 명령AWS CLI.

aws dms create-endpoint --endpoint-identifier=$target_name --engine-name kinesis --endpoint-type target --region us-east-1 --kinesis-settings ServiceAccessRoleArn=arn:aws:iam::333333333333:role/dms-kinesis-role, StreamArn=arn:aws:kinesis:us-east-1:333333333333:stream/dms-kinesis-target-doc,MessageFormat=json-unformatted, IncludeControlDetails=true,IncludeTransactionDetails=true,IncludePartitionValue=true,PartitionIncludeSchemaTable=true, IncludeTableAlterOperations=true

멀티스레드 전체 로드 작업 설정

전송 속도를 높이려면AWS DMSKinesis Data Streams 대상 인스턴스에 대한 멀티스레드 전체 로드를 지원합니다. DMS는 다음과 같은 작업 설정을 통해 이 멀티태스킹을 지원합니다.

  • MaxFullLoadSubTasks— 이 옵션을 사용하면 병렬로 로드할 최대 소스 테이블 수를 지정할 수 있습니다. DMS는 전용 하위 작업을 사용하여 각 테이블을 해당 Kinesis 대상 테이블에 로드합니다. 기본값은 8이며, 최대값은 49입니다.

  • ParallelLoadThreads— 이 옵션을 사용하여 다음과 같은 스레드 수를 지정할 수 있습니다.AWS DMS각 테이블을 Kinesis 대상 테이블에 로드하는 데 사용합니다. Kinesis Data Streams 대상의 최대값은 32입니다. 이 최대 한도를 증가시키도록 요청할 수 있습니다.

  • ParallelLoadBufferSize— 이 옵션을 사용하여 parallel 로드 스레드가 Kinesis 대상에 데이터를 로드하는 데 사용하는 버퍼에 저장할 최대 레코드 수를 지정합니다. 기본값은 50입니다. 최대값은 1,000입니다. 이 설정은 ParallelLoadThreads와 함께 사용하십시오. ParallelLoadBufferSize는 둘 이상의 스레드가 있는 경우에만 유효합니다.

  • ParallelLoadQueuesPerThread— 이 옵션을 사용하여 각 동시 스레드가 대기열에서 데이터 레코드를 제거하고 대상에 대한 배치 로드를 생성하기 위해 액세스하는 대기열 수를 지정합니다. 기본값은 1입니다. 하지만 다양한 페이로드 크기의 Kinesis 타겟의 유효 범위는 스레드당 5~512개의 대기열입니다.

멀티스레드 CDC 로드 작업 설정

작업 설정을 사용하여 Kinesis와 같은 실시간 데이터 스트리밍 대상 엔드포인트에 대한 변경 데이터 캡처 (CDC) 의 성능을 개선할 수 있습니다.PutRecordsAPI 호출. 이렇게 하려면 ParallelApply* 작업 설정을 사용하여 동시 스레드 수, 스레드당 대기열 및 버퍼에 저장할 레코드 수를 지정해야 합니다. 예를 들어 CDC 로드를 수행하고 128개의 스레드를 병렬로 적용한다고 가정하겠습니다. 또한 버퍼당 50개 레코드가 저장된 스레드당 64개 대기열에 액세스하려고 합니다.

CDC 성능을 승격하기 위해 AWS DMS에서는 다음 작업 설정을 지원합니다.

  • ParallelApplyThreads— 다음과 같은 동시 스레드의 수를 지정합니다.AWS DMSCDC 로드 중에 데이터 레코드를 Kinesis 대상 엔드포인트로 푸시하는 데 사용합니다. 기본값은 0이고 최대값은 32입니다.

  • ParallelApplyBufferSize— CDC 로드 중에 동시 스레드가 Kinesis 대상 엔드포인트로 푸시할 수 있도록 각 버퍼 대기열에 저장할 최대 레코드 수를 지정합니다. 기본값은 100이고 최댓값은 1,000입니다. ParallelApplyThreads가 둘 이상의 스레드를 지정할 때 이 옵션을 사용합니다.

  • ParallelApplyQueuesPerThread— CDC 중에 각 스레드가 대기열에서 데이터 기록을 제거하고 Kinesis 엔드포인트에 대한 배치 로드를 생성하기 위해 액세스하는 대기열 수를 지정합니다.

ParallelApply* 작업 설정을 사용할 때 partition-key-type 기본값은 테이블의 schema-name.table-name가 아니라 primary-key입니다.

이전 이미지를 사용하여 Kinesis 데이터 스트림에 대한 CDC 행의 원래 값을 대상으로 보기

Kinesis와 같은 데이터 스트리밍 대상에 CDC 업데이트를 작성할 때 업데이트로 변경하기 전에 원본 데이터베이스 행의 원래 값을 볼 수 있습니다. 이를 위해 AWS DMS는 소스 데이터베이스 엔진에서 제공되는 데이터를 기반으로 업데이트 이벤트의 이전 이미지를 채웁니다.

소스 데이터베이스 엔진에 따라 이전 이미지에 대해 서로 다른 양의 정보를 제공합니다.

  • Oracle은 열이 변경되는 경우에만 열에 대한 업데이트를 제공합니다.

  • PostgreSQL은 기본 키의 일부인 열에 대한 데이터(변경 여부에 관계 없음)만 제공합니다. 모든 열에 대한 데이터 (변경 여부) 를 제공하려면 다음을 설정해야 합니다.REPLICA_IDENTITYFULL대신DEFAULT. 참고로 다음 중 하나를 선택해야 합니다.REPLICA_IDENTITY각 테이블에 대해 신중하게 설정하십시오. 설정한 경우REPLICA_IDENTITYFULL모든 열 값이 WAL (미리 쓰기 로깅) 에 지속적으로 기록됩니다. 이로 인해 자주 업데이트되는 테이블에 성능 또는 리소스 문제가 발생할 수 있습니다.

  • MySQL 일반적으로 BLOB 및 CLOB 데이터 형식 (변경 여부) 을 제외한 모든 열에 대한 데이터를 제공합니다.

이전 이미징을 활성화하여 소스 데이터베이스의 원래 값을 AWS DMS 출력에 추가하려면 BeforeImageSettings 작업 설정 또는 add-before-image-columns 파라미터를 사용합니다. 이 파라미터는 열 변환 규칙을 적용합니다.

BeforeImageSettings는 다음과 같이 소스 데이터베이스 시스템에서 수집된 값을 사용하여 모든 업데이트 작업에 새 JSON 속성을 추가합니다.

"BeforeImageSettings": { "EnableBeforeImage": boolean, "FieldName": string, "ColumnFilter": pk-only (default) / non-lob / all (but only one) }
참고

적용만 가능BeforeImageSettings에AWS DMSCDC 구성 요소가 포함된 작업 (예: 전체 로드 및 CDC 작업 (기존 데이터 마이그레이션 및 진행 중인 변경 사항 복제) 또는 CDC 전용 작업 (데이터 변경만 복제) 전체 로드 전용 작업에는 BeforeImageSettings를 적용하지 마십시오.

BeforeImageSettings 옵션의 경우 다음이 적용됩니다.

  • 이전 이미징을 활성화하려면 EnableBeforeImage 옵션을 true로 설정합니다. 기본값은 false입니다.

  • FieldName 옵션을 사용하여 새 JSON 속성에 이름을 지정합니다. EnableBeforeImagetrue인 경우 FieldName이 필수이며 비워 둘 수 없습니다.

  • ColumnFilter 옵션은 이전 이미징을 사용하여 추가할 열을 지정합니다. 테이블 기본 키의 일부인 열만 추가하려면 기본값 pk-only를 사용하고, 이전 이미지 값이 있는 모든 열을 추가하려면 all을 사용합니다. 앞의 이미지에는 CLOB 또는 BLOB과 같은 LOB 데이터 유형이 있는 열이 포함되지 않습니다.

    "BeforeImageSettings": { "EnableBeforeImage": true, "FieldName": "before-image", "ColumnFilter": "pk-only" }
참고

Amazon S3 타겟은 지원하지 않음BeforeImageSettings. S3 대상의 경우 add-before-image-columns 변환 규칙만 사용하여 CDC 중에 이전 이미징을 수행합니다.

이전 이미지 변환 규칙 사용

작업 설정 대신 열 변환 규칙을 적용하는 add-before-image-columns 파라미터를 사용할 수 있습니다. 이 파라미터를 사용하면 CDC 중에 Kinesis와 같은 데이터 스트리밍 타겟에서 이미징하기 전에 활성화할 수 있습니다.

변환 규칙에 add-before-image-columns를 사용하면 이전 이미지 결과를 보다 세밀하게 제어할 수 있습니다. 변환 규칙을 통해 객체 로케이터를 사용하여 규칙에 대해 선택한 테이블을 제어할 수 있습니다. 또한 변환 규칙을 함께 연결하여 테이블마다 서로 다른 규칙을 적용할 수 있습니다. 그런 다음 다른 규칙을 사용하여 생성된 열을 조작할 수 있습니다.

참고

동일한 작업 내에서 BeforeImageSettings 작업 설정과 함께 add-before-image-columns 파라미터를 사용해서는 안 됩니다. 단일 작업에는 이 파라미터 또는 설정 중 하나만 사용하고 둘 다 사용하지 마십시오.

해당 열에 대해 add-before-image-columns 파라미터가 있는 transformation 규칙 유형이 before-image-def 섹션을 제공해야 합니다. 다음은 그 한 예입니다.

{ "rule-type": "transformation", … "rule-target": "column", "rule-action": "add-before-image-columns", "before-image-def":{ "column-filter": one-of (pk-only / non-lob / all), "column-prefix": string, "column-suffix": string, } }

column-prefix의 값은 열 이름 앞에 추가되며, column-prefix의 기본값은 BI_입니다. column-suffix의 값은 열 이름 뒤에 추가되며, 기본값은 비어 있습니다. column-prefixcolumn-suffix를 모두 빈 문자열로 설정하지 마십시오.

column-filter에 대해 하나의 값을 선택합니다. 테이블 기본 키의 일부인 열만 추가하려면 pk-only를 선택하고, LOB 유형이 아닌 열만 추가하려면 non-lob를 선택하고, 이전 이미지 값이 있는 모든 열을 추가하려면 all을 선택합니다.

이전 이미지 변환 규칙의 예

다음 예의 변환 규칙은 대상에서 BI_emp_no라는 새 열을 추가합니다. UPDATE employees SET emp_no = 3 WHERE emp_no = 1; 같은 문은 BI_emp_no 필드를 1로 채웁니다. Amazon S3 타겟에 CDC 업데이트를 작성하면BI_emp_no열을 사용하면 어떤 원래 행이 업데이트되었는지 알 수 있습니다.

{ "rules": [ { "rule-type": "selection", "rule-id": "1", "rule-name": "1", "object-locator": { "schema-name": "%", "table-name": "%" }, "rule-action": "include" }, { "rule-type": "transformation", "rule-id": "2", "rule-name": "2", "rule-target": "column", "object-locator": { "schema-name": "%", "table-name": "employees" }, "rule-action": "add-before-image-columns", "before-image-def": { "column-prefix": "BI_", "column-suffix": "", "column-filter": "pk-only" } } ] }

add-before-image-columns 규칙 작업 사용에 대한 자세한 내용은 변환 규칙 및 작업 단원을 참조하십시오.

Kinesis 데이터 스트림을 대상으로 사용하기 위한 전제 조건AWS Database Migration Service

Kinesis 데이터 스트림을 대상으로 설정하기 전AWS DMS, IAM 역할을 생성해야 합니다. 이 역할은 허용해야 합니다AWS DMS마이그레이션 중인 Kinesis 데이터 스트림에 대한 액세스 권한을 가정하고 이에 대한 액세스 권한을 부여합니다. 최소 액세스 권한 집합이 다음 IAM 정책에 나와 있습니다.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "1", "Effect": "Allow", "Principal": { "Service": "dms.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }

Kinesis 데이터 스트림으로 마이그레이션하는 데 사용하는 역할에는 다음 권한이 있어야 합니다.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "kinesis:DescribeStream", "kinesis:PutRecord", "kinesis:PutRecords" ], "Resource": "arn:aws:kinesis:region:accountID:stream/streamName" } ] }

Kinesis Data Streams 를 의 대상으로 사용하는 경우의 제한AWS Database Migration Service

Kinesis Data Streams 대상으로 사용할 때는 다음과 같은 제한 사항이 적용됩니다.

  • AWS DMS트랜잭션과 관계없이 각 업데이트를 소스 데이터베이스의 단일 레코드에 지정된 Kinesis 데이터 스트림의 하나의 데이터 레코드로 게시합니다. 그러나 KinesisSettings API의 관련 파라미터를 사용하여 각 데이터 레코드에 대한 트랜잭션 세부 정보를 포함할 수 있습니다.

  • 전체 LOB 모드는 지원되지 않습니다.

  • Kinesis Data Streams 스트림은 중복 제거를 지원하지 않습니다. 스트림의 데이터를 소비하는 애플리케이션은 중복 레코드를 처리해야 합니다. 자세한 내용을 알아보려면 다음 섹션을 참조하세요.중복 레코드 처리에서Amazon Kinesis Data Streams 개발자 가이드.

  • AWS DMS는 다음과 같이 두 가지 형식의 파티션 키를 지원합니다.

    • SchemaName.TableName: 스키마와 테이블 이름의 조합입니다.

    • ${AttributeName}: JSON 내 한 필드의 값 또는 원본 데이터베이스 내 테이블의 기본 키입니다.

  • Kinesis Data Streams Streams의 저장 데이터를 암호화하는 방법에 대한 자세한 내용은 을 참조하십시오.Kinesis Data Streams의 데이터 보호에서AWS Key Management Service개발자 안내서.

  • BatchApplyKinesis 엔드포인트에서는 지원되지 않습니다. Batch 적용 사용 (예:BatchApplyEnabledKinesis 대상의 대상 메타데이터 (작업 설정) 를 사용하면 데이터가 손실될 수 있습니다.

  • Kinesis 타겟은 동일한 Kinesis 데이터 스트림에서만 지원됩니다.AWS계정.

  • MySQL 소스에서 마이그레이션하는 경우 BeforeImage 데이터에는 CLOB 및 BLOB 데이터 형식이 포함되지 않습니다. 자세한 내용은 이전 이미지를 사용하여 Kinesis 데이터 스트림에 대한 CDC 행의 원래 값을 대상으로 보기을 참조하세요.

  • AWS DMS값을 마이그레이션합니다.BigInt과학 표기법 형식이 16자리 이상인 데이터 유형입니다.

객체 매핑을 사용하여 데이터를 Kinesis 데이터 스트림으로 마이그레이션

AWS DMS테이블 매핑 규칙을 사용하여 소스의 데이터를 대상 Kinesis 데이터 스트림에 매핑합니다. 데이터를 대상 스트림에 매핑하기 위해 객체 매핑이라는 테이블 매핑 규칙 유형을 사용합니다. 객체 매핑을 사용하여 원본의 데이터 레코드가 Kinesis 데이터 스트림에 게시된 데이터 레코드에 매핑되는 방식을 정의합니다.

Kinesis 데이터 스트림에는 파티션 키가 있는 것 외에 사전 설정된 구조가 없습니다. 객체 매핑 규칙에서 데이터 레코드의 partition-key-type에 사용할 수 있는 값은 schema-table, transaction-id, primary-key, constantattribute-name입니다.

객체 매핑 규칙을 만들려면 rule-typeobject-mapping으로 지정합니다. 이 규칙은 사용할 객체 매핑 유형을 지정합니다.

이 규칙의 구조는 다음과 같습니다.

{ "rules": [ { "rule-type": "object-mapping", "rule-id": "id", "rule-name": "name", "rule-action": "valid object-mapping rule action", "object-locator": { "schema-name": "case-sensitive schema name", "table-name": "" } } ] }

AWS DMS는 현재 map-record-to-recordmap-record-to-document만을 rule-action 파라미터의 유효한 값으로 지원합니다. map-record-to-recordmap-record-to-document 값은 exclude-columns 속성 목록의 일부로 제외되지 않은 레코드에 대해 AWS DMS가 기본적으로 수행하는 작업을 지정합니다. 이러한 값은 어떤 식으로든 속성 매핑에 영향을 미치지 않습니다.

사용map-record-to-record관계형 데이터베이스에서 Kinesis 데이터 스트림으로 마이그레이션하는 경우 이 규칙 유형은taskResourceId.schemaName.tableName관계형 데이터베이스의 값을 Kinesis 데이터 스트림의 파티션 키로 사용하고 소스 데이터베이스의 각 열에 대한 속성을 생성합니다. map-record-to-record를 사용할 때 exclude-columns 속성 목록에 소스 테이블의 열이 나열되지 않은 경우, AWS DMS는 대상 스트림에 해당 속성을 생성합니다. 이러한 해당 속성은 원본 열이 속성 매핑에 사용되는지 여부와 상관없이 생성됩니다.

사용map-record-to-document속성 이름 “_doc”을 사용하여 소스 열을 적절한 대상 스트림의 단일 플랫 문서에 넣습니다.AWS DMS데이터를 “라는 원본의 단일 평면 맵에 배치합니다._doc“. 이 배치는 exclude-columns 속성 목록에 나열되지 않은 소스 테이블의 모든 열에 적용됩니다.

map-record-to-record를 이해하는 한 가지 방법은 작업 중일 때 관찰하는 것입니다. 이 예에서는 다음 구조와 데이터를 사용하여 관계형 데이터베이스 테이블 행에서 시작한다고 가정합니다.

FirstName LastName StoreId HomeAddress HomePhone WorkAddress WorkPhone DateofBirth

Randy

Marsh

5

221B Baker Street

1234567890

31 Spooner Street, Quahog

9876543210

1988/02/29

다음과 같은 스키마에서 이 정보를 마이그레이션하려면TestKinesis 데이터 스트림에 데이터를 대상 스트림에 매핑하는 규칙을 생성합니다. 다음 규칙은 그 매핑 과정을 보여 줍니다.

{ "rules": [ { "rule-type": "selection", "rule-id": "1", "rule-name": "1", "rule-action": "include", "object-locator": { "schema-name": "Test", "table-name": "%" } }, { "rule-type": "object-mapping", "rule-id": "2", "rule-name": "DefaultMapToKinesis", "rule-action": "map-record-to-record", "object-locator": { "schema-name": "Test", "table-name": "Customers" } } ] }

다음은 Kinesis 데이터 스트림의 결과 레코드 형식을 보여줍니다.

  • StreamName: XXX

  • PartitionKey: 테스트.고객 //SCHMANAME. 테이블 이름

  • 데이터: //다음 JSON 메시지

    { "FirstName": "Randy", "LastName": "Marsh", "StoreId": "5", "HomeAddress": "221B Baker Street", "HomePhone": "1234567890", "WorkAddress": "31 Spooner Street, Quahog", "WorkPhone": "9876543210", "DateOfBirth": "02/29/1988" }

그러나 동일한 규칙을 사용하지만rule-action파라미터map-record-to-document특정 열을 제외하십시오. 다음 규칙은 그 매핑 과정을 보여 줍니다.

{ "rules": [ { "rule-type": "selection", "rule-id": "1", "rule-name": "1", "rule-action": "include", "object-locator": { "schema-name": "Test", "table-name": "%" } }, { "rule-type": "object-mapping", "rule-id": "2", "rule-name": "DefaultMapToKinesis", "rule-action": "map-record-to-document", "object-locator": { "schema-name": "Test", "table-name": "Customers" }, "mapping-parameters": { "exclude-columns": [ "homeaddress", "homephone", "workaddress", "workphone" ] } } ] }

이 경우exclude-columns파라미터,FirstName,LastName,StoreIdDateOfBirth, 매핑됨_doc. 다음은 결과 레코드 형식을 보여줍니다.

{ "data":{ "_doc":{ "FirstName": "Randy", "LastName": "Marsh", "StoreId": "5", "DateOfBirth": "02/29/1988" } } }

속성 매핑으로 날짜 재구성

속성 맵을 사용하여 Kinesis 데이터 스트림으로 데이터를 마이그레이션하는 동안 데이터를 재구성할 수 있습니다. 예를 들어 원본의 필드 몇 개를 대상의 단일 필드로 묶어야 하는 경우도 있을 것입니다. 다음의 속성 맵은 날짜를 재구성하는 방법을 보여줍니다.

{ "rules": [ { "rule-type": "selection", "rule-id": "1", "rule-name": "1", "rule-action": "include", "object-locator": { "schema-name": "Test", "table-name": "%" } }, { "rule-type": "object-mapping", "rule-id": "2", "rule-name": "TransformToKinesis", "rule-action": "map-record-to-record", "target-table-name": "CustomerData", "object-locator": { "schema-name": "Test", "table-name": "Customers" }, "mapping-parameters": { "partition-key-type": "attribute-name", "partition-key-name": "CustomerName", "exclude-columns": [ "firstname", "lastname", "homeaddress", "homephone", "workaddress", "workphone" ], "attribute-mappings": [ { "target-attribute-name": "CustomerName", "attribute-type": "scalar", "attribute-sub-type": "string", "value": "${lastname}, ${firstname}" }, { "target-attribute-name": "ContactDetails", "attribute-type": "document", "attribute-sub-type": "json", "value": { "Home": { "Address": "${homeaddress}", "Phone": "${homephone}" }, "Work": { "Address": "${workaddress}", "Phone": "${workphone}" } } } ] } } ] }

partition-key에 상수 값을 설정하려면 partition-key 값을 지정합니다. 예를 들어 이 방법을 통해 모든 데이터를 단일 샤드에 저장할 수 있습니다. 다음 매핑은 이러한 접근 방식을 보여줍니다.

{ "rules": [ { "rule-type": "selection", "rule-id": "1", "rule-name": "1", "object-locator": { "schema-name": "Test", "table-name": "%" }, "rule-action": "include" }, { "rule-type": "object-mapping", "rule-id": "1", "rule-name": "TransformToKinesis", "rule-action": "map-record-to-document", "object-locator": { "schema-name": "Test", "table-name": "Customer" }, "mapping-parameters": { "partition-key": { "value": "ConstantPartitionKey" }, "exclude-columns": [ "FirstName", "LastName", "HomeAddress", "HomePhone", "WorkAddress", "WorkPhone" ], "attribute-mappings": [ { "attribute-name": "CustomerName", "value": "${FirstName},${LastName}" }, { "attribute-name": "ContactDetails", "value": { "Home": { "Address": "${HomeAddress}", "Phone": "${HomePhone}" }, "Work": { "Address": "${WorkAddress}", "Phone": "${WorkPhone}" } } }, { "attribute-name": "DateOfBirth", "value": "${DateOfBirth}" } ] } } ] }
참고

특정 테이블을 위한 제어 레코드에 대한 partition-key 값은 TaskId.SchemaName.TableName입니다. 특정 작업을 위한 제어 레코드에 대한 partition-key 값은 해당 레코드의 TaskId입니다. partition-key 값을 객체 매핑에 지정해도 제어 레코드에 대한 partition-key에는 영향이 없습니다.

Kinesis Data Streams Streams의 메시지 형식

JSON 출력은 단지 키-값 페어의 목록입니다. JSON_UNFORMATTED 메시지 형식은 줄 바꿈 구분 기호가 있는 한 줄 JSON 문자열입니다.

AWS DMSKinesis Data Streams 스트림의 데이터를 더 쉽게 사용할 수 있도록 다음과 같은 예약 필드를 제공합니다.

RecordType

레코드 유형은 데이터나 제어일 수 있습니다. 데이터 레코드는 원본 내의 실제 행을 나타냅니다. 제어 레코드는 스트림 내의 중요 이벤트를 나타냅니다(예: 작업의 재시작).

작업

데이터 레코드의 경우, 작업은 load, insert, update 또는 delete일 수 있습니다.

제어 레코드의 경우 작업이 다음과 같을 수 있습니다.create-table,rename-table,drop-table,change-columns,add-column,drop-column,rename-column, 또는column-type-change.

SchemaName

레코드에 대한 원본 스키마입니다. 제어 레코드의 경우, 이 필드는 비워둘 수 있습니다.

TableName

레코드에 대한 원본 테이블입니다. 제어 레코드의 경우, 이 필드는 비워둘 수 있습니다.

타임스탬프

JSON 메시지가 구성된 경우의 타임스탬프입니다. 이 필드는 ISO 8601 형식으로 구성되었습니다.