

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 查詢修訂歷史記錄
<a name="working.history"></a>

**重要**  
支援終止通知：現有客戶將可以使用 Amazon QLDB，直到 07/31/2025 的支援結束為止。如需詳細資訊，請參閱[將 Amazon QLDB Ledger 遷移至 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 是字串常值，必須以單引號括住。若要進一步了解如何使用資料表 IDs，請參閱 [查詢非作用中資料表的歷史記錄](working.manage-tables.md#working.history.inactive-table)。

**`*start-time*`、`*end-time*`**  
（選用） 指定任何修訂作用中的時間範圍。*這些參數不會指定在交易中將修訂遞交至日誌的時間範圍。*  
開始和結束時間是 Ion 時間戳記常值，可以用反引號表示 (``...``)。如需進一步了解，請參閱 [在 Amazon QLDB 中使用 PartiQL 查詢離子](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>

若要查詢車輛註冊文件的歷史記錄，請使用`id`您先前儲存在 中的 [更新和刪除文件](working.revisions.md)。例如，下列歷史記錄查詢`ADR2Ll1fGsU4Jr4EqTdnQF`會傳回 `2019-06-05T00:00:00Z`和 之間曾經作用中的文件 ID 的任何修訂`2019-06-05T23:59:59Z`。

**注意**  
請記住，開始和結束時間參數*不會*指定將修訂遞交至交易中的日誌的時間範圍。例如，如果修訂在 之前遞交，`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-encoded字串表示的 UUID。
+ `INSERT` 陳述式會建立文件的初始修訂 （版本 `0`)。
+ 每個後續更新都會建立具有相同文件`id`和遞增版本編號的新修訂。
+ `txId` 欄位指出遞交每個修訂的交易，並`txTime`顯示每個修訂的遞交時間。
+ `DELETE` 陳述式會建立新的文件最終修訂。此最終修訂僅包含中繼資料。

若要了解如何永久刪除修訂，請繼續 [編輯文件修訂](working.redaction.md)。