

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

# 개정 기록 쿼리
<a name="working.history"></a>

**중요**  
지원 종료 알림: 기존 고객은 07/31/2025에 지원이 종료될 때까지 Amazon QLDB를 사용할 수 있습니다. 자세한 내용은 [Amazon QLDB 원장을 Amazon Aurora PostgreSQL로 마이그레이션](https://aws.amazon.com/blogs/database/migrate-an-amazon-qldb-ledger-to-amazon-aurora-postgresql/)을 참조하세요.

Amazon QLDB는 모든 문서의 전체 기록을 테이블에 저장합니다. 내장된 기록 함수를 쿼리하면 [문서 업데이트 및 삭제](working.revisions.md)에서 이전에 삽입, 업데이트 및 삭제한 차량 등록 문서의 세 가지 개정본을 모두 볼 수 있습니다.

**Topics**
+ [

## 기록 함수
](#working.history.function)
+ [

## 기록 쿼리 예제
](#working.history.example)

## 기록 함수
<a name="working.history.function"></a>

QLDB의 기록 함수는 테이블의 시스템 정의 뷰에서 개정 내용을 반환하는 PartiQL 확장입니다. 따라서 커밋된 뷰와 동일한 스키마에 데이터와 관련 메타데이터가 모두 포함됩니다.

**구문**

```
SELECT * FROM history( table_name | 'table_id' [, `start-time` [, `end-time` ] ] ) AS h
[ WHERE h.metadata.id = 'id' ]
```인수

***table\$1name* \$1 '*table\$1id*'**  
테이블 이름 또는 테이블 ID입니다. 테이블 이름은 큰따옴표로 표시하거나 따옴표 없이 표시할 수 있는 PartiQL 식별자입니다. 테이블 ID는 작은따옴표로 묶여야 하는 문자열 리터럴입니다. 테이블 ID 사용에 대한 자세한 내용은 [비활성 테이블의 기록 쿼리](working.manage-tables.md#working.history.inactive-table) 섹션을 참조하세요.

**`*start-time*`, `*end-time*`**  
(선택 사항)모든 개정이 활성화된 시간 범위를 지정합니다. *이러한 파라미터는 개정이 트랜잭션에서 저널에 커밋된 시간 범위를 지정하지 않습니다.*  
시작 및 종료 시간은 백틱(``...``)으로 표시할 수 있는 Ion 타임스탬프 리터럴입니다. 자세한 내용은 [Amazon QLDB에서 PartiQL을 사용한 Ion 쿼리](ql-reference.query.md) 섹션을 참조하세요.  
이 시간 파라미터는 다음과 같은 동작을 합니다.  
+ *시작 시간*과 *종료 시간*이 모두 포함됩니다. 이는 [ISO 8601](https://www.iso.org/iso-8601-date-and-time-format.html) 날짜 및 시간 형식이어야 하며 협정 세계시(UTC)여야 합니다.
+ *시작 시간*은 *종료 시간*보다 작거나 같아야 하며 임의의 과거 날짜가 될 수 있습니다.
+ *종료 시간*은 현재 UTC 날짜 및 시간보다 작거나 같아야 합니다.
+ *시작 시간*은 지정하고 *종료 시간*은 지정하지 않는 경우 쿼리는 *종료 시간*을 현재 날짜 및 시간으로 기본 설정합니다. 둘 다 지정하지 않으면 쿼리는 전체 기록을 반환합니다.

**'*id*'**  
(선택 사항)수정 기록을 쿼리하려는 문서 ID로, 작은 따옴표로 표시됩니다.

**작은 정보**  
가장 좋은 방법은 날짜 범위(*시작 시간* 및 *종료 시간*)와 문서 ID(`metadata.id`)를 모두 사용하여 기록 쿼리를 한정하는 것입니다. QLDB에서는 모든 `SELECT` 쿼리가 트랜잭션에서 처리되며 [트랜잭션 시간 초과 제한](limits.md#limits.fixed)이 적용됩니다.  
기록 쿼리는 테이블에 만든 인덱스를 사용하지 않습니다. QLDB 기록은 문서 ID로만 인덱싱되며, 이번에는 추가 기록 인덱스를 만들 수 없습니다. 시작 시간과 종료 시간을 포함하는 기록 쿼리는 날짜 범위 한정이라는 이점을 갖습니다.

## 기록 쿼리 예제
<a name="working.history.example"></a>

차량 등록 문서의 내역을 쿼리하려면 이전에 [문서 업데이트 및 삭제](working.revisions.md)에 저장한 `id`을 사용하세요. 예를 들어, 다음 기록 쿼리는 `2019-06-05T00:00:00Z`와 `2019-06-05T23:59:59Z` 사이에 `ADR2Ll1fGsU4Jr4EqTdnQF` 활성화된 문서 ID의 모든 개정 내용을 반환합니다.

**참고**  
시작 및 종료 시간 파라미터는 개정이 트랜잭션에서 저널에 커밋된 시간 범위를 지정하지 *않는다는* 점을 기억하세요. 예를 들어 `2019-06-05T00:00:00Z` 이전에 개정이 커밋되었고 해당 시작 시간 이후에도 활성 상태를 유지한 경우 이 예제 쿼리는 결과에 해당 개정 내용을 반환합니다.

`id`, 시작 시간 및 종료 시간을 적절하게 사용자 고유의 값으로 바꾸세요.

```
SELECT * FROM history(VehicleRegistration, `2019-06-05T00:00:00Z`, `2019-06-05T23:59:59Z`) AS h
WHERE h.metadata.id = 'ADR2Ll1fGsU4Jr4EqTdnQF' --replace with your id
```

쿼리 결과는 다음과 비슷한 모습이어야 합니다.

```
{
    blockAddress:{
        strandId:"JdxjkR9bSYB5jMHWcI464T",
        sequenceNo:14
    },
    hash:{{B2wYwrHKOWsmIBmxUgPRrTx9lv36tMlod2xVvWNiTbo=}},
    data: {
        VIN: "1HVBBAANXWH544237",
        LicensePlateNumber: "LS477D",
        State: "WA",
        City: "Tacoma",
        PendingPenaltyTicketAmount: 42.20,
        ValidFromDate: 2011-10-26T,
        ValidToDate: 2023-09-25T,
        Owners: {
            PrimaryOwner: { PersonId: "KmA3XPKKFqYCP2zhR3d0Ho" },
            SecondaryOwners: []
        }
    },
    metadata:{
        id:"ADR2Ll1fGsU4Jr4EqTdnQF",
        version:0,
        txTime:2019-06-05T20:53:321d-3Z,
        txId:"HgXAkLjAtV0HQ4lNYdzX60"
    }
},
{
    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"
    }
},
{
    blockAddress:{
        strandId:"JdxjkR9bSYB5jMHWcI464T",
        sequenceNo:19
    },
    hash:{{7bm5DUwpqJFGrmZpb7h9wAxtvggYLPcXq+LAobi9fDg=}},
    metadata:{
        id:"ADR2Ll1fGsU4Jr4EqTdnQF",
        version:2,
        txTime:2019-06-05T21:03:76d-3Z,
        txId:"9GslbtDtpVHAgYghR5FXbZ"
    }
}
```

출력에는 각 항목이 수정된 시기와 어떤 트랜잭션에 의해 수정되었는지에 대한 세부 정보를 제공하는 메타데이터 속성이 포함됩니다. 이 데이터에서 다음을 확인할 수 있습니다.
+ 이 문서는 시스템이 할당한 `id`인 `ADR2Ll1fGsU4Jr4EqTdnQF`로 고유하게 식별됩니다 이는 Base62로 인코딩된 문자열로 표시되는 UUID입니다.
+ `INSERT` 명령문을 사용하면 문서의 초기 개정본(버전 `0`)이 만들어집니다.
+ 이후 업데이트될 때마다 동일한 문서 `id`와 증가된 버전 번호를 사용하여 새 개정을 생성합니다.
+ 이 `txId` 필드는 각 개정을 커밋한 트랜잭션을 나타내며 `txTime`은 각 개정이 커밋된 시기를 보여줍니다.
+ `DELETE` 명령문은 문서의 새로운 최종 개정본을 생성합니다. 이 최종 개정본에는 메타데이터만 있습니다.

개정 버전을 영구 삭제하는 방법을 알아보려면 [문서 개정본 수정하기](working.redaction.md)으로 이동하세요.