MaxCompute (旧称 Open Data Processing Service (ODPS)) は、オープンコンピューティングプラットフォームです。データが MaxCompute プラットフォームで生成される場合、それを OpenSearch アプリケーションのデータソースとして設定できます。アプリケーションの再インデックス タスクをトリガーすると、システムは指定された MaxCompute テーブルから全量データを自動的に取得します。データソースコネクタは全量データ同期のみをサポートしているため、その後の差分データは SDK または API コールを使用してプッシュする必要があります。
AccessKey の設定
OpenSearch で MaxCompute データソースを設定すると、OpenSearch は提供された AccessKey と AccessKey Secret を使用して MaxCompute テーブルからデータをダウンロードします。したがって、データソースを設定する前に、AccessKey と AccessKey Secret を準備しておく必要があります。
MaxCompute プロジェクトと OpenSearch アプリケーションは、同じ Alibaba Cloud アカウントに属している必要があります。
-
同一アカウント内の MaxCompute プロジェクトのテーブルにアクセスするには、Alibaba Cloud アカウントの AccessKey ペアを使用できます。
-
セキュリティを強化するため、代わりに RAM ユーザーを使用することを推奨します。次の手順に従ってください。
-
Alibaba Cloud アカウントで RAM ユーザーを作成します。詳細については、「RAM ユーザーの作成」をご参照ください。
-
RAM ユーザーを MaxCompute のメンバーとして追加します。
DataWorks ワークスペースで、左側のナビゲーションペインから [メンバー管理] を選択します。メンバー管理ページで、右上隅の [メンバーを追加] をクリックします。各ロールの権限を表示するには、[ロール権限の表示] をクリックします。
利用可能なロールには、ワークスペース管理者、開発者、運用保守、デプロイ担当者、閲覧者、セキュリティ管理者、モデル設計者が含まれます。[メンバーを追加] ダイアログボックスで、RAM ユーザーを [追加するアカウント] リストから [追加済みのアカウント] リストに移動します。[ロールの一括設定] エリアで、必要なロールを選択し、[OK] をクリックします。
-
メンバーを追加した後、MaxCompute データ開発ページで
list users;コマンドを実行して、アカウント名を表示します。
OK
OK
OK
OK
OK
OK
OK
OK
A xxx xxx xxx xxx
RAM$op xxx h_test@test.xxx 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. プロジェクトの CreateInstance および List 権限を付与します。
grant CreateInstance,List on project zy_ts_test to user xxx;
-- 2. テーブルの SELECT、DESCRIBE、DOWNLOAD 権限を付与します。
GRANT select,describe,download ON TABLE people_info TO USER xxx;
-- 3. (任意) MaxCompute テーブルのラベル権限を付与します。
set label 2 to USER xxx;
-- 指定されたユーザーの権限と割り当てられたロールを照会します。
show grants for xxx;
権限を付与した後、OpenSearch で MaxCompute データソースを設定できます。
データソースの設定
OpenSearch コンソールで、[データソースを使用] を選択してアプリケーション作成プロセスを開始します。
-
[データベースに接続] をクリックして、MaxCompute の情報を設定します。プロジェクト名、および権限が付与されたアカウントの AccessKey と AccessKey Secret を入力します。
データソースタイプリストから [MaxCompute] を選択します。テーブル選択ページで、[people_info] テーブルを左側のテーブルリストから右側の選択済みリストに移動します。
この手順を完了すると、システムはテーブルのフィールドを自動的にマッピングします。ビジネス要件に基づいてマッピングを調整できます。完了したら、[次へ] をクリックします。
アプリケーションスキーマを設定する際、OpenSearch では各テーブルにプライマリーテーブルと一意のプライマリーキーフィールドを指定する必要があります。
-
インデックススキーマを設定します。検索要件に基づいて適切なアナライザーを選択します。詳細については、「インデックススキーマ」をご参照ください。完了したら、[次へ] をクリックします。
インデックススキーマ設定ページには、[インデックスフィールド] (インデックス名、含まれるフィールド、および [中国語 - 一般分析] や [キーワード] などの分析方法を設定)、[属性フィールド] (フィルター、集計、ソート、および distinct 句を使用した distinct 操作に使用)、[デフォルト表示フィールド] (検索結果に表示されるフィールドを設定) の 3 つのセクションがあります。
-
データソースを設定します:この手順には、フィールドマッピングの設定、パーティション情報の選択、およびデータ同期の同時実行制御メカニズムの選択が含まれます。
5.1. フィールドマッピングの設定:[操作] 列の [編集] をクリックします。OpenSearch は、MaxCompute データ用にいくつかのデータソースプラグインを提供しています。プラグインを使用するには、フィールドマッピングの設定中に [コンテンツ変換] 列のプラス記号 (+) をクリックします。プラグインは、ソースフィールドを OpenSearch に同期する前に変換します。設定または接続エラーによりプラグインが失敗した場合、ソースフィールドは変換されずに同期されます。
プラグインの設定:[プラグインとパラメータ設定] ダイアログボックスで、左側にある 4 つのコンテンツ変換プラグイン (HTMLTagRemover、JsonKeyValueExtractor、KeyValueExtractor、StringCatenateExtractor) から選択します。プラグインを選択した後、右側でそのパラメータを設定し、[保存] をクリックします。
-
MaxCompute テーブルの DATETIME 型については、システムが自動的に値をミリ秒に変換します。対応する OpenSearch のフィールドタイプを INT に設定してください。
以下の MaxCompute フィールドタイプがサポートされています:Bigint、Double、Boolean、Datetime、String、Decimal。
フィールドマッピングインターフェイスには、ソースからターゲットへのフィールド関係がテーブルに表示されます。各行には、ソースフィールド名、ターゲットフィールド名、および [コンテンツ変換] 列が含まれます。[コンテンツ変換] 列の「+」ボタンをクリックしてプラグインを追加し、[操作] 列の [編集] ボタンを使用してマッピング設定を変更できます。
5.2. パーティションの指定:OpenSearch では、要件に基づいて MaxCompute データからインポートするパーティションを指定できます。正規表現を使用してパーティションを選択できます。たとえば、前日のデータをインポートする場合などです。この機能を定期的な再インデックス機能と組み合わせることで、新しいデータパーティションを毎日自動的にインポートできます。
正規表現:等号 (=)、コンマ (,)、セミコロン (;)、および二重縦棒 (||) は予約文字です。たとえば、前日のパーティションから全量データを自動的にインポートするには、ds=%Y%m%d || -1 days を使用します。
設定後、データソースリストには追加された MaxCompute テーブルレコードが表示されます。これには、[プロジェクト名] (例:search_offline_dev)、[テーブル名] (例:agg_pv_log_test)、[パーティションインポート条件]、[データタイム] などのフィールドが含まれます。[操作] 列から設定済みのデータソースを [削除] できます。
ds はパーティションフィールド名です。等号 (=) の両側にスペースやその他の不可視文字を追加しないでください。
以下の例は、さまざまなシナリオで MaxCompute のパーティション条件を使用する方法を示しています。
-
1. 複数のパーティションフィルター規則がサポートされています。異なる規則はセミコロン (;) で区切ります。たとえば、
pt=1;pt=2は、パーティションフィールドptが1または2であるすべてのパーティションに一致します。 -
2. フィルター規則は、複数のパーティションフィールドの値を指定できます。異なるフィールドはコンマ (,) で区切ります。たとえば、
pt1=1,pt2=2,pt3=3は、pt1=1、pt2=2、およびpt3=3を同時に満たすすべてのパーティションに一致します。注:%Y%m%d || -1 daysのような時間関数機能は、複数パーティションではサポートされていません。

例:(上の図は、pt パーティションの下に ds サブパーティションを持つ MaxCompute テーブルを示しています)
-
複数パーティション:
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. パーティションフィールドの値は、時間マッチングをサポートしています。規則は
pt=<書式設定された時間を含むパーティション列の値>||<時間間隔式>です。たとえば、ds=%Y%m%d || -1 daysは、パーティションフィールドがdsで、形式が20150510であり、1 日前のデータにアクセスする必要があることを意味します。 -
5.1 書式設定された時間のパラメータは、以下の表に示すように、標準の時間書式指定子をサポートしています。
-
5.2 時間間隔式は
+/- n week|weeks|day|days|hour|hours|minute|minutes|second|seconds|microsecond|microsecondsをサポートしています。プラス記号 (+) はタスク作成時刻から n 単位後の時刻を示し、マイナス記号 (-) はタスク作成時刻から n 単位前の時刻を示します。 -
5.3 デフォルトでは、システムはすべてのフィルター規則に
+0 daysのオフセットを適用します。したがって、フィルタリングに使用されるフィールド値には、時間書式指定子に一致する文字列を含めることはできません。たとえば、水曜日に作成されたタスクの場合、pt=%abcはptの値がWedbcであるパーティションに一致し、%abcには一致しません。
以下の表は、利用可能なすべての正規表現パラメータとその意味を説明しています。
%d: 日 ([01-31])
%H: 時 (24時間表記) ([00, 23])
%m: 月 ([01, 12])
%M: 分 ([00, 59])
%S: 秒 ([00, 61])
%y: 年 (2桁)
%Y: 年 (4桁)
5.3. データ同期の同時実行制御メカニズムの選択:
[DONE ファイルを使用] を選択すると、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 形式である必要があり、全量データのバッチのタイムスタンプをミリ秒単位で指定する必要があります。差分データは最大 3 日間保持されるため、このタイムスタンプは、3 日以上過去のものであってはなりません。
-
このタイムスタンプは、差分データをバックフィルする時点を示します。設定されていない場合、システムはデフォルトで再インデックスタスクの開始時刻からデータを追加します。
-
たとえば、全量データが 09:00 に生成され、MaxCompute が 10:00 に処理を完了し、OpenSearch の定期的な再インデックス タスクが 10:30 に実行されるとします。データの整合性を確保するためには、DONE ファイルで 09:00 のタイムスタンプ (ミリ秒単位) を指定する必要があります。これにより、全量データが処理された後、システムは 09:00 以降に生成されたすべての差分データを追加します。このタイムスタンプを指定しない場合、システムはデフォルトでタスクの開始時刻 (10:30) を使用し、09:00 から 10:30 までの差分データは失われます。差分データがない場合は、タイムスタンプを設定する必要はありません。
-
Advanced Edition アプリケーション用の DONE ファイルの内容を以下に示します。注:Standard Edition アプリケーションで必要なデータタイム値も同様の原則で機能します。どちらも再インデックス中に API コールからの差分データに追随するために使用されます。
{
"timestamp":"1234567890000"
}
DONE ファイルとデータタイムの優先順位:
-
MaxCompute データソースの [データタイム] 設定は必須であり、DONE ファイルよりも優先されます。
-
単一のバージョンのみを作成する場合は、[データタイム] のみを指定する必要があります。DONE ファイルのみを使用することはできません。
-
定期的な再インデックスを使用する場合は、[データタイム] と DONE ファイルの両方を設定する必要があります。最初のバージョンでは [データタイム] が優先され、それ以降のすべてのバージョンでは DONE ファイルが優先されます。
MaxCompute データソースコネクタは全量データ同期のみをサポートします。差分データは、SDK または API を介してプッシュする必要があります。