このトピックでは、リソース関数を使用して別の Logstore からデータを取得し、データエンリッチメントを行う方法を説明します。
背景情報
あるホテルでは、ゲストの個人情報を user_logstore という Logstore に保存し、チェックイン情報を check-in_logstore という Logstore に保存しています。このホテルは、check-in_logstore から一部のフィールドを取得し、user_logstore のデータと結合したいと考えています。この目的を達成するため、Simple Log Service では、check-in_logstore からデータを取得するためのres_log_logstore_pull 関数と、データエンリッチメントを行うためのe_table_map 関数が提供されています。
異なる Logstore からのログの結合
生データ
個人情報用 Logstore (user_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チェックイン情報用 Logstore (check-in_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 を設定すると、この時間範囲内の Logstore データのみが取得されます。
変換ルールでfrom_time="begin" を設定すると、Logstore データが継続的に取得されます。
res_log_logstore_pull 関数のパラメータの詳細については、「res_log_logstore_pull」をご参照ください。
e_table_map 関数
この関数は、両方の Logstore に共通する
cidフィールドに基づいてログを照合します。cidフィールドの値が同一である場合にのみ、照合は成功します。照合が成功すると、check-in_logstore からroom_numberフィールドとその値が返され、user_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_number: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" を指定すると、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" を指定すると、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="cid:12345",fetch_include_data="status:check in"を指定すると、まずcidの値が12345であるデータが破棄されます。次に、status の値が 'check in' であるデータが取得されます。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="cid:12345",fetch_include_data="status:check in")取得されたデータ
status:check in cid:12346 name:vicky room_number:2222 status:check in cid:12347 name:mary room_number:3333
プライマリキーのメンテナンスを有効にした取得元 Logstore からのデータ取得
取得したデータを変換する前に削除したい場合は、プライマリキーのメンテナンス機能を有効にすることができます。たとえば、check-in_logstore からチェックインしたがチェックアウトしていないゲストのチェックイン情報を取得したい場合があります。取得したデータにstatus:leave が含まれている場合、そのゲストはチェックアウトしたことを示します。res_log_logstore_pull 関数のprimary_keys パラメータでプライマリキーを指定することで、このデータが変換されないようにできます。
primary_keys パラメータは単一の文字列のみをサポートし、その文字列はfields パラメータでも指定する必要があります。
プライマリキーのメンテナンスを有効にする場合、データ取得元の Logstore のシャードは 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")取得されたデータ
name が maki であるゲストの最終ステータスは status:leave です。これは、ゲストがチェックアウトしたことを示します。したがって、このゲストに関連するデータは変換されません。
time:1567038284 status:check in cid:12346 name:vicky room_number:2222 time:1567038500 status:check in cid:12347 name:mary room_number:3333