join コマンド - Amazon OpenSearch Service

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

join コマンド

注記

このPPLコマンドをサポートする AWS データソース統合を確認するには、「」を参照してくださいコマンド

join コマンドを使用すると、共通のフィールドに基づいて複数のソースからのデータを組み合わせることができ、複雑な分析を実行し、分散データセットからより深いインサイトを得ることができます。

Schema

(ラージ) と otel-v1-apm-span-* (スモール) の 2 otel-v1-apm-service-map つ以上のインデックスがあります。

インデックスの関連フィールド:

otel-v1-apm-span-*
  • traceId - トレースの一意の識別子。同じトレースのすべてのスパンが同じ を共有しますtraceId。

  • spanId - トレース内のスパンの一意の識別子で、スパンの作成時に割り当てられます。

  • parentSpanId - このスパン spanId の親スパンの 。これがルートスパンの場合、このフィールドは空である必要があります。

  • durationInNanos - startTime と のナノ秒の差 endTime(UI latencyの場合)

  • serviceName - スパンの発信元のリソース。

  • traceGroup - トレースのルートスパンの名前。

otel-v1-apm-service-map
  • serviceName - スパンを出力したサービスの名前。

  • destination.domain - このクライアントによって呼び出される serviceName サービスの 。

  • destination.resource - このクライアントによって呼び出されるスパン名 (、 APIオペレーションなど)。

  • target.domain - クライアントによって呼び出される serviceName サービスの 。

  • target.resource - クライアントによって呼び出されるスパン名 (、 APIオペレーションなど)。

  • traceGroupName - リクエストチェーンを開始した最上位のスパン名。

要件

以下を計算するjoinためのサポート:

サービスごとに、サービスマップインデックスのスパンインデックスを結合して、さまざまなタイプのフィルターでメトリクスを計算します。

このサンプルクエリは、orderサービスのトレースグループでフィルタリングされたときにレイテンシーを計算client_cancel_orderします。

SELECT avg(durationInNanos) FROM `otel-v1-apm-span-000001` t1 WHERE t1.serviceName = `order` AND ((t1.name in (SELECT target.resource FROM `otel-v1-apm-service-map` WHERE serviceName = `order` AND traceGroupName = `client_cancel_order`) AND t1.parentSpanId != NULL) OR (t1.parentSpanId = NULL AND t1.name = `client_cancel_order`)) AND t1.traceId in (SELECT traceId FROM `otel-v1-apm-span-000001` WHERE serviceName = `order`)
PPL に移行する

join コマンドの構文

SEARCH source=<left-table> | <other piped command> | [joinType] JOIN [leftAlias] ON joinCriteria <right-table> | <other piped command>
書き換え

SEARCH source=otel-v1-apm-span-000001 | WHERE serviceName = 'order' | JOIN left=t1 right=t2 ON t1.traceId = t2.traceId AND t2.serviceName = 'order' otel-v1-apm-span-000001 -- self inner join | EVAL s_name = t1.name -- rename to avoid ambiguous | EVAL s_parentSpanId = t1.parentSpanId -- RENAME command would be better when it is supported | EVAL s_durationInNanos = t1.durationInNanos | FIELDS s_name, s_parentSpanId, s_durationInNanos -- reduce colunms in join | LEFT JOIN left=s1 right=t3 ON s_name = t3.target.resource AND t3.serviceName = 'order' AND t3.traceGroupName = 'client_cancel_order' otel-v1-apm-service-map | WHERE (s_parentSpanId IS NOT NULL OR (s_parentSpanId IS NULL AND s_name = 'client_cancel_order')) | STATS avg(s_durationInNanos) -- no need to add alias if there is no ambiguous
joinType
  • 構文: INNER | LEFT OUTER | CROSS

  • オプションです。

  • 実行する結合のタイプ。指定INNERしない場合、デフォルトは です。

leftAlias
  • 構文: left = <leftAlias>

  • オプションです。

  • あいまいな命名を避けるために、左側の結合側で使用するサブクエリエイリアス。

joinCriteria
  • 構文: <expression>

  • 必須

  • 構文は で始まりますON。任意の比較式にすることができます。通常、結合条件は のようになります<leftAlias>.<leftField>=<rightAlias>.<rightField>

    例: l.id = r.id。結合条件に複数の条件が含まれている場合は、各比較式間で AND および OR演算子を指定できます。例えば、l.id = r.id AND l.email = r.email AND (r.age > 65 OR r.age < 18) と指定します。

その他の の例

SQL クエリからの移行 (TPC-H Q13):

SELECT c_count, COUNT(*) AS custdist FROM ( SELECT c_custkey, COUNT(o_orderkey) c_count FROM customer LEFT OUTER JOIN orders ON c_custkey = o_custkey AND o_comment NOT LIKE '%unusual%packages%' GROUP BY c_custkey ) AS c_orders GROUP BY c_count ORDER BY custdist DESC, c_count DESC;

PPL 結合クエリによって書き換えられた:

SEARCH source=customer | FIELDS c_custkey | LEFT OUTER JOIN ON c_custkey = o_custkey AND o_comment NOT LIKE '%unusual%packages%' orders | STATS count(o_orderkey) AS c_count BY c_custkey | STATS count() AS custdist BY c_count | SORT - custdist, - c_count

制限: サブ検索は結合右側ではサポートされていません。

サブ検索がサポートされている場合は、上記のPPLクエリを次のように書き直すことができます。

SEARCH source=customer | FIELDS c_custkey | LEFT OUTER JOIN ON c_custkey = o_custkey [ SEARCH source=orders | WHERE o_comment NOT LIKE '%unusual%packages%' | FIELDS o_orderkey, o_custkey ] | STATS count(o_orderkey) AS c_count BY c_custkey | STATS count() AS custdist BY c_count | SORT - custdist, - c_count