前提条件
-
MaxCompute (旧称 ODPS) に精通している必要があります。 詳細については、こちらをご参照ください。
-
OpenSearch アカウントには、MaxCompute テーブルに対する必要な権限が必要です。これには、フィールドに対する
describe、select、download、および LABEL 権限が含まれます。
以下のステートメントを使用して権限を付与します:
-- アカウントを追加します。
add user ****@aliyun.com;
-- 必要なテーブル権限をアカウントに付与します。
GRANT describe,select,download ON TABLE table_xxx TO USER ****@aliyun.com;
GRANT describe,select,download ON TABLE table_xxx_done TO USER ****@aliyun.com;
-- MaxCompute でフィールドレベルの権限チェックが有効になっている場合、データ取得時に高いレベルの権限を持つフィールドにアクセスできず、インデックス作成が妨げられることがあります。 このような場合は、アカウントに必要なフィールドレベルの権限を付与する必要があります。
-- プロジェクト全体に権限を付与します。
SET LABEL 3 to USER ****@aliyun.com;
-- 単一のテーブルに権限を付与します。
GRANT LABEL 3 ON TABLE table_xxx(col1, col2) TO ****@aliyun.com;
-
OpenSearch Vector Search Edition は、MaxCompute テーブルの STRING、BOOLEAN、DOUBLE、BIGINT、DATETIME などのフィールドタイプをサポートしています。
テーブル作成ステートメントとパラメーター設定の詳細については、「MaxCompute データソースのテーブル作成ステートメント」をご参照ください。
MaxCompute データソースの設定
-
OpenSearch コンソールにログインします。 左上隅で、OpenSearch Vector Search Edition に切り替えます。 [インスタンス管理] ページで、対象のインスタンスを見つけ、[操作] 列の [管理] をクリックします。
-
左側メニューで、[設定センター] > [データソース設定] を選択します。 [データソースの追加] をクリックします。 データソースタイプとして MaxCompute を選択し、データソース名、プロジェクト、AccessKey ID、AccessKey Secret、テーブル、パーティションキー、自動再インデックス などの情報を入力します。
-
パラメーターを設定した後、[チェック] をクリックします。 設定が検証されると、[OK] ボタンが有効になります。
-
データソースを追加した後、インデックススキーマを設定し、インデックステーブルを追加する必要があります。 詳細については、「インデックステーブルの追加」をご参照ください。
-
インデックステーブルを設定した後、設定を更新し、再インデックスを実行して変更をオンラインクラスターに適用する必要があります。 詳細については、「設定の更新」をご参照ください。
注意:
-
データソース名:データソースの名前です。 名前は
InstanceName_CustomNameの形式に従う必要があります。 -
プロジェクト、AccessKey ID、AccessKey Secret、テーブル、パーティションキー:MaxCompute データソースへのアクセスに必要なパラメーターです。
-
自動再インデックス:自動再インデックスを有効にするかどうかを指定します。 有効にすると、データソースの変更が検出されるたびに、このデータソースを参照するインデックステーブルに対してシステムが自動的に再インデックスをトリガーします。
-
自動再インデックスを有効にする場合は、done テーブルを作成する必要があります。 詳細については、以下の「自動再インデックス」セクションをご参照ください。
自動再インデックス
done テーブルの目的:データソースの自動再インデックスを有効にすると、OpenSearch Vector Search Edition は done テーブルの変更を監視し、自動的に再インデックスをトリガーします。
例:MaxCompute テーブルの名前が mytable で、ds=20220113 でパーティション化されているとします。 初回の再インデックス後、全量データを含む新しいパーティションが毎日生成されます。 OpenSearch Vector Search Edition が新しいパーティションをスキャンし、自動的に再インデックスをトリガーして新しいデータを取得するようにする必要があります。 これを実現するには、自動再インデックス機能と done テーブルを使用する必要があります。
手順:
-
データソースを追加する際に、自動再インデックスを有効にします。
-
MaxCompute で、done テーブルを作成します。 データテーブルの名前が
mytableで、そのパーティションキーがdsの場合、done テーブルの名前はmytable_doneとし、パーティションキーもdsとする必要があります。 2 つのテーブルは MaxCompute で次のように表示されます:odps:sql:xxx> show tables; InstanceId: xxx SQL: . ALIYUN$****@aliyun.com:mytable # 全量データを含むテーブル。 ALIYUN$****@aliyun.com:mytable_done # 自動全量データインジェストを制御する done テーブル。以下に、done テーブルの構造を説明します:
done テーブルのデータ例:attribute 列の値は
{"swift_start_timestamp":1603096083}で、ds パーティションの値は20180724です。以下のステートメントを使用して done テーブルを作成します:
create table mytable_done (attribute string) partitioned by (ds string); -
mytableテーブルのds=20220114パーティションのデータ生成が完了したら、done テーブルを更新して OpenSearch Vector Search Edition での再インデックスをトリガーする必要があります。-- パーティションを追加します。 alter table mytable_done add if not exists partition (ds="20220114"); -- シグナルデータを挿入して、自動全量インジェストをトリガーします。 insert into table mytable_done partition (ds="20220114") select '{"swift_start_timestamp":1642003200}';done テーブルには、次の内容が含まれるようになります:
odps:sql:xxx> select * from mytable_done where ds=20220114 limit 1; InstanceId: xxx SQL: . +-----------+----+ | attribute | ds | +-----------+----+ | {"swift_start_timestamp":1642003200} | 20220114 | +-----------+----+シグナルデータが done テーブルに挿入されると、OpenSearch Vector Search Edition はこのシグナルを検出し、自動的に再インデックスをトリガーします。
重要-
done テーブルには少なくとも 1 つのパーティションキーが必要であり、このキーの名前はデータテーブルのパーティションキーの名前と同一でなければなりません。 たとえば、データテーブルのパーティションキーが
dsの場合、done テーブルのパーティションキーもdsでなければなりません。 -
done テーブルには STRING 型のフィールドが 1 つだけ必要であり、フィールド名は
attributeでなければなりません。 -
done テーブルに追加するパーティションは、データテーブルに存在している必要があります。 たとえば、データテーブルにパーティション
ds="20220114"、ds="20220115"、ds="20220116"がある場合、done テーブルに追加する新しいパーティションはこれらのいずれかでなければなりません。 -
done テーブルにデータを挿入する際、
attributeフィールドの値は{"swift_start_timestamp":1642003200}のような JSON 文字列である必要があります。 このタイムスタンプは、リアルタイム増分更新の開始オフセットを示します。
-
MaxCompute データソースの変更
-
[データソース設定] ページで、変更するデータソースの [操作] 列にある [変更] をクリックします。
-
[データソースの編集] ページでは、プロジェクト、AccessKey ID、AccessKey Secret、テーブル、パーティションキー などの情報を変更できます。
変更後、[チェック] をクリックします。設定が検証された後、OK をクリックして変更を保存します。
-
データソースを変更した後、設定を更新し、再インデックスを実行して変更をオンラインクラスターに適用する必要があります。 詳細については、「設定の更新」をご参照ください。
説明パーティションの粒度を時間単位、たとえば
yyyymmddhh(例:2022011314) に設定します。 これにより、1 日に複数の全量再インデックスジョブを実行できます。
MaxCompute データソースの削除
-
[データソース設定] に移動し、[削除] をクリックします。
-
[削除] をクリックすると、システムが、このデータソースを参照しているインデックステーブルの有無をチェックします。
-
データソースがいずれのインデックステーブルからも参照されていない場合、[OK] をクリックしてデータソースを削除します。 その後、設定を更新し、再インデックスを実行して削除を反映させる必要があります。
-
インデックステーブルがデータソースを参照している場合、エラーメッセージ「Data source is referenced by an index table」が表示されます (エラーコード:
DataSourceInUse)。 データソースを削除する前に、インデックステーブルを削除するか、関連付けを解除する必要があります。
データソースを削除する前に、まずそれを参照しているインデックステーブルを削除する必要があります。 「インデックステーブルの削除」をご参照ください。
注意事項
-
データソースの編集中にデータソース名を変更することはできません。
-
MaxCompute は外部テーブルをサポートしていません。 内部テーブルを作成する必要があります。
-
MaxCompute データソースに指定するテーブルは、パーティションテーブルである必要があります。
-
全量データインジェストには MaxCompute テーブルを使用します。 リアルタイム増分更新には、API ベースのデータソースを使用します。