このトピックでは、リソース関数を使用して別のログストアからデータをプルし、ログストア内のログデータをエンリッチする方法について説明します。
背景情報
ホテルは、user_logstoreという名前のログストアにゲストの個人情報を格納し、check-in_logstoreという名前のログストアにゲストのチェックイン情報を格納します。 ホテルは、チェックイン_logstoreログストアからいくつかのフィールドを取得し、それらのフィールドをuser_logstoreログストア内のフィールドと連結したいと考えています。 ホテルは、res_log_logstore_pull関数を使用してチェックイン_logstoreからデータをプルし、e_table_map関数を使用してデータをマップできます。 res_log_logstore_pull関数の詳細については、「res_log_logstore_pull」をご参照ください。 e_table_map関数の詳細については、「e_table_map」をご参照ください。
データ変換
生データ
個人情報の保存に使用されるuser_logstoreという名前のlogstore
topic:xxx city:xxx cid:12345 name:maki topic:xxx city:xxx cid:12346 name:vicky topic:xxx city:xxx cid:12347 name:maryチェックイン情報の保存に使用される、check-in_logstoreという名前のlogstore
time:1567038284 status:check in cid:12345 name:maki room_number:1111 time:1567038284 status:check in cid:12346 name:vicky room_number:2222 time:1567038500 status:check in cid:12347 name:mary room_number:3333 time:1567038500 status:leave cid:12345 name:maki room_number:1111
変換ルール
説明res_log_logstore_pull関数を使用すると、データ強化の時間範囲または開始時間を設定できます。
変換ルールで時間範囲を設定した場合 (たとえば、from_time=1567038284およびto_time=1567038500) 、Simple Log Serviceによって指定された時間範囲内に受信されたデータは、データ強化のためにプルされます。
変換ルールで開始時間を設定した場合 (例: from_time="begin") 、Simple Log Serviceによって指定された時間から受信されたデータは、データエンリッチメントのためにプルされます。
res_log_logstore_pull関数のフィールドの詳細については、「res_log_logstore_pull」をご参照ください。
e_table_map関数
この関数は、cidフィールドを使用して2つのログエントリをマッピングします。 2つのログエントリのcidフィールドの値が互いに等しい場合、データマッピングは成功します。 room_numberフィールドとフィールド値が返され、チェックイン_logstoreログストアのログエントリと連結されます。
e_table_map(res_log_logstore_pull(endpoint, ak_id, ak_secret, project, logstore, fields=["cid","room_number"], from_time="begin", ), "cid","room_number")
結果
e_table_map関数
topic:xxx city:xxx cid:12345 name:maki room_nuber:1111 topic:xxx city:xxx cid:12346 name:vicky room_number:2222 topic:xxx city:xxx cid:12347 name:mary room_number:3333
ホワイトリストルールとブラックリストルールを設定してデータをフィルタリングする
ホワイトリストルールの設定
変換ルール
fetch_include_dataフィールドを使用して、ホワイトリストルールを設定します。 この例では、fetch_include_data="room_number:1111" 式がres_log_logstore_pull関数に含まれています。 この式は、room_numberフィールドの値が1111のログエントリのみがプルされることを示します。
res_log_logstore_pull(endpoint, ak_id, ak_secret, project, logstore, ["cid","name","room_number","status"],from_time=1567038284,to_time=1567038500,fetch_include_data="room_number:1111")取得したデータ
status: check in cid:12345 name:maki room_number:1111 status:leave cid:12345 name:maki room_number:1111
ブラックリストルールの設定
変換ルール
ブラックリストルールを設定するには、fetch_exclude_dataフィールドを使用します。 この例では、fetch_exclude_data="room_number:1111" 式がres_log_logstore_pull関数に含まれています。 この式は、room_numberフィールドの値が1111のログエントリのみが削除されることを示します。
res_log_logstore_pull(endpoint, ak_id, ak_secret, project, logstore, ["cid","name","room_number","status"],from_time=1567038284,to_time=1567038500,fetch_exclude_data="room_number:1111")取得したデータ
status:check in cid:12346 name:vicky room_number:2222 status:check in cid:12347 name:mary room_number:3333
ブラックリストルールとホワイトリストルールの設定
変換ルール
ブラックリストルールとホワイトリストルールを設定する場合、最初にブラックリストルールが適用され、次にホワイトリストルールが適用されます。 この例では、fetch_exclude_data="time:1567038285",fetch_include_data="status:check In" 式がres_log_log_logstore_pull関数に含まれています。 この式は、timeフィールド値が最初にドロップされ1567038285ログエントリが、statusフィールド値がチェックインされたログエントリがプルされることを示します。
res_log_logstore_pull(endpoint, ak_id, ak_secret, project, logstore, ["cid","name","room_number","status"],from_time=1567038284,to_time=1567038500,fetch_exclude_data="time:1567038285",fetch_include_data="status:check in")取得したデータ
status:check in cid:12345 name:maki room_number:1111 status:check in cid:12346 name:vicky room_number:2222 status:check in cid:12347 name:mary room_number:3333
プライマリキーメンテナンスを有効にして、宛先ログストアからデータをプルする
データを変換する前に破棄するには、主キーメンテナンス機能を有効にします。 たとえば、チェックインしたがチェックアウトしていない顧客のチェックインデータを、check-in_logstoreという名前のログストアから取得したいとします。 顧客のプルされたログエントリにstatus:leaveフィールドが含まれている場合、顧客はチェックアウト済みです。 res_log_logstore_pull関数のprimer_keysパラメーターを設定でき、ログエントリは変換されません。
1つのフィールドをprimary_keysパラメーターの値として設定できます。 フィールドはfieldsフィールドに存在する必要があります。
主キーのメンテナンス機能を有効にする前に、データを取得するログストアに1つのシャードしかないことを確認してください。
主キーメンテナンス機能を有効にした場合、delete_dataフィールドをNoneに設定することはできません。
変換ルール
res_log_logstore_pull(endpoint, ak_id, ak_secret, project, logstore, ["cid","name","room_number","status","time"],from_time=1567038284,to_time=None,primary_keys="cid",delete_data="status:leave")データの取得
上記のログエントリのstatus:leaveフィールドは、nameがmakiである顧客がチェックアウトしたことを示します。 したがって、このログエントリは変換されません。
time:1567038284 status:check in cid:12346 name:vicky room_number:2222 time:1567038500 status:check in cid:12347 name:mary room_number:3333