ステップ 4: 台帳のテーブルにクエリを実行する - Amazon Quantum 台帳データベース (Amazon QLDB)

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

ステップ 4: 台帳のテーブルにクエリを実行する

重要

サポート終了通知: 既存のお客様は、07/31/2025 のサポート終了QLDBまで Amazon を使用できます。詳細については、「Amazon Ledger QLDB を Amazon Aurora Postgre に移行するSQL」を参照してください。

Amazon QLDB台帳にテーブルを作成してデータをロードしたら、クエリを実行して、挿入した車両登録データを確認できます。QLDB はクエリ言語として PartiQL を使用し、ドキュメント指向のデータモデルとして Amazon Ion を使用します。

PartiQL は、Ion で動作するように拡張されたオープンソースの SQL互換クエリ言語です。PartiQL を使用すると、使い慣れたSQL演算子を使用してデータを挿入、クエリ、管理できます。Amazon Ion は のスーパーセットですJSON。Ion はオープンソースのドキュメントベースのデータ形式であり、構造化データ、半構造化データ、およびネストされたデータを柔軟に保存および処理できます。

このステップでは、SELECT ステートメントを使用して、vehicle-registration 台帳のテーブルからデータを読み取ります。

警告

インデックス付きルックアップQLDBなしで でクエリを実行すると、完全なテーブルスキャンが呼び出されます。PartiQL はSQL互換性があるため、このようなクエリをサポートしています。ただし、 の本番稼働用ユースケースではテーブルスキャンを実行しないでくださいQLDB。テーブルスキャンより、同時実行の競合やトランザクションのタイムアウトなど、大きなテーブルでパフォーマンスの問題が発生する可能性があります。

テーブルスキャンを回避するには、インデックス付きフィールドまたはドキュメント ID で等価演算子を使用する WHERE 述語句でステートメントを実行する必要があります (例: WHERE indexedField = 123 または WHERE indexedField IN (456, 789))。詳細については、「クエリパフォーマンスの最適化」を参照してください。

テーブルのクエリを実行するには
  1. 次のプログラム (FindVehicles.ts) を使用して台帳の人物に登録されているすべての車両をクエリします。

    /* * 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. */ import { QldbDriver, Result, TransactionExecutor } from "amazon-qldb-driver-nodejs"; import { dom } from "ion-js"; import { getQldbDriver } from "./ConnectToLedger"; import { PERSON } from "./model/SampleData"; import { PERSON_TABLE_NAME } from "./qldb/Constants"; import { error, log } from "./qldb/LogUtil"; import { getDocumentId } from "./qldb/Util"; import { prettyPrintResultList } from "./ScanTable"; /** * Query 'Vehicle' and 'VehicleRegistration' tables using a unique document ID in one transaction. * @param txn The {@linkcode TransactionExecutor} for lambda execute. * @param govId The owner's government ID. * @returns Promise which fulfills with void. */ async function findVehiclesForOwner(txn: TransactionExecutor, govId: string): Promise<void> { const documentId: string = await getDocumentId(txn, PERSON_TABLE_NAME, "GovId", govId); const query: string = "SELECT Vehicle FROM Vehicle INNER JOIN VehicleRegistration AS r " + "ON Vehicle.VIN = r.VIN WHERE r.Owners.PrimaryOwner.PersonId = ?"; await txn.execute(query, documentId).then((result: Result) => { const resultList: dom.Value[] = result.getResultList(); log(`List of vehicles for owner with GovId: ${govId}`); prettyPrintResultList(resultList); }); } /** * Find all vehicles registered under a person. * @returns Promise which fulfills with void. */ const main = async function(): Promise<void> { try { const qldbDriver: QldbDriver = getQldbDriver(); await qldbDriver.executeLambda(async (txn: TransactionExecutor) => { await findVehiclesForOwner(txn, PERSON[0].GovId); }); } catch (e) { error(`Error getting vehicles for owner: ${e}`); } } if (require.main === module) { main(); }
    注記

    まず、このプログラムでは、GovId LEWISR261LL を使用してドキュメントの Person テーブルに対してクエリを実行し、id メタデータフィールドを取得します。

    次に、このドキュメント id を外部キーとして使用して、PrimaryOwner.PersonId によって VehicleRegistration テーブルをクエリします。また、VehicleRegistrationVIN フィールドの Vehicle テーブルと結合されます。

  2. トランスパイルされたプログラムを実行するには、次のコマンドを入力します。

    node dist/FindVehicles.js

vehicle-registration 台帳のテーブルのドキュメントの変更方法については、「ステップ 5: 台帳内のドキュメントを変更する」を参照してください。