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