Paso 4: consultar las tablas en un libro mayor - Amazon Quantum Ledger Database (Amazon QLDB)

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Paso 4: consultar las tablas en un libro mayor

Tras crear tablas en un libro mayor de Amazon QLDB y cargarlas con datos, puede ejecutar consultas para revisar los datos de registro del vehículo que acaba de insertar. QLDB emplea PartiQL como lenguaje de consulta y Amazon Ion como modelo de datos orientado a documentos.

PartiQL es un lenguaje de consulta de código abierto compatible con SQL que se ha ampliado para funcionar con Ion. PartiQL le permite insertar, consultar y administrar sus datos con operadores SQL conocidos. Amazon Ion es un superconjunto de JSON. Ion es un formato de datos de código abierto basado en documentos que le brinda la flexibilidad de almacenar y procesar datos estructurados, semiestructurados y anidados.

En este paso, puede usar las instrucciones SELECT para leer los datos de las tablas del libro mayor vehicle-registration.

aviso

Cuando ejecuta una consulta en QLDB sin una búsqueda indexada, se invoca un escaneo completo de la tabla. PartiQL admite este tipo de consultas porque es compatible con SQL. Sin embargo, no ejecute escaneados de tablas para casos de uso de producción en QLDB. Los escaneos de tablas pueden provocar problemas de rendimiento en tablas grandes, como conflictos de concurrencia y tiempos de espera de las transacciones.

Para evitar el escaneado de tablas, debe ejecutar las instrucciones con una cláusula de predicado WHERE usando un operador de igualdad en un campo indexado o en un ID de documento, por ejemplo WHERE indexedField = 123 o WHERE indexedField IN (456, 789). Para obtener más información, consulte Optimizar el rendimiento de las consul‎tas‎.

Para consultar las tablas
  • Compile y ejecute el siguiente programa (FindVehicles.java) para consultar todos los vehículos registrados a nombre de una persona en su libro mayor.

    2.x
    /* * 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 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.Person; import software.amazon.qldb.tutorial.model.SampleData; /** * Find all vehicles registered under a person. * * 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 FindVehicles { public static final Logger log = LoggerFactory.getLogger(FindVehicles.class); private FindVehicles() { } /** * Find vehicles registered under a driver using their government ID. * * @param txn * The {@link TransactionExecutor} for lambda execute. * @param govId * The government ID of the owner. * @throws IllegalStateException if failed to convert parameters into {@link IonValue}. */ public static void findVehiclesForOwner(final TransactionExecutor txn, final String govId) { try { final String documentId = Person.getDocumentIdByGovId(txn, govId); final String query = "SELECT v FROM Vehicle AS v INNER JOIN VehicleRegistration AS r " + "ON v.VIN = r.VIN WHERE r.Owners.PrimaryOwner.PersonId = ?"; final Result result = txn.execute(query, Constants.MAPPER.writeValueAsIonValue(documentId)); log.info("List of Vehicles for owner with GovId: {}...", govId); ScanTable.printDocuments(result); } catch (IOException ioe) { throw new IllegalStateException(ioe); } } public static void main(final String... args) { final Person person = SampleData.PEOPLE.get(0); ConnectToLedger.getDriver().execute(txn -> { findVehiclesForOwner(txn, person.getGovId()); }); } }
    1.x
    /* * Copyright 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 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.Person; import software.amazon.qldb.tutorial.model.SampleData; /** * Find all vehicles registered under a person. * * 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 FindVehicles { public static final Logger log = LoggerFactory.getLogger(FindVehicles.class); private FindVehicles() { } /** * Find vehicles registered under a driver using their government ID. * * @param txn * The {@link TransactionExecutor} for lambda execute. * @param govId * The government ID of the owner. * @throws IllegalStateException if failed to convert parameters into {@link IonValue}. */ public static void findVehiclesForOwner(final TransactionExecutor txn, final String govId) { try { final String documentId = Person.getDocumentIdByGovId(txn, govId); final String query = "SELECT v FROM Vehicle AS v INNER JOIN VehicleRegistration AS r " + "ON v.VIN = r.VIN WHERE r.Owners.PrimaryOwner.PersonId = ?"; final Result result = txn.execute(query, Constants.MAPPER.writeValueAsIonValue(documentId)); log.info("List of Vehicles for owner with GovId: {}...", govId); ScanTable.printDocuments(result); } catch (IOException ioe) { throw new IllegalStateException(ioe); } } public static void main(final String... args) { final Person person = SampleData.PEOPLE.get(0); ConnectToLedger.getDriver().execute(txn -> { findVehiclesForOwner(txn, person.getGovId()); }, (retryAttempt) -> log.info("Retrying due to OCC conflict...")); } }
    nota

    En primer lugar, este programa consulta la tabla Person del documento con GovId LEWISR261LL para obtener su campo de metadatos id.

    A continuación, utiliza este documento id como clave externa para consultar la tabla VehicleRegistration mediante PrimaryOwner.PersonId. También combina VehicleRegistration con la tabla Vehicle por el campo VIN.

Para obtener información sobre la modificación de los documentos en las tablas del libro mayor vehicle-registration, consulte Paso 5: modificar los documentos de un libro mayor.