インデックスを持つテーブルの作成とドキュメントの挿入 - Amazon Quantum Ledger Database (Amazon QLDB)

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

インデックスを持つテーブルの作成とドキュメントの挿入

Amazon QLDB 台帳を作成したら、最初に基本的な CREATE TABLE ステートメントを使用してテーブルを作成します。テーブルは QLDB ドキュメント で構成されます。これらは、Amazon Ion struct 形式のデータセットです。

テーブルとインデックスの作成

テーブルには名前空間のない単純な大文字と小文字が区別される名前を付けます。QLDB ではオープンコンテンツがサポートされており、スキーマは適用されないため、テーブル作成時に属性やデータ型を定義しません。

CREATE TABLE VehicleRegistration
CREATE TABLE Vehicle

CREATE TABLE ステートメントは、新しいテーブルのシステムによって割り当てられた ID を返します。QLDB が割り当てた ID はすべて汎用一意 ID (UUID、Universally Unique Identifier) であり、それぞれ Base62 エンコード文字列で表されます。

注記

オプションで、テーブルの作成中にテーブルリソースのタグを定義できます。この方法の詳細は、「作成時のテーブルのタグ付け」を参照してください。

また、テーブルにインデックスを作成して、クエリのパフォーマンスを最適化することもできます。

CREATE INDEX ON VehicleRegistration (VIN)
CREATE INDEX ON VehicleRegistration (LicensePlateNumber)
CREATE INDEX ON Vehicle (VIN)
警告

ドキュメントを効率的に検索するには、インデックスが必要です。インデックスがないと、QLDB はドキュメントを読み取るときにテーブルスキャンを実行する必要があります。これにより、同時実行の競合やトランザクションのタイムアウトなど、大きなテーブルでパフォーマンスの問題が発生する可能性があります。

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

インデックスを作成する際には、以下の制約があることに注意してください。

  • インデックスは 1 つのトップレベルフィールドでのみ作成できます。現在、複合、ネスト、一意、および関数ベースのインデックスはサポートされていません。

  • 任意の Ion データ型 (liststruct など) でインデックスを作成できます。ただし、Ion のデータ型に関わらず、Ion 値全体の等価によってインデックス付けされたルックアップのみを実行できます。例えば、list 型をインデックスとして使用すると、リスト内の 1 つの項目でインデックス付けされたルックアップは実行できません。

  • クエリのパフォーマンスは、等価述語 (WHERE indexedField = 123WHERE indexedField IN (456, 789) など) を使用する場合にのみ向上します。

    QLDB では、現時点ではクエリの述語で不等式はサポートされていません。そのため、範囲でフィルタリングされるスキャンは実装されていません。

  • インデックス付きフィールドの名前は大文字と小文字の区別があり 128 文字以下で指定します。

  • QLDB でのインデックス作成は非同期です。空でないテーブルでのインデックスの作成を完了するのにかかる時間は、テーブルサイズによって異なります。詳細については、「インデックスの管理」を参照してください。

ドキュメントの挿入

次に、テーブルにドキュメントを挿入できます。QLDB ドキュメントは Amazon Ion 形式で保存されます。次の PartiQL INSERT ステートメントには、Amazon QLDB コンソールの使用開始方法 で使用する車両登録のサンプルデータの一部が含まれます。

INSERT INTO VehicleRegistration << { 'VIN' : '1N4AL11D75C109151', 'LicensePlateNumber' : 'LEWISR261LL', 'State' : 'WA', 'City' : 'Seattle', 'PendingPenaltyTicketAmount' : 90.25, 'ValidFromDate' : `2017-08-21T`, 'ValidToDate' : `2020-05-11T`, 'Owners' : { 'PrimaryOwner' : { 'PersonId' : '294jJ3YUoH1IEEm8GSabOs' }, 'SecondaryOwners' : [ { 'PersonId' : '5Ufgdlnj06gF5CWcOIu64s' } ] } }, { 'VIN' : 'KM8SRDHF6EU074761', 'LicensePlateNumber' : 'CA762X', 'State' : 'WA', 'City' : 'Kent', 'PendingPenaltyTicketAmount' : 130.75, 'ValidFromDate' : `2017-09-14T`, 'ValidToDate' : `2020-06-25T`, 'Owners' : { 'PrimaryOwner' : { 'PersonId': 'IN7MvYtUjkp1GMZu0F6CG9' }, 'SecondaryOwners' : [] } } >>
INSERT INTO Vehicle << { 'VIN' : '1N4AL11D75C109151', 'Type' : 'Sedan', 'Year' : 2011, 'Make' : 'Audi', 'Model' : 'A5', 'Color' : 'Silver' } , { 'VIN' : 'KM8SRDHF6EU074761', 'Type' : 'Sedan', 'Year' : 2015, 'Make' : 'Tesla', 'Model' : 'Model S', 'Color' : 'Blue' } >>

PartiQL 構文とセマンティクス

  • フィールド名は一重引用符 ('...') で囲みます。

  • 文字列値も一重引用符 ('...') で囲みます。

  • タイムスタンプはバックティック (`...`) で囲みます。バックティックは、Ion リテラルを示すために使用できます。

  • 整数と小数はリテラル値で、指定する必要はありません。

PartiQL の構文とセマンティクスの詳細については、「PartiQL での Ion のクエリ」を参照してください。

INSERT ステートメントで、バージョン番号が 0 というドキュメントの最初のリビジョンが作成されます。各ドキュメントを一意に識別するために、QLDB によってドキュメント ID がメタデータの一部として割り当てられます。Insert ステートメントは、挿入された各ドキュメントの ID を返します。

重要

QLDB ではスキーマを適用しないため、何度でもテーブルに同じドキュメントを挿入できます。それぞれの挿入ステートメントでは、ジャーナルに個別にドキュメントのエントリを実行し、QLDB がそれぞれのドキュメントに一意の ID を割り当てます。

テーブルに挿入したドキュメントのクエリを実行する方法については、「データのクエリの実行」に進みます。