すべてのプロダクト
Search
ドキュメントセンター

OpenSearch:複数テーブルに対する JOIN 操作

最終更新日:Dec 28, 2024

OpenSearch コンソールでは、アプリケーションスキーマを定義する方法が 4 つ用意されています。OpenSearch Industry Algorithm Edition は複数のテーブルをサポートしており、複雑なビジネスシナリオでの呼び出しが容易になります。

プライマリテーブルとセカンダリテーブルを関連付けるルール

アプリケーションのスキーマを設定するために複数のテーブルを手動で作成する場合は、次のルールに注意してください。

  • プライマリテーブルのレコードとセカンダリテーブルのレコードの比率は、N:1 または 1:1 である必要があります。1:N の比率はサポートされていません。これは、1 つのプライマリテーブルレコードを複数のセカンダリテーブルレコードに関連付けることができないことを意味します。

  • セカンダリテーブルは、セカンダリテーブルの主キーをプライマリテーブルの外部キーに関連付けることで、プライマリテーブルに関連付けることができます。プライマリテーブルの外部キーは、セカンダリテーブルの主キーにのみ関連付けることができます。

  • 最大 3 レベルの関連付けがサポートされています。アプリケーションには最大 10 個のセカンダリテーブルを作成できます。

  • プライマリテーブルは 1 つだけ設定できます。

プライマリテーブルとセカンダリテーブル

関連付けロジック

サポート

テーブル A(プライマリテーブル)、テーブル B

テーブル A(プライマリテーブル)-> テーブル B

はい

テーブル A(プライマリテーブル)、テーブル B、テーブル C

テーブル A(プライマリテーブル)-> テーブル B -> テーブル C

はい

テーブル A(プライマリテーブル)、テーブル B、テーブル C、テーブル D

テーブル A(プライマリテーブル)-> テーブル B、テーブル A(プライマリテーブル)-> テーブル C、テーブル A(プライマリテーブル)-> テーブル D。2 レベル以下の関連付けが設定されています。セカンダリテーブルは 10 個以下作成されています。

はい

テーブル A(プライマリテーブル)、テーブル B、テーブル C、テーブル D

テーブル A(プライマリテーブル)-> テーブル B -> テーブル C -> テーブル D。3 レベル以上の関連付けが設定されています。

いいえ。ただし、3 レベルの関連付けをサポートする専用アプリケーションは除きます。

テーブル A(プライマリテーブル)、テーブル B

テーブル A(プライマリテーブル)-> テーブル B、テーブル B -> テーブル A。テーブルは循環的な関連付けの形式で関連付けられています。

いいえ

テーブル A(プライマリテーブル)、テーブル B、テーブル C、...、テーブル K

テーブル A(プライマリテーブル)-> テーブル B、テーブル A(プライマリテーブル)-> テーブル C、テーブル A(プライマリテーブル)-> テーブル D。2 レベル以下の関連付けが設定されています。10 個を超えるセカンダリテーブルが作成されています。

いいえ。ただし、10 個を超えるセカンダリテーブルをサポートする専用アプリケーションは除きます。

データモデル

image

プライマリテーブルとセカンダリテーブルの関連付けの例

imageimageimage

使用上の注意

  • フィールドは、同じタイプのフィールドの場合にのみ、テーブル間でマッピングできます。たとえば、セカンダリテーブルの主キーが INT タイプの場合、主キーはプライマリテーブルの INT タイプのフィールドにのみマッピングできます。

  • オフラインテーブルは、次のロジックに基づいて結合されます。インデックス作成プロセス中に、プライマリテーブルとセカンダリテーブルに対して LEFT JOIN 操作が実行され、ワイドテーブルが生成されます。インデックスは、検索サービスのためにワイドテーブルに基づいて構築されます。プライマリテーブルのレコードとセカンダリテーブルのレコードの比率が N:1 であり、N の値が大きいと仮定します。セカンダリテーブルのデータレコードが更新されると、プライマリテーブルで更新する必要があるデータレコードの数は、セカンダリテーブルの N 倍になります。これにより、プライマリテーブルとセカンダリテーブルの両方で更新の遅延が発生する可能性があります。この場合、N の値を 10 以下にすることをお勧めします。

  • JOIN 操作後、生成されたワイドテーブルの行数は、プライマリテーブルの行数と同じになります。セカンダリテーブルで空のフィールドは、ワイドテーブルのデフォルト値で自動的に埋められます。INT タイプのフィールドのデフォルト値は 0 です。STRING タイプのフィールドのデフォルト値は null です。

  • ベストプラクティス:複数テーブル結合によるデータ同期レイテンシ