MaxCompute (旧称:Open Data Processing Service (ODPS)) は、大規模なコンピューティングプラットフォームです。OpenSearch Industry Algorithm Edition のデータが MaxCompute にある場合、MaxCompute をデータソースとして設定できます。このソリューションは、MaxCompute の 3 レベルのテーブル構造をサポートしています。再インデックスをトリガーすると、システムは指定されたテーブルから全量データを自動的に取得します。その後、SDK API コールを使用して増分データをプッシュする必要があります。
AccessKey の設定
OpenSearch Industry Algorithm Edition は、AccessKey と AccessKey Secret を使用して MaxCompute テーブルからデータをダウンロードします。データソースを設定する前に、AccessKey ペアが必要です。
MaxCompute プロジェクトと OpenSearch アプリケーションは、同じ Alibaba Cloud アカウントに属している必要があります。
-
Alibaba Cloud アカウントの AccessKey ペアを使用して、そのアカウント配下にある任意の MaxCompute プロジェクトのテーブルにアクセスできます。
-
セキュリティ向上のため、RAM ユーザーの使用を推奨します。以下の手順で設定してください。
-
Alibaba Cloud アカウントで RAM ユーザーを作成します。詳細については、「RAM ユーザーの作成と承認」をご参照ください。
-
MaxCompute で、RAM ユーザーをプロジェクトのメンバーとして追加します。
MaxCompute プロジェクトの [メンバーの管理] ダイアログボックスで、左側の [メンバーの検索] リストから対象の RAM ユーザーを検索して選択します。右矢印ボタンをクリックして、ユーザーを右側の [選択済み/追加予定のメンバー] リストに移動します。または、下部にある [メンバーの手動追加] 入力ボックスにメンバー名を 1 つ以上 (カンマ区切り) 入力し、[OK] をクリックします。
-
メンバーを追加した後、MaxCompute DataStudio ページに移動して
list users;コマンドを実行し、完全なユーザー名を確認します。詳細については、「コンソール (クエリエディター) を使用して接続する」をご参照ください。OK OK OK OK OK OK OK OK A xxx RAM$o; xxx h_test@test.xxx xxx st_1 2022-02-10 18:34:33 INFO ===xxx===================================================== 2022-02-10 18:34:33 INFO Exit code of the Shell command 0 2022-02-10 18:34:33 INFO -- Invocation of Shell command completed --- -
完全なユーザー名をコピーし、必要な権限を付与します。次のコマンドで、xxx をコピーしたユーザー名に置き換えます。
-- 1. プロジェクトを一覧表示し、インスタンスを作成する権限を付与します。 grant CreateInstance,List on project zy_ts_test to user xxx; -- 2. テーブルデータの選択、詳細表示、ダウンロードの権限を付与します。 GRANT select,describe,download ON TABLE people_info TO USER xxx; -- 3. (任意) ODPS テーブルにラベルベースの権限を付与します。 set label 2 to USER xxx; -- 指定されたユーザーの権限を表示します。 show grants for xxx;
権限を付与した後、OpenSearch コンソールで MaxCompute データソースを設定できます。
MaxCompute データソースの設定
-
アプリケーション設定ページで、[データソースを使用] を選択し、次に [MaxCompute] データソースを選択します。
-
データソースのタイプリストで、[MaxCompute] をクリックします。
-
[データベースに接続] をクリックし、プロジェクト名、承認済みアカウントの AccessKey と AccessKey Secret などの MaxCompute 情報を入力します。
詳細を入力した後、[接続] をクリックします。
-
接続後、設定するデータテーブルを選択します。次の例では、3 レベルのテーブルを追加する方法を示します。
[データソースの選択] ダイアログボックスで、[MaxCompute] タブをクリックします。[データベースの選択] エリアで、接続されているデータベースを選択します。[データテーブルの選択] エリアで、
default.item_tableやopensearch.bank_dataなどの対象テーブルを選択します。選択したテーブルを [選択済み] リストに移動し、[OK] をクリックします。
システムはソーステーブルのフィールドを自動的にマッピングします。必要に応じてこれらのマッピングを調整できます。完了したら、[次へ] をクリックします。
自動マッピングされたフィールド設定テーブルには、[フィールド名]、[プライマリキー]、[タイプ]、[他のテーブルと結合]、および [操作] 列が含まれます。各フィールドについて、データ型 (TEXT や INT など) の設定、プライマリキーの指定、他のテーブルとの結合の設定、フィールドの追加または削除ができます。
アプリケーションを設定する際、1 つのテーブルをプライマリテーブルとして定義する必要があります。また、各テーブルには一意のプライマリキーフィールドが必要です。
-
インデックススキーマを設定します。検索要件に適したアナライザーを選択します。詳細については、「インデックススキーマ」をご参照ください。完了したら、[次へ] をクリックします。
この例では、2 つのインデックスが設定されています。[default] インデックスには country、source_buy_cnt、city、item_type、last_modify_time、channel、title、subscribe_cnt フィールドが含まれ、[中国語 - 一般] アナライザーを使用します。[id] インデックスには custom_pk_id フィールドが含まれ、[キーワード] アナライザーを使用します。
-
データソースを設定します。ここでは、フィールドマッピングの設定、パーティション情報の選択、データ同期制御メカニズムの選択などを行います。
[データソース] 設定ページで、[+ データソースを追加] をクリックして MaxCompute データソースを追加します。
5.1. フィールドマッピングの設定:[操作] 列の編集アイコンをクリックします。OpenSearch Industry Algorithm Edition は、MaxCompute 用のいくつかの データソースプラグインを提供しています。プラグインを使用するには、フィールドマッピングを設定する際に [コンテンツ変換] 列のプラス記号 (+) をクリックします。プラグインは、ソースフィールドのコンテンツを OpenSearch に同期する前に変換します。設定エラーや接続の問題でプラグインが失敗した場合、ソースフィールドは変換されずに同期されます。
5.2. パーティション情報の選択:MaxCompute のデータ構造に基づいて、インポートするパーティションを指定できます。正規表現を使用してパーティションを定義できます。たとえば、これをスケジュールされた再インデックス機能と組み合わせて、毎日新しいパーティションからデータをインポートできます。
正規表現:等号 (=)、カンマ (,)、セミコロン (;)、および二重縦線 (||) は予約文字です。前日のパーティションから全量データを自動的にインポートするには、
ds=%Y%m%d || -1 daysのような式を使用します。
ds はパーティションフィールド名です。等号 (=) の前後にスペースやその他の不可視文字を追加しないでください。
以下に、MaxCompute のパーティション条件の使用例を示します。
-
1. 複数のパーティションフィルター規則を指定するには、セミコロン (;) で区切ります。たとえば、
pt=1;pt=2は、パーティションフィールドptが1または2であるすべてのパーティションに一致します。 -
2. フィルター規則では、カンマ (,) で区切られた複数のパーティションフィールドの値を指定できます。たとえば、
pt1=1,pt2=2,pt3=3は、3 つの条件をすべて同時に満たすパーティションに一致します。%Y%m%d || -1 daysのような関数は、単一レベルのパーティションではサポートされていますが、複数レベルのパーティションフィルターではサポートされていないことに注意してください。

例:前の図に示すように、MaxCompute テーブルに pt パーティションがあり、その中に ds サブパーティションが含まれているとします。
-
複数パーティション:
pt=1;pt=2は、パーティションpt=1とpt=2からすべてのデータを同期します。 -
複数パーティションフィールド:
pt=1,ds=1は、pt=1パーティション内のds=1サブパーティションからデータを同期します。 -
サポートされていない構文:
pt=1,ds=%Y%m%d || -1 daysやpt=1;pt=%Y%m%d || -1 daysのような式は現在サポートされていません。 -
3. パーティションフィールドの値には、任意の値に一致するワイルドカード文字 (*) を使用できます。この場合、フィルター規則からフィールドを省略できます。
-
4. パーティションフィールドの値には、正規表現を使用できます。たとえば、
pt=[0-9]*は、ptの値が数値であるすべてのパーティションに一致します。 -
5. パーティションフィールドの値には、時間ベースのマッチングを使用できます。形式は
partition_field=formatted_time_value||time_interval_expressionです。たとえば、ds=%Y%m%d || -1 daysは、パーティションフィールドがdsで、形式が20150510であり、前日のデータにアクセスすることを指定します。 -
5.1. フォーマットされた時間は、次の表にリストされている標準の日付書式指定子をサポートします。
-
5.2. 時間間隔式は
+/- n unit形式をサポートします。ここで、unitはweek(s)、day(s)、hour(s)、minute(s)、second(s)、またはmicrosecond(s)です。プラス記号 (+) はタスク作成からn単位後の時間を示し、マイナス記号 (-) はn単位前の時間を示します。 -
5.3. デフォルトでは、システムはすべてのフィルター規則の時間パラメーターを
+0 daysオフセットで置き換えます。したがって、フィルタリングに使用されるフィールド値にこれらの日付書式指定子をリテラル文字列として含めることはできないことに注意してください。たとえば、タスクが水曜日に作成された場合、フィルターpt=%abcは、ptの値がリテラル文字列%abcではなくWedbcであるパーティションに一致します。
利用可能な日付書式指定子:
%d: 月の日 (01-31)
%H: 24時間形式の時 (00-23)
%m: 月 (01-12)
%M: 分 (00-59)
%S: 秒 (00-61)
%y: 2桁の年 (00-99)
%Y: 4桁の年
5.3. データ同期制御メカニズムの設定:
[DONE ファイルを使用] を選択して、システムが全量同期を開始するタイミングを制御し、データ整合性を確保します。MaxCompute からの全量同期を開始する前に、システムは当日の DONE ファイルをチェックします。ファイルが見つからない場合、システムは待機します。デフォルトのタイムアウトは 1 時間です。
-
MaxCompute の公式サイトから odpscmd クライアントをダウンロードします。パッケージ名は
odps_clt_release_64.tar.gzです。 -
対象プロジェクトに対する
CreateResource権限が必要です。 -
インストール後、次のコマンドを実行して DONE ファイルをアップロードします。ファイル名は
$prefix_%Y-%m-%d形式で指定します。ここで、$prefixはプレフィックスで、デフォルトではテーブル名になり、%Y-%m-%dは再インデックスタスクの日付です。スケジュールされたタスクの最小間隔は 1 日です。odpscmd -u accessid -p accesskey --project=<prj_name>-e "add file <done file>;" -
MaxCompute クライアント (odpscmd) の使用方法:詳細については、「ローカルクライアント (odpscmd) を使用した接続」をご参照ください。
-
DONE ファイルは JSON 形式で、全量データセットのミリ秒単位の
timestampを含む必要があります。システムは増分データを最大 3 日間保持するため、このタイムスタンプは、3 日以上前の時刻であってはなりません。 -
このタイムスタンプは、増分データの適用を開始する時点を指定します。これを設定しない場合、システムは再インデックスタスクの開始時間から増分データを追加します。
-
たとえば、09:00 に生成された全量データセットを考えます。MaxCompute は 10:00 に処理を完了し、OpenSearch のスケジュールされた再インデックスが 10:30 に設定されているとします。データ整合性を確保するためには、DONE ファイルで 09:00 のタイムスタンプ (ミリ秒単位) を指定する必要があります。全量データが同期された後、システムは 09:00 以降に生成されたすべての増分データを追加します。このタイムスタンプを省略すると、システムは再インデックス時間 (10:30) から増分データを追加し始め、09:00 から 10:30 の間に生成されたデータが失われます。この設定は、データ損失を防ぐために非常に重要です。増分データを使用しない場合、タイムスタンプは不要です。
-
[データ時間] 設定は、DONE ファイルのタイムスタンプと同様の原則で機能します。再インデックス中に API コールを介してプッシュされる増分データの開始点を追跡するために使用されます。
{
"timestamp":"1234567890000"
}
DONE ファイルとデータ時間の優先順位:
-
MaxCompute データソースの [データ時間] 設定は必須であり、DONE ファイルよりも優先されます。
-
単一のアプリケーションバージョンのみを作成する場合、[データ時間] を指定する必要があります。このシナリオでは、DONE ファイルを単独で使用することはできません。
-
スケジュールされた再インデックスを使用するには、[データ時間] と DONE ファイルの両方を設定する必要があります。最初のバージョンでは [データ時間] が使用されます。その後、自動的に作成されるすべてのバージョンでは、DONE ファイルが優先されます。
OpenSearch Industry Algorithm Edition は、RDS、MaxCompute (旧称:ODPS)、PolarDB の 3 つの Alibaba Cloud データソースをサポートしています。RDS と PolarDB は複数テーブルの結合設定をサポートしており、アプリケーション内でプライマリテーブルと外部テーブルをリンクできます。MaxCompute データソースでは、アプリケーションごとに 1 つのデータベースしか設定できません。OpenSearch Industry Algorithm Edition は、セルフマネージドデータベースやその他の外部データソースをサポートしていません。
テスト環境と本番環境を分離するには、独立した OpenSearch インスタンスを作成し、異なるデータソースで設定して環境を分離します。
注意事項
MaxCompute データソース接続は、全量同期のみをサポートします。増分更新を処理するには、SDK を使用して個別にデータをプッシュする必要があります。