문서 개정본 수정하기 - 아마존 퀀텀 레저 데이터베이스 (아마존QLDB)

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

문서 개정본 수정하기

중요

지원 종료 알림: 기존 고객은 2025년 7월 31일 지원이 종료될 QLDB 때까지 Amazon을 사용할 수 있습니다. 자세한 내용은 아마존 QLDB 원장을 Amazon Aurora SQL Postgre로 마이그레이션을 참조하십시오.

QLDBAmazon에서 DELETE 명령문은 문서를 삭제된 것으로 표시하는 새 수정 버전을 생성하여 논리적으로만 문서를 삭제합니다. QLDB또한 테이블 기록에서 사용하지 않는 문서 수정 내용을 영구적으로 삭제할 수 있는 데이터 수정 작업도 지원합니다.

참고

2021년 7월 22일 이전에 생성된 원장은 현재 수정할 수 없습니다. Amazon QLDB 콘솔에서 원장 생성 시간을 확인할 수 있습니다.

수정 작업을 수행하면 지정된 정 버전의 사용자 데이터만 삭제되고 저널 시퀀스와 문서 메타데이터는 변경되지 않은 상태로 둡니다. 이렇게 하면 원장의 전체 데이터 무결성이 유지됩니다.

에서 QLDB 데이터 삭제를 시작하기 전에 Amazon QLDB PartiQL 수정 고려 사항 및 제한 참조에서 검토해야 합니다.

저장된 프로시저로 수정

REDACT_REVISION 저장 프로시저를 사용하여 원장에서 비활성 상태인 개별 개정본을 영구적으로 삭제할 수 있습니다. 이 저장 프로시저는 인덱싱된 저장소와 저널 저장소 모두에서 지정된 개정본의 모든 사용자 데이터를 삭제합니다. 하지만 저널 시퀀스와 문서 ID 및 해시를 포함한 문서 메타데이터는 변경되지 않습니다. 이 작업은 되돌릴 수 없습니다.

지정된 문서 수정본은 기록에서 비활성 상태여야 합니다. 문서의 최신 활성 수정본은 수정할 수 없습니다.

여러 수정본을 수정하려면 각 수정본마다 한 번씩 저장 프로시저를 실행해야 합니다. 트랜잭션당 하나의 수정본을 수정할 수 있습니다.

구문

EXEC REDACT_REVISION `block-address`, 'table-id', 'document-id'
인수
`block-address`

수정할 문서의 수정본의 저널 블록 위치입니다. 주소는 strandIdsequenceNo라는 두 개의 필드로 구성된 Amazon Ion 구조입니다.

이 값은 백틱으로 표시되는 Ion 리터럴 값입니다. 예:

`{strandId:"JdxjkR9bSYB5jMHWcI464T", sequenceNo:17}`
'table-id'

수정하고자 하는 문서 개정본이 있는 테이블의 고유 ID로, 작은 따옴표로 표시됩니다.

'document-id'

수정할 개정본의 고유한 문서 ID로, 작은 따옴표로 표시됩니다.

수정 완료 여부 확인

저장 프로시저를 실행하여 삭제 요청을 제출하면 에서 데이터 삭제를 QLDB 비동기적으로 처리합니다. 완료되면 개정의 사용자 데이터(data 구조로 표시됨)가 영구적으로 제거됩니다. 수정 요청이 완료되었는지 확인하려면 다음 중 하나를 사용할 수 있습니다.

개정본 수정이 완료되면 개정본의 data 구조가 새 dataHash 필드로 대체됩니다. 이 필드의 값은 다음 예와 같이 제거된 data 구조의 Ion 해시입니다. 따라서 원장은 전반적인 데이터 무결성을 유지하고 기존 검증 작업을 통해 암호학적으로 검증 가능한 상태를 유지합니다. API 검증에 대한 자세한 정보는 아마존에서의 데이터 검증 QLDB을 참조하세요.

수정 예제

이전에 개정 기록 쿼리에서 검토한 차량 등록 문서를 생각해 보세요. 두 번째 개정(version:1)을 삭제하려 한다고 가정합니다. 다음 쿼리 예제는 수정 전의 이 개정본을 보여줍니다. 쿼리 결과에서 수정될 data 구조는 다음과 같이 강조 표시됩니다.red italics.

SELECT * FROM history(VehicleRegistration) AS h WHERE h.metadata.id = 'ADR2Ll1fGsU4Jr4EqTdnQF' --replace with your id AND h.metadata.version = 1
{ blockAddress:{ strandId:"JdxjkR9bSYB5jMHWcI464T", sequenceNo:17 }, hash:{{LGSFZ4iEYWZeMwmAqcxxNyT4wbCtuMOmFCj8pEd6Mp0=}}, data: { VIN: "1HVBBAANXWH544237", LicensePlateNumber: "LS477D", State: "WA", PendingPenaltyTicketAmount: 42.20, ValidFromDate: 2011-10-26T, ValidToDate: 2023-09-25T, Owners: { PrimaryOwner: { PersonId: "KmA3XPKKFqYCP2zhR3d0Ho" }, SecondaryOwners: [] }, City: "Bellevue" }, metadata:{ id:"ADR2Ll1fGsU4Jr4EqTdnQF", version:1, txTime:2019-06-05T21:01:442d-3Z, txId:"9cArhIQV5xf5Tf5vtsPwPq" } }

이 값을 REDACT_REVISION 저장 프로시저로 전달해야 하므로 쿼리 결과에서 blockAddress를 기록해 두세요. 그런 다음 다음과 같이 시스템 카탈로그를 쿼리하여 VehicleRegistration 테이블의 고유 ID를 찾습니다.

SELECT tableId FROM information_schema.user_tables WHERE name = 'VehicleRegistration'

이 테이블 ID를 문서 ID 및 블록 주소와 함께 사용하여 REDACT_REVISION를 실행합니다. 테이블 ID와 문서 ID는 작은따옴표로 묶어야 하는 문자열 리터럴이고, 블록 주소는 백틱으로 묶인 Ion 리터럴입니다. 이 인수는 필요에 따라 사용자 고유의 값으로 바꿉니다.

EXEC REDACT_REVISION `{strandId:"JdxjkR9bSYB5jMHWcI464T", sequenceNo:17}`, '5PLf9SXwndd63lPaSIa0O6', 'ADR2Ll1fGsU4Jr4EqTdnQF'
작은 정보

QLDB콘솔이나 QLDB 셸을 사용하여 테이블 ID 또는 문서 ID (또는 문자열 리터럴 값) 를 쿼리하는 경우 반환된 값은 큰따옴표로 묶입니다. 하지만 REDACT_REVISION 저장 프로시저의 테이블 ID 및 문서 ID 인수를 지정할 때는 값을 작은 따옴표로 묶어야 합니다.

이는 명령문을 PartiQL 형식으로 QLDB 작성하지만 결과는 Amazon Ion 형식으로 반환되기 때문입니다. 에서 PartiQL의 구문 및 의미에 대한 자세한 내용은 을 참조하십시오. QLDB PartiQL을 사용하여 Ion 쿼리하기

유효한 수정 요청은 다음과 같이 수정 중인 문서 개정본을 나타내는 Ion 구조를 반환합니다.

{ blockAddress: { strandId: "JdxjkR9bSYB5jMHWcI464T", sequenceNo: 17 }, tableId: "5PLf9SXwndd63lPaSIa0O6", documentId: "ADR2Ll1fGsU4Jr4EqTdnQF", version: 1 }

이 저장 프로시저를 실행하면 수정 요청이 QLDB 비동기적으로 처리됩니다. 수정이 완료되면 구조가 영구적으로 제거되고 새 data 구조로 대체됩니다.dataHash 필드. 이 필드의 값은 다음과 같이 제거된 data 구조의 Ion 해시입니다.

참고

dataHash 예제는 정보 제공용으로만 제공되며 실제 계산된 해시 값이 아닙니다.

{ blockAddress:{ strandId:"JdxjkR9bSYB5jMHWcI464T", sequenceNo:17 }, hash:{{LGSFZ4iEYWZeMwmAqcxxNyT4wbCtuMOmFCj8pEd6Mp0=}}, dataHash: {{s83jd7sfhsdfhksj7hskjdfjfpIPP/DP2hvionas2d4=}}, metadata:{ id:"ADR2Ll1fGsU4Jr4EqTdnQF", version:1, txTime:2019-06-05T21:01:442d-3Z, txId:"9cArhIQV5xf5Tf5vtsPwPq" } }

활성 개정본 삭제 및 수정

활성 문서 개정본(즉, 각 문서의 삭제되지 않은 최신 개정)은 데이터 수정 대상이 아닙니다. 활성 개정본을 수정하려면 먼저 이를 업데이트하거나 삭제해야 합니다. 이렇게 하면 이전에 활성 개정본이었던 것이 기록으로 이동하고 수정이 가능해집니다.

사용 사례에서 전체 문서를 삭제된 것으로 표시해야 하는 경우 먼저 DELETE명령문을 사용합니다. 예를 들어, 다음 명령문은 f가 있는 VehicleRegistration 문서를 논리적으로 삭제합니다VIN. 1HVBBAANXWH544237

DELETE FROM VehicleRegistration AS r WHERE r.VIN = '1HVBBAANXWH544237'

그런 다음 앞에서 설명한 대로 이 삭제 전에 이전 개정본을 수정합니다. 필요한 경우 이전 개정본을 개별적으로 수정할 수도 있습니다.

사용 사례에서 문서를 활성 상태로 유지해야 하는 경우 먼저 UPDATEor FROM문을 사용하여 수정하려는 필드를 가리거나 제거합니다. 이 프로세스는 다음 섹션에서 설명합니다.

개정본 내 특정 필드 수정하기

QLDB문서 수정 내용 내 특정 필드의 교정을 지원하지 않습니다. 이렇게 하려면 먼저 UPDATE- REMOVE 또는 FROM- REMOVE 문을 사용하여 수정본에서 기존 필드를 제거하면 됩니다. 예를 들어, 다음 명령문은 VIN a가 붙은 VehicleRegistration 문서에서 LicensePlateNumber 필드를 제거합니다1HVBBAANXWH544237.

UPDATE VehicleRegistration AS r REMOVE r.LicensePlateNumber WHERE r.VIN = '1HVBBAANXWH544237'

그런 다음 앞에서 설명한 대로 이 제거 전에 이전 개정본을 수정합니다. 필요한 경우 현재 제거된 이 필드를 포함하는 이전 개정본을 개별적으로 수정할 수도 있습니다.

쿼리를 최적화하는 방법을 알아보려면 쿼리 성능 최적화으로 이동하세요.