本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
重要
支援終止通知:現有客戶將可以使用 Amazon QLDB,直到 07/31/2025 的支援結束為止。如需詳細資訊,請參閱將 Amazon QLDB Ledger 遷移至 Amazon Aurora PostgreSQL
在上一個步驟中修改車輛的註冊資料後,您可以查詢其所有已註冊擁有者的歷史記錄,以及任何其他更新的欄位。在此步驟中,您會查詢 vehicle-registration
分類帳中VehicleRegistration
資料表中文件的修訂歷史記錄。
檢視修訂歷史記錄
-
檢閱下列程式 (
QueryHistory.java
)。/* * Copyright 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. * SPDX-License-Identifier: MIT-0 * * Permission is hereby granted, free of charge, to any person obtaining a copy of this * software and associated documentation files (the "Software"), to deal in the Software * without restriction, including without limitation the rights to use, copy, modify, * merge, publish, distribute, sublicense, and/or sell copies of the Software, and to * permit persons to whom the Software is furnished to do so. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A * PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ package software.amazon.qldb.tutorial; import java.io.IOException; import java.time.Instant; import java.time.temporal.ChronoUnit; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.amazon.ion.IonValue; import software.amazon.qldb.Result; import software.amazon.qldb.TransactionExecutor; import software.amazon.qldb.tutorial.model.SampleData; import software.amazon.qldb.tutorial.model.VehicleRegistration; /** * Query a table's history for a particular set of documents. * * This code expects that you have AWS credentials setup per: * http://docs.aws.amazon.com/java-sdk/latest/developer-guide/setup-credentials.html */ public final class QueryHistory { public static final Logger log = LoggerFactory.getLogger(QueryHistory.class); private static final int THREE_MONTHS = 90; private QueryHistory() { } /** * In this example, query the 'VehicleRegistration' history table to find all previous primary owners for a VIN. * * @param txn * The {@link TransactionExecutor} for lambda execute. * @param vin * VIN to find previous primary owners for. * @param query * The query to find previous primary owners. * @throws IllegalStateException if failed to convert document ID to an {@link IonValue}. */ public static void previousPrimaryOwners(final TransactionExecutor txn, final String vin, final String query) { try { final String docId = VehicleRegistration.getDocumentIdByVin(txn, vin); log.info("Querying the 'VehicleRegistration' table's history using VIN: {}...", vin); final Result result = txn.execute(query, Constants.MAPPER.writeValueAsIonValue(docId)); ScanTable.printDocuments(result); } catch (IOException ioe) { throw new IllegalStateException(ioe); } } public static void main(final String... args) { final String threeMonthsAgo = Instant.now().minus(THREE_MONTHS, ChronoUnit.DAYS).toString(); final String query = String.format("SELECT data.Owners.PrimaryOwner, metadata.version " + "FROM history(VehicleRegistration, `%s`) " + "AS h WHERE h.metadata.id = ?", threeMonthsAgo); ConnectToLedger.getDriver().execute(txn -> { final String vin = SampleData.VEHICLES.get(0).getVin(); previousPrimaryOwners(txn, vin, query); }); log.info("Successfully queried history."); } }
注意
-
您可以在下列語法歷史記錄函數中查詢內建 來檢視文件的修訂歷史記錄。
SELECT * FROM history(
table_name
[, `start-time
` [, `end-time
` ] ] ) AS h [ WHERE h.metadata.id = 'id
' ] -
開始時間和結束時間皆為選用。它們是 Amazon Ion 常值,可以用反引號表示 (
`...`
)。如需進一步了解,請參閱 在 Amazon QLDB 中使用 PartiQL 查詢離子。 -
最佳實務是,使用日期範圍 (開始時間和結束時間) 和文件 ID () 來限定歷史記錄查詢
metadata.id
。QLDB 會在交易中處理SELECT
查詢,這些查詢受到交易逾時限制的限制。QLDB 歷史記錄會依文件 ID 編製索引,此時您無法建立其他歷史記錄索引。包含開始時間和結束時間的歷史記錄查詢可受益於日期範圍資格。
-
編譯並執行
QueryHistory.java
程式,以使用 VIN 查詢VehicleRegistration
文件的修訂歷史記錄1N4AL11D75C109151
。
若要以密碼編譯方式驗證vehicle-registration
分類帳中的文件修訂,請繼續 步驟 7:驗證分類帳中的文件。