기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
문서 개정본 수정하기
중요
지원 종료 알림: 기존 고객은 07/31/2025에 지원이 종료될 때까지 Amazon QLDB를 사용할 수 있습니다. 자세한 내용은 Amazon QLDB 원장을 Amazon Aurora PostgreSQL로 마이그레이션
Amazon QLDB에서 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
` -
수정할 문서의 수정본의 저널 블록 위치입니다. 주소는
strandId
및sequenceNo
라는 두 개의 필드로 구성된 Amazon Ion 구조입니다.이 값은 백틱으로 표시되는 Ion 리터럴 값입니다. 예시:
`{strandId:"JdxjkR9bSYB5jMHWcI464T", sequenceNo:17}`
- '
table-id
' -
수정하고자 하는 문서 개정본이 있는 테이블의 고유 ID로, 작은 따옴표로 표시됩니다.
- '
document-id
' -
수정할 개정본의 고유한 문서 ID로, 작은 따옴표로 표시됩니다.
수정 완료 여부 확인
저장된 프로시저를 실행하여 수정 요청을 제출하면 QLDB는 데이터 수정을 비동기적으로 처리합니다. 완료되면 개정의 사용자 데이터(data
구조로 표시됨)가 영구적으로 제거됩니다. 수정 요청이 완료되었는지 확인하려면 다음 중 하나를 사용할 수 있습니다.
-
기록 함수- 참고: 저널에서 편집을 완료한 후 기록 쿼리에 편집 결과가 표시되기까지 다소 시간이 걸릴 수 있습니다. 비동기 편집이 완료되면 일부 개정 사항이 다른 개정보다 먼저 편집되는 것을 볼 수 있지만 기록 쿼리에는 결국 완료된 결과가 표시됩니다.
개정본 수정이 완료되면 개정본의 data
구조가 새 dataHash
필드로 대체됩니다. 이 필드의 값은 다음 예와 같이 제거된 data
구조의 Ion 해시입니다. 따라서 원장은 전반적인 데이터 무결성을 유지하고 기존 검증 API 작업을 통해 암호화 방식으로 검증 가능한 상태를 유지합니다. 검증에 대한 자세한 정보는 Amazon QLDB에서의 데이터 확인을 참조하세요.
수정 예제
이전에 개정 기록 쿼리에서 검토한 차량 등록 문서를 생각해 보세요. 두 번째 개정(version:1
)을 삭제하려 한다고 가정합니다. 다음 쿼리 예제는 수정 전의 이 개정본을 보여줍니다. 쿼리 결과에서, 수정될 data
구조는 빨간색 기울임꼴
로 강조 표시됩니다.
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 형식으로 반환하기 때문입니다. QLDB에서 PartiQL의 구문 및 시맨틱에 대한 자세한 내용은 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 명령문을 사용합니다. 예를 들어, 다음 명령문은 VIN이 1HVBBAANXWH544237
인 VehicleRegistration
문서를 논리적으로 삭제합니다.
DELETE FROM VehicleRegistration AS r WHERE r.VIN = '1HVBBAANXWH544237'
그런 다음 앞에서 설명한 대로 이 삭제 전에 이전 개정본을 수정합니다. 필요한 경우 이전 개정본을 개별적으로 수정할 수도 있습니다.
사용 사례에 따라 문서를 활성 상태로 유지해야 하는 경우 먼저 UPDATE 또는 FROM 문을 사용하여 수정하려는 필드를 모호하게 하거나 제거해야 합니다. 이 프로세스는 다음 섹션에서 설명합니다.
개정본 내 특정 필드 수정하기
QLDB는 문서 개정 내 특정 필드의 수정을 지원하지 않습니다. 이렇게 하려면 먼저 UPDATE-REMOVE 또는 FROM-REMOVE 문을 사용하여 개정본에서 기존 필드를 제거할 수 있습니다. 예를 들어, 다음 명령문은 VIN이 1HVBBAANXWH544237
인 VehicleRegistration
문서에서 LicensePlateNumber
필드를 제거합니다.
UPDATE VehicleRegistration AS r REMOVE r.LicensePlateNumber WHERE r.VIN = '1HVBBAANXWH544237'
그런 다음 앞에서 설명한 대로 이 제거 전에 이전 개정본을 수정합니다. 필요한 경우 현재 제거된 이 필드를 포함하는 이전 개정본을 개별적으로 수정할 수도 있습니다.
쿼리를 최적화하는 방법을 알아보려면 쿼리 성능 최적화으로 이동하세요.