QLDB 中的分錄匯出輸出 - Amazon Quantum Ledger Database (Amazon QLDB)

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

QLDB 中的分錄匯出輸出

除了包含日誌區塊的資料物件外,Amazon QLDB 日誌匯出任務還會寫入兩個資訊清單檔案。這些都儲存在您在匯出請求中提供的 Amazon S3 儲存貯體中。以下各節說明每個輸出物件的格式和內容。

注意

如果您指定 JSON 做為匯出任務的輸出格式,QLDB 會在匯出的資料物件中將 Amazon 離子日誌資料向下轉換為 JSON。如需詳細資訊,請前往向下轉換為 JSON 格式

資訊清單檔案

Amazon QLDB 會針對每個匯出請求,在提供的 S3 儲存貯體中建立兩個資訊清單檔案。一旦您提交匯出請求,就會立即建立初始資訊清單檔案。最終的資訊清單檔案會在匯出完成後寫入。您可以使用這些檔案來檢查 Amazon S3 中匯出任務的狀態。

資訊清單檔案內容的格式對應於要求的匯出格式。

初始清單

初始資訊清單表示您的匯出工作已開始。它包含您傳遞給請求的輸入參數。除了 Amazon S3 目的地以及匯出的開始和結束時間參數之外,此檔案還包含exportId. 這exportId是 QLDB 指派給每個匯出工作的唯一識別碼。

檔案命名慣例如下。

s3://DOC-EXAMPLE-BUCKET/prefix/exportId.started.manifest

以下是初始資訊清單檔案及其內容 (Ion) 文字格式的範例。

s3://DOC-EXAMPLE-BUCKET/journalExport/8UyXulxccYLAsbN1aon7e4.started.manifest
{ ledgerName:"my-example-ledger", exportId:"8UyXulxccYLAsbN1aon7e4", inclusiveStartTime:2019-04-15T00:00:00.000Z, exclusiveEndTime:2019-04-15T22:00:00.000Z, bucket:"DOC-EXAMPLE-BUCKET", prefix:"journalExport", objectEncryptionType:"NO_ENCRYPTION", outputFormat:"ION_TEXT" }

初始資訊清單outputFormat只包括在匯出要求中指定的資訊清單。如果未指定輸出格式,則匯出的資料預設為ION_TEXT格式。

DescribeJournalS3 匯出 API 作業和匯出的 Amazon S3 物件的內容類型也會指出輸出格式。

最終清單

最後的資訊清單表示您已完成特定分錄的匯出工作。匯出工作會為每個鏈條寫入個別的最終資訊清單檔案。

注意

在 Amazon QLDB 中,鏈條是分類帳期刊的分區。QLDB 目前僅支援單鏈的期刊。

最終資訊清單包括匯出期間寫入的資料物件金鑰的排序清單。檔案命名慣例如下。

s3://DOC-EXAMPLE-BUCKET/prefix/exportId.strandId.completed.manifest

strandId是 QLDB 指派給鏈的唯一識別碼。以下是 Ion 文本格式的最終清單文件及其內容的示例。

s3://DOC-EXAMPLE-BUCKET/journalExport/8UyXulxccYLAsbN1aon7e4.JdxjkR9bSYB5jMHWcI464T.completed.manifest
{ keys:[ "2019/04/15/22/JdxjkR9bSYB5jMHWcI464T.1-4.ion", "2019/04/15/22/JdxjkR9bSYB5jMHWcI464T.5-10.ion", "2019/04/15/22/JdxjkR9bSYB5jMHWcI464T.11-12.ion", "2019/04/15/22/JdxjkR9bSYB5jMHWcI464T.13-20.ion", "2019/04/15/22/JdxjkR9bSYB5jMHWcI464T.21-21.ion" ] }

資料物件

Amazon QLDB 會以 Amazon Ion 格式的文字或二進位表示法或 JSON 行文字格式,在提供的 Amazon S3 儲存貯體中寫入日誌資料物件。

在 JSON 行格式中,匯出資料物件中的每個區塊都是以換行符分隔的有效 JSON 物件。您可以使用此格式將 JSON 匯出與 Amazon Athena 等分析工具直接整合, AWS Glue 因為這些服務可以自動剖析以換行符分隔的 JSON。如需有關格式的詳細資訊,請參閱 JSON 行

資料物件名稱

分錄匯出工作會以下列命名慣例寫入這些資料物件。

s3://DOC-EXAMPLE-BUCKET/prefix/yyyy/mm/dd/hh/strandId.startSn-endSn.ion|.json
  • 每個匯出工作的輸出資料都會分解為區塊。

  • yyyy/mm/dd/hh— 您提交導出請求的日期和時間。在同一小時內匯出的物件會分組在相同的 Amazon S3 前置詞下。

  • strandId— 包含要匯出之日誌區塊之特定鏈的唯一 ID。

  • startSn-endSn— 包含在物件中的序號範圍。序號指定圖塊在鏈中的位置。

例如,假設您指定了下列路徑。

s3://DOC-EXAMPLE-BUCKET/journalExport/

您的匯出任務會建立類似下列內容的 Amazon S3 資料物件。此範例顯示 Ion 格式的物件名稱。

s3://DOC-EXAMPLE-BUCKET/journalExport/2019/04/15/22/JdxjkR9bSYB5jMHWcI464T.1-5.ion

資料物件內容

每個資料物件都包含具有以下格式的分錄圖塊物件。

{ blockAddress: { strandId: String, sequenceNo: Int }, transactionId: String, blockTimestamp: Datetime, blockHash: SHA256, entriesHash: SHA256, previousBlockHash: SHA256, entriesHashList: [ SHA256 ], transactionInfo: { statements: [ { //PartiQL statement object } ], documents: { //document-table-statement mapping object } }, revisions: [ { //document revision object } ] }

區塊是在交易期間認可至日誌的物件。區塊包含交易中繼資料,以及代表交易中認可之文件修訂的項目,以及認可它們的 PartiQL 陳述式。

以下是具有 Ion 文本格式樣本數據的塊的示例。若要取得有關圖塊物件中功能變數的資訊,請參閱〈〉亞馬遜 QLDB 中的期刊內容

注意

此區塊範例僅供參考。顯示的哈希值不是實際計算的哈希值。

{ blockAddress:{ strandId:"JdxjkR9bSYB5jMHWcI464T", sequenceNo:1234 }, transactionId:"D35qctdJRU1L1N2VhxbwSn", blockTimestamp:2019-10-25T17:20:21.009Z, blockHash:{{WYLOfZClk0lYWT3lUsSr0ONXh+Pw8MxxB+9zvTgSvlQ=}}, entriesHash:{{xN9X96atkMvhvF3nEy6jMSVQzKjHJfz1H3bsNeg8GMA=}}, previousBlockHash:{{IAfZ0h22ZjvcuHPSBCDy/6XNQTsqEmeY3GW0gBae8mg=}}, entriesHashList:[ {{F7rQIKCNn0vXVWPexilGfJn5+MCrtsSQqqVdlQxXpS4=}}, {{C+L8gRhkzVcxt3qRJpw8w6hVEqA5A6ImGne+E7iHizo=}} ], transactionInfo:{ statements:[ { statement:"CREATE TABLE VehicleRegistration", startTime:2019-10-25T17:20:20.496Z, statementDigest:{{3jeSdejOgp6spJ8huZxDRUtp2fRXRqpOMtG43V0nXg8=}} }, { statement:"CREATE INDEX ON VehicleRegistration (VIN)", startTime:2019-10-25T17:20:20.549Z, statementDigest:{{099D+5ZWDgA7r+aWeNUrWhc8ebBTXjgscq+mZ2dVibI=}} }, { statement:"CREATE INDEX ON VehicleRegistration (LicensePlateNumber)", startTime:2019-10-25T17:20:20.560Z, statementDigest:{{B73tVJzVyVXicnH4n96NzU2L2JFY8e9Tjg895suWMew=}} }, { statement:"INSERT INTO VehicleRegistration ?", startTime:2019-10-25T17:20:20.595Z, statementDigest:{{ggpon5qCXLo95K578YVhAD8ix0A0M5CcBx/W40Ey/Tk=}} } ], documents:{ '8F0TPCmdNQ6JTRpiLj2TmW':{ tableName:"VehicleRegistration", tableId:"BPxNiDQXCIB5l5F68KZoOz", statements:[3] } } }, revisions:[ { hash:{{FR1IWcWew0yw1TnRklo2YMF/qtwb7ohsu5FD8A4DSVg=}} }, { blockAddress:{ strandId:"JdxjkR9bSYB5jMHWcI464T", sequenceNo:1234 }, hash:{{t8Hj6/VC4SBitxnvBqJbOmrGytF2XAA/1c0AoSq2NQY=}}, data:{ VIN:"1N4AL11D75C109151", LicensePlateNumber:"LEWISR261LL", State:"WA", City:"Seattle", PendingPenaltyTicketAmount:90.25, ValidFromDate:2017-08-21, ValidToDate:2020-05-11, Owners:{ PrimaryOwner:{ PersonId:"GddsXfIYfDlKCEprOLOwYt" }, SecondaryOwners:[] } }, metadata:{ id:"8F0TPCmdNQ6JTRpiLj2TmW", version:0, txTime:2019-10-25T17:20:20.618Z, txId:"D35qctdJRU1L1N2VhxbwSn" } } ] }

revisions欄位中,某些版本修訂物件可能只包含hash值,而不包含其他屬性。這些是不包含使用者資料的僅限內部系統修訂。匯出工作會將這些修訂包含在各自的區塊中,因為這些修訂的雜湊是日誌完整雜湊鏈的一部分。密碼編譯驗證需要完整的雜湊鏈。

向下轉換為 JSON 格式

如果您指定 JSON 做為匯出任務的輸出格式,QLDB 會在匯出的資料物件中將 Amazon 離子日誌資料向下轉換為 JSON。但是,在某些情況下,您的數據使用 JSON 中不存在的豐富 Ion 類型的情況下,將 Ion 轉換為 JSON 是有損的。

有關離子到 JSON 轉換規則的詳細信息,請參閱 Amazon 離子食譜中的向下轉換為 JSON

匯出處理器程式庫 (Java)

QLDB 提供適用於 Java 的可擴充架構,可簡化 Amazon S3 中的匯出處理作業。這個框架庫處理讀取導出的輸出並按順序遍歷導出的塊的工作。要使用此導出處理器,請參閱 GitHub 存儲庫 awslab amazon-qldb-export-processor s/-java。