

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

# QLDB 中的日誌匯出輸出
<a name="export-journal.output"></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 日誌匯出任務還會寫入兩個資訊清單檔案。這些都會儲存在您在[匯出請求](export-journal.request.md)中提供的 Amazon S3 儲存貯體中。以下各節說明每個輸出物件的格式和內容。

**注意**  
如果您將 JSON 指定為匯出任務的輸出格式，QLDB 會將匯出資料物件中的 Amazon Ion 日誌資料向下轉換為 JSON。如需詳細資訊，請繼續 [向下轉換至 JSON](#export-journal.output.json)。

**Topics**
+ [

## 資訊清單檔案
](#export-journal.output.manifest)
+ [

## 資料物件
](#export-journal.output.data)
+ [

## 向下轉換至 JSON
](#export-journal.output.json)
+ [

## 匯出處理器程式庫 (Java)
](#export-journal.output.processor)

## 資訊清單檔案
<a name="export-journal.output.manifest"></a>

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

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

### 初始資訊清單
<a name="export-journal.output.manifest.initial"></a>

初始資訊清單表示您的匯出任務已開始。它包含您傳遞給請求的輸入參數。除了匯出的 Amazon S3 目的地和開始和結束時間參數之外，此檔案還包含 `exportId`。`exportId` 是 QLDB 指派給每個匯出任務的唯一 ID。

檔案命名慣例如下。

```
s3://amzn-s3-demo-qldb-cloudtrail/prefix/exportId.started.manifest
```

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

```
s3://amzn-s3-demo-qldb-cloudtrail/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:"amzn-s3-demo-qldb-cloudtrail",
  prefix:"journalExport",
  objectEncryptionType:"NO_ENCRYPTION",
  outputFormat:"ION_TEXT"
}
```

初始資訊清單`outputFormat`只有在匯出請求中指定時才包含 。如果您未指定輸出格式，匯出的資料會預設為 `ION_TEXT` 格式。

[DescribeJournalS3Export](https://docs.aws.amazon.com/qldb/latest/developerguide/API_DescribeJournalS3Export.html) API 操作和匯出的 Amazon S3 物件的內容類型也會指出輸出格式。

### 最終資訊清單
<a name="export-journal.output.manifest.final"></a>

最終資訊清單表示特定日誌*鏈*的匯出任務已完成。匯出任務會為每個鏈撰寫個別的最終資訊清單檔案。

**注意**  
在 Amazon QLDB 中，絞線是總帳日誌的分割區。QLDB 目前僅支援具有單股的日誌。

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

```
s3://amzn-s3-demo-qldb-cloudtrail/prefix/exportId.strandId.completed.manifest
```

`strandId` 是 QLDB 指派給鏈的唯一 ID。以下是 Ion 文字格式的最終資訊清單檔案及其內容的範例。

```
s3://amzn-s3-demo-qldb-cloudtrail/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"
  ]
}
```

## 資料物件
<a name="export-journal.output.data"></a>

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

在 JSON Lines 格式中，匯出的資料物件中的每個區塊都是由新行分隔的有效 JSON 物件。您可以使用此格式直接整合 JSON 匯出與 Amazon Athena 等分析工具， AWS Glue 因為這些服務可以自動剖析換行分隔 JSON。如需格式的詳細資訊，請參閱 [JSON Lines](https://jsonlines.org/)。

### 資料物件名稱
<a name="export-journal.output.data.filename"></a>

日誌匯出任務會使用下列命名慣例寫入這些資料物件。

```
s3://amzn-s3-demo-qldb-cloudtrail/prefix/yyyy/mm/dd/hh/strandId.startSn-endSn.ion|.json
```
+ 每個匯出任務的輸出資料會分成區塊。
+ `yyyy/mm/dd/hh` – 您提交匯出請求的日期和時間。在同一小時內匯出的物件會以相同的 Amazon S3 字首分組。
+ `strandId` – 包含要匯出之日誌區塊的特定字串的唯一 ID。
+ `startSn-endSn` – 物件中包含的序號範圍。序號指定字串中區塊的位置。

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

```
s3://amzn-s3-demo-qldb-cloudtrail/journalExport/
```

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

```
s3://amzn-s3-demo-qldb-cloudtrail/journalExport/2019/04/15/22/JdxjkR9bSYB5jMHWcI464T.1-5.ion
```

### 資料物件內容
<a name="export-journal.output.data.contents"></a>

每個資料物件都包含具有下列格式的日誌區塊物件。

```
{
  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](ql-reference.md) 陳述式。

以下是包含 Ion 文字格式範例資料的區塊範例。如需區塊物件中欄位的資訊，請參閱 [Amazon QLDB 中的日誌內容](journal-contents.md)。

**注意**  
此區塊範例僅供參考。顯示的雜湊不是實際計算的雜湊值。

```
{
  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
<a name="export-journal.output.json"></a>

如果您將 JSON 指定為匯出任務的輸出格式，QLDB 會將匯出資料物件中的 Amazon Ion 日誌資料向下轉換為 JSON。不過，在某些情況下，將 Ion 轉換為 JSON 會造成失真，其中您的資料使用 JSON 中不存在的豐富 Ion 類型。

如需 Ion 轉換至 JSON 轉換規則的詳細資訊，請參閱[《Amazon Ion 技術指南》中的向下轉換至 JSON](https://amzn.github.io/ion-docs/guides/cookbook.html#down-converting-to-json)。 **

## 匯出處理器程式庫 (Java)
<a name="export-journal.output.processor"></a>

QLDB 為 Java 提供可擴展的架構，可簡化 Amazon S3 匯出的處理。此架構程式庫會依序處理讀取匯出輸出和反覆查看匯出區塊的工作。若要使用此匯出處理器，請參閱 GitHub 儲存庫 [awslabs/amazon-qldb-export-processor-java](https://github.com/awslabs/amazon-qldb-export-processor-java)。