翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
インデックスを持つテーブルの作成とドキュメントの挿入
重要
サポート終了通知: 既存のお客様は、07/31/2025 のサポート終了QLDBまで Amazon を使用できます。詳細については、「Amazon Ledger QLDB を Amazon Aurora Postgre に移行するSQL
Amazon QLDB台帳を作成したら、最初のステップとして、基本的なCREATE TABLEステートメントを使用してテーブルを作成します。テーブルは QLDB ドキュメント で構成されます。これらは、Amazon Ion struct
形式のデータセットです。
テーブルとインデックスの作成
テーブルには名前空間のない単純な大文字と小文字が区別される名前を付けます。QLDB はオープンコンテンツをサポートし、スキーマを適用しないため、テーブルの作成時に属性やデータ型を定義しません。
CREATE TABLE VehicleRegistration
CREATE TABLE Vehicle
CREATE TABLE
ステートメントは、新しいテーブルのシステムによって割り当てられた ID を返します。で割り当てられたすべてのシステムはIDs、BaseBase62-encoded文字列で表されるQLDB汎用一意識別子 (UUID) です。
注記
オプションで、テーブルの作成中にテーブルリソースのタグを定義できます。この方法の詳細は、作成時のテーブルのタグ付けを参照してください。
また、テーブルにインデックスを作成して、クエリのパフォーマンスを最適化することもできます。
CREATE INDEX ON VehicleRegistration (VIN)
CREATE INDEX ON VehicleRegistration (LicensePlateNumber)
CREATE INDEX ON Vehicle (VIN)
重要
QLDB では、ドキュメントを効率的に検索するためにインデックスが必要です。インデックスがない場合、 はドキュメントを読み取るときに完全なテーブルスキャンを実行QLDBする必要があります。これにより、同時実行の競合やトランザクションのタイムアウトなど、大きなテーブルでパフォーマンスの問題が発生する可能性があります。
テーブルスキャンを回避するには、インデックス付きフィールドまたはドキュメント ID で等価演算子 (=
または IN
) を使用する WHERE
述語句でステートメントを実行する必要があります。詳細については、「クエリパフォーマンスの最適化」を参照してください。
インデックスを作成する際には、以下の制約があることに注意してください。
-
インデックスは 1 つのトップレベルフィールドでのみ作成できます。複合、ネスト、一意、および関数ベースのインデックスはサポートされていません。
-
任意の Ion データ型 (
list
、struct
など) でインデックスを作成できます。ただし、Ion のデータ型に関わらず、Ion 値全体の等価によってインデックス付けされたルックアップのみを実行できます。例えば、list
型をインデックスとして使用すると、リスト内の 1 つの項目でインデックス付けされたルックアップは実行できません。 -
クエリのパフォーマンスは、等価述語 (
WHERE indexedField = 123
、WHERE 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 の構文とセマンティクスの詳細については、「Amazon での PartiQL を使用した Ion のクエリ QLDB」を参照してください。
INSERT
ステートメントで、バージョン番号が 0 というドキュメントの最初のリビジョンが作成されます。各ドキュメントを一意に識別するために、 はメタデータの一部としてドキュメント ID をQLDB割り当てます。Insert ステートメントは、挿入された各ドキュメントの ID を返します。
重要
QLDB はスキーマを強制しないため、同じドキュメントをテーブルに複数回挿入できます。各挿入ステートメントは、ジャーナルに個別のドキュメントエントリをコミットし、各ドキュメントに一意の ID をQLDB割り当てます。
テーブルに挿入したドキュメントのクエリを実行する方法については、「データのクエリの実行」に進みます。