サポートされている PPL コマンド
次の表は、OpenSearch Dashboards が CloudWatch Logs、Amazon S3、または Security Lake をクエリする際にサポートしている PPL コマンドと、CloudWatch Logs Insights がサポートしているコマンドを示しています。CloudWatch Logs Insights は、CloudWatch Logs のクエリ時に OpenSearch Dashboards と同じ CloudWatch PPL 構文を使用し、テーブルは両方とも CloudWatch Logs を参照します。
注記
OpenSearch Service 以外のデータを分析する場合、コマンドは OpenSearch インデックス上での動作と異なる可能性があります。
コマンド
| PPL コマンド | 説明 | CloudWatch Logs | Amazon S3 | Security Lake | コマンドの例 |
|---|---|---|---|---|---|
| fields コマンド | 投影が必要な一連のフィールドを表示します。 |
|
|||
| where コマンド |
指定した条件に基づいてデータをフィルタリングします。 |
|
|||
| stats コマンド |
集計と計算を実行します。 |
|
|||
| parse コマンド |
文字列から正規表現 (regex) パターンを抽出し、抽出されたパターンを表示します。抽出されたパターンはその後、新しいフィールドの作成やデータのフィルタリングに使用できます。 |
|
|||
| patterns コマンド |
テキストフィールドからログパターンを抽出し、検索結果に結果を追加します。パターン別にログをグループ化すると、大量のログデータから統計情報を集計し、分析やトラブルシューティングを行うことが容易になります。 |
|
|||
| sort コマンド |
表示された結果をフィールド名で並べ替えます。 sort -FieldName を使用して降順で並べ替えます。 |
|
|||
| 評価コマンド |
フィールドの値を変更または処理し、別のフィールドに保存します。これは、列を数学的に変更したり、列に文字列関数を適用したり、列に日付関数を適用したりするのに有用です。 |
|
|||
| rename コマンド |
検索結果の 1 つ以上のフィールドの名前を変更します。 |
|
|||
| head コマンド |
表示されるクエリ結果を frst N 行に制限します。 |
|
|||
| grok コマンド |
正規表現に基づいてテキストフィールドを grok パターンで解析し、検索結果に結果を追加します。 |
|
|||
| top コマンド |
フィールド内で最も頻度の高い値を抽出します。 |
|
|||
| 重複排除コマンド |
指定したフィールドに基づいて重複するエントリを削除します。 |
|
|||
| join コマンド |
2 つのデータセットを結合します。 |
|
|||
| lookup コマンド |
ルックアップインデックス (ディメンションテーブル) からデータを追加または置換することで、検索データを充実させます。インデックスのフィールドをディメンションテーブルの値で拡張し、ルックアップ条件が一致したときに値を追加または置換できます。 |
|
|||
| subquery コマンド | Piped Processing Language (PPL) ステートメント内で複雑なネストされたクエリを実行します。 |
|
|||
| rare コマンド |
フィールドリスト内のすべてのフィールドの最低頻度の値を検索します。 |
|
|||
| trendline コマンド | フィールドの移動平均を計算します。 |
|
|||
| eventstats コマンド | 計算された要約統計量を使用してイベントデータを補強します。イベント内の指定されたフィールドを分析し、さまざまな統計量を計算して、その結果を新しいフィールドとして各イベントに追加します。 |
|
|
||
| flatten コマンド |
フィールドをフラット化します。対象のフィールドは、次の型である必要があります: |
|
|||
| フィールドの概要 | 各フィールドの基本統計 (カウント、個別カウント、最小、最大、平均、stddev、平均) を計算します。 |
|
|||
| fillnull コマンド | null フィールドに指定した値を入力します。1 つ以上のフィールドで使用できます。 |
|
|||
| 拡張コマンド | 複数の値を含むフィールドを別々の行に分割し、指定されたフィールドの値ごとに新しい行を作成します。 |
|
|||
| コマンドの説明 |
テーブル、スキーマ、カタログの構造とメタデータに関する詳細情報を取得します。 |
|
関数
| PPL 関数 | 説明 | CloudWatch Logs | Amazon S3 | Security Lake | コマンドの例 |
|---|---|---|---|---|---|
|
( |
PPL クエリ内の文字列およびテキストデータを操作および変換できる PPL の組み込み関数。例えば、大文字と小文字の変換、文字列の組み合わせ、パーツの抽出、テキストのクリーニングなどが挙げられます。 |
|
|||
|
( |
PPL クエリで日付とタイムスタンプデータを処理および変換するための組み込み関数。例えば、date_add、date_format、 datediff、current_date などが挙げられます。 |
|
|||
|
( |
複数の行で計算を実行して 1 つの要約値を生成する組み込み関数。例えば、sum、count、avg、max、min などが挙げられます。 |
|
|||
|
( |
PPL クエリで数学的計算と変換を実行するための組み込み関数。例: abs (絶対値)、round (四捨五入数値)、sqrt (平方根)、pow (電力計算)、ceil (最も近い整数に切り上げ)。 |
|
|||
|
(算術演算子 ( |
式の組み込み関数、特に値式に対しては、スカラー値を返します。式にはさまざまな型と形式があります。 |
|
|||
|
( |
CIDR などの IP アドレスを処理するための組み込み関数。 |
|
|||
|
( |
配列、抽出、検証など、JSON を処理するための組み込み関数。 |
|
|||
|
( |
配列、抽出、検証など、JSON を処理するための組み込み関数。 |
|
|||
|
( |
データの一意のフィンガープリントを生成できる組み込み関数。これは、検証、比較、またはより複雑なセキュリティプロトコルの一部として使用できます。 |
|
OpenSearch PPL を使用する CloudWatch Logs Insights ユーザー向けの追加情報
CloudWatch Logs Insights はほとんどの OpenSearch PPL コマンドと関数をサポートしていますが、一部のコマンドと関数は現在サポートされていません。例えば、PPL では現在 Lookup コマンドはサポートされていません。2025 年 6 月 2 日現在、CloudWatch Logs Insights は PPL で JOIN、サブクエリ、Flatten、Fillnull、Expand、Cidrmatch、および JSON 関数をサポートするようになりました。サポートされているクエリコマンドと関数の完全なリストについては、上記の表の Amazon CloudWatch Logs 列を参照してください。
サンプルクエリとクォータ
以下は、CloudWatch Logs Insights ユーザーと CloudWatch データをクエリする OpenSearch ユーザーの両方に適用されます。
OpenSearch Service から CloudWatch Logs をクエリするときに適用される制限については、「Amazon CloudWatch Logs ユーザーガイド」の「CloudWatch Logs quotas」を参照してください。制限には、クエリできる CloudWatch Log グループの数、同時実行できる最大クエリ数、最大クエリ実行時間、結果として返される最大行数が含まれます。CloudWatch Logs のクエリに使用する言語 (OpenSearch PPL、SQL、および Logs Insights QL) に関係なく、制限は同じです。
PPL コマンド
トピック
コメント
注記
この PPL コマンドをサポートする AWS データソース統合を確認するには、「コマンド」を参照してください。
PPL は、行コメントとブロックコメントの両方をサポートしています。システムはコメントテキストを評価しません。
行コメント
行コメントは 2 つのスラッシュ // で始まり、新しい行で終わります。
例:
os> source=accounts | top gender // finds most common gender of all the accounts fetched rows / total rows = 2/2 +----------+ | gender | |----------| | M | | F | +----------+
ブロックコメント
ブロックコメントはスラッシュの後にアスタリスク \* で開始し、アスタリスクの後にスラッシュ */ で終了します。
例:
os> source=accounts | dedup 2 gender /* dedup the document with gender field keep 2 duplication */ | fields account_number, gender fetched rows / total rows = 3/3 +------------------+----------+ | account_number | gender | |------------------+----------| | 1 | M | | 6 | M | | 13 | F | +------------------+----------+
相関コマンド
注記
この PPL コマンドをサポートする AWS データソース統合を確認するには、「コマンド」を参照してください。
一般的なディメンションと時間枠に従って、さまざまなデータソースを関連付けることができます。
この相関関係は、同じ期間を共有しているが正式に同期されていないさまざまな分野からの大量のデータを処理する場合に極めて重要です。
これらのさまざまなデータソースを時間枠や同様のディメンションに基づいて相関させることで、データを充実させ、貴重なインサイトを発見できます。
例
オブザーバビリティドメインには 3 つの異なるデータソースがあります。
-
ログ
-
メトリクス
-
トレース
これらのデータソースは、共通のディメンションを共有する場合があります。あるデータソースから別のデータソースに移行するには、データソースを正しく関連付ける必要があります。セマンティック命名規則を使用すると、ログ、トレース、メトリクス間で共有要素を識別できます。
例:
{ "@timestamp": "2018-07-02T22:23:00.186Z", "aws": { "elb": { "backend": { "http": { "response": { "status_code": 500 } }, "ip": "********", "port": "80" }, ... "target_port": [ "10.0.0.1:80" ], "target_status_code": [ "500" ], "traceId": "Root=1-58337262-36d228ad5d99923122bbe354", "type": "http" } }, "cloud": { "provider": "aws" }, "http": { "request": { ... }, "communication": { "source": { "address": "**************", "ip": "**************", "port": 2817 } }, "traceId": "Root=1-58337262-36d228ad5d99923122bbe354" }
この例では、AWS 上に存在するサービスから送信された AWS ELB ログの受信を示しています。これは、ステータスコード 500 のバックエンド HTTP 応答を示しており、エラーを意味します。これにより、アラートが発動されたり、通常のモニタリングプロセスの一部になったりする可能性があります。次のステップでは、このイベントに関する関連データを収集して徹底的な調査を行います。
時間枠に関連するすべてのデータをクエリしたくなるかもしれませんが、このアプローチは圧倒的な負荷を招く可能性があります。情報が多すぎて、根本原因を特定するよりも無関係なデータをフィルタリングする時間が長くなってしまう可能性があります。
代わりに、さまざまなソースからのデータを相関させることで、より的を絞ったアプローチを使用できます。相関関係には、次のディメンションを使用できます。
-
IP –
"ip": "10.0.0.1" | "ip": "**************" -
ポート –
"port": 2817 | "target_port": "10.0.0.1:80"
追加のトレースおよびメトリクスインデックスにアクセスでき、スキーマ構造に精通している場合は、より精度の高い相関クエリを作成できます。
相関させたい HTTP 情報を含むトレースインデックスドキュメントの例を次に示します。
{ "traceId": "c1d985bd02e1dbb85b444011f19a1ecc", "spanId": "55a698828fe06a42", "traceState": [], "parentSpanId": "", "name": "mysql", "kind": "CLIENT", "@timestamp": "2021-11-13T20:20:39+00:00", "events": [ { "@timestamp": "2021-03-25T17:21:03+00:00", ... } ], "links": [ { "traceId": "c1d985bd02e1dbb85b444011f19a1ecc", "spanId": "55a698828fe06a42w2", }, "droppedAttributesCount": 0 } ], "resource": { "service@name": "database", "telemetry@sdk@name": "opentelemetry", "host@hostname": "ip-172-31-10-8.us-west-2.compute.internal" }, "status": { ... }, "attributes": { "http": { "user_agent": { "original": "Mozilla/5.0" }, "network": { ... } }, "request": { ... } }, "response": { "status_code": "200", "body": { "size": 500 } }, "client": { "server": { "socket": { "address": "***********", "domain": "example.com", "port": 80 }, "address": "***********", "port": 80 }, "resend_count": 0, "url": { "full": "http://example.com" } }, "server": { "route": "/index", "address": "***********", "port": 8080, "socket": { ... }, "client": { ... } }, "url": { ... } } } } }
このアプローチでは、システムの動作と状態をよりよく理解するために、elb ログと関連付けることができる traceId と http のクライアント/サーバー ip を確認できます。
新しい相関クエリコマンド
このタイプの調査を許可する新しいコマンドは次のとおりです。
source alb_logs, traces | where alb_logs.ip="10.0.0.1" AND alb_logs.cloud.provider="aws"| correlate exact fields(traceId, ip) scope(@timestamp, 1D) mapping(alb_logs.ip = traces.attributes.http.server.address, alb_logs.traceId = traces.traceId )
コマンドの各部分の動作は次のとおりです。
-
source alb_logs, traces– 関連付けるデータソースを選択します。 -
where ip="10.0.0.1" AND cloud.provider="aws"– これにより、検索の範囲が絞り込まれます。 -
correlate exact fields(traceId, ip)– これにより、次のフィールドの完全一致に基づいてデータを相関させるようにシステムに指示します。-
ipフィールドには明示的なフィルター条件があるため、すべてのデータソースの相関関係で使用されます。 -
traceIdフィールドには明示的なフィルターがないため、すべてのデータソースで同じ traceIds に一致します。
-
フィールド名は、相関コマンド内の関数の論理的な意味を示します。実際の結合条件は、指定したマッピングステートメントによって異なります。
用語 exact は、相関ステートメントがクエリステートメントを満たすためにすべてのフィールドを一致させる必要があることを意味します。
この用語 approximate は、ベストケースシナリオで一致しようとし、部分一致の行を拒否しません。
さまざまなフィールドマッピングへの対応
データソース間で同じ論理フィールド (ip など) の名前が異なる場合は、パスフィールドの明示的なマッピングを指定する必要があります。これに対処するには、相関条件を拡張して、論理的に類似した意味を持つ異なるフィールド名と一致させることができます。その方法は以下の通りです:
alb_logs.ip = traces.attributes.http.server.address, alb_logs.traceId = traces.traceId
相関結合に参加する各フィールドに対して、この相関コマンドで結合するすべてのテーブルを含む関連するマッピングステートメントを提供する必要があります。
例
この例では、2 つのソースがあります: alb_logs,
traces
2 つのフィールドがあります: traceId, ip
マッピングステートメントは 2 つあります: alb_logs.ip =
traces.attributes.http.server.address, alb_logs.traceId =
traces.traceId
相関期間の範囲
実行エンジン (ドライバー) による作業を簡素化するために、スコープステートメントを追加できます。これにより、この検索の範囲を指定する必要がある時間に結合クエリが明示的に指示されます。
scope(@timestamp, 1D) i
この例では、検索範囲は日単位で焦点を当てているため、同じ日に発生した相関関係はまとめてグループ化されます。このスコープメカニズムにより、結果の制御が簡単になり、ニーズに応じて増分検索解決が可能になります。
ドライバーのサポート
新しい相関コマンドは、実際には「非表示」結合コマンドです。したがって、次の PPL ドライバーのみがこのコマンドをサポートします。これらのドライバーでは、相関コマンドは適切な Catalyst Join 論理プランに直接変換されます。
例
source alb_logs, traces, metrics | where ip="10.0.0.1" AND
cloud.provider="aws"| correlate exact on (ip, port)
scope(@timestamp, 2018-07-02T22:23:00, 1 D)
論理プラン:
'Project [*] +- 'Join Inner, ('ip && 'port) :- 'Filter (('ip === "10.0.0.1" & 'cloud.provider === "aws") & inTimeScope('@timestamp, "2018-07-02T22:23:00", "1 D")) +- 'UnresolvedRelation [alb_logs] +- 'Join Inner, ('ip & 'port) :- 'Filter (('ip === "10.0.0.1" & 'cloud.provider === "aws") & inTimeScope('@timestamp, "2018-07-02T22:23:00", "1 D")) +- 'UnresolvedRelation [traces] +- 'Filter (('ip === "10.0.0.1" & 'cloud.provider === "aws") & inTimeScope('@timestamp, "2018-07-02T22:23:00", "1 D")) +- 'UnresolvedRelation [metrics]
カタリストエンジンは、最も効率的な結合順序に従ってこのクエリを最適化します。
重複排除コマンド
注記
この PPL コマンドをサポートする AWS データソース統合を確認するには、「コマンド」を参照してください。
dedup コマンドを使用して、指定したフィールドに基づいて検索結果から同じドキュメントを削除します。
構文
次の構文を使用します。
dedup [int] <field-list> [keepempty=<bool>] [consecutive=<bool>]
int
-
オプション。
-
この
dedupコマンドは、<int> を指定すると、組み合わせごとに複数のイベントを保持します。<int> の数値は 0 より大きくする必要があります。数値を指定しない場合、最初に発生したイベントのみが保持されます。他のすべての重複は結果から削除されます。 -
デフォルト: 1
keepempty
-
オプション。
-
true の場合、フィールドリストのいずれかのフィールドの値が NULL または MISSING であるドキュメントを保持します。
-
デフォルト: false
consecutive
-
オプション。
-
true の場合、値の重複した組み合わせが連続するイベントのみを削除します。
-
デフォルト: false
field-list
-
必須。
-
フィールドのカンマ区切りリスト。少なくとも 1 つのメタデータフィールドが必要です。
例 1: 1 つのフィールドに基づいて重複排除を行う
この例では、性別フィールドを使用してドキュメントを重複排除する方法を示します。
PPL クエリ:
os> source=accounts | dedup gender | fields account_number, gender; fetched rows / total rows = 2/2 +------------------+----------+ | account_number | gender | |------------------+----------| | 1 | M | | 13 | F | +------------------+----------+
例 2: 2 つの重複ドキュメントを保持する
この例では、性別フィールドを使用してドキュメントを重複排除し、2 つの重複を保持する方法を示しています。
PPL クエリ:
os> source=accounts | dedup 2 gender | fields account_number, gender; fetched rows / total rows = 3/3 +------------------+----------+ | account_number | gender | |------------------+----------| | 1 | M | | 6 | M | | 13 | F | +------------------+----------+
例 3: デフォルトで空のフィールドを保持または無視する
この例では、null 値フィールドを保持してドキュメントを重複排除する方法を示しています。
PPL クエリ:
os> source=accounts | dedup email keepempty=true | fields account_number, email; fetched rows / total rows = 4/4 +------------------+-----------------------+ | account_number | email | +------------------+-----------------------+ | 1 | john_doe@example.com | | 6 | jane_doe@example.com | | 13 | null | | 18 | juan_li@example.com | +------------------+-----------------------+
この例では、空の値フィールドを無視してドキュメントを重複排除する方法を示しています。
PPL クエリ:
os> source=accounts | dedup email | fields account_number, email; fetched rows / total rows = 3/3 +------------------+-----------------------+ | account_number | email | +------------------+-----------------------+ | 1 | john_doe@example.com | | 6 | jane_doe@example.com | | 18 | juan_li@example.com | +------------------+-----------------------+
例 4: 連続ドキュメントの重複
この例では、連続するドキュメントで重複排除する方法を示しています。
PPL クエリ:
os> source=accounts | dedup gender consecutive=true | fields account_number, gender; fetched rows / total rows = 3/3 +------------------+----------+ | account_number | gender | +------------------+----------+ | 1 | M | | 13 | F | | 18 | M | +------------------+----------+
その他の例
-
source = table | dedup a | fields a,b,c -
source = table | dedup a,b | fields a,b,c -
source = table | dedup a keepempty=true | fields a,b,c -
source = table | dedup a,b keepempty=true | fields a,b,c -
source = table | dedup 1 a | fields a,b,c -
source = table | dedup 1 a,b | fields a,b,c -
source = table | dedup 1 a keepempty=true | fields a,b,c -
source = table | dedup 1 a,b keepempty=true | fields a,b,c -
source = table | dedup 2 a | fields a,b,c -
source = table | dedup 2 a,b | fields a,b,c -
source = table | dedup 2 a keepempty=true | fields a,b,c -
source = table | dedup 2 a,b keepempty=true | fields a,b,c -
source = table | dedup 1 a consecutive=true| fields a,b,c(連続重複排除はサポートされていません)
制限
-
| dedup 2 a, b keepempty=false用DataFrameDropColumns('_row_number_) +- Filter ('_row_number_ <= 2) // allowed duplication = 2 +- Window [row_number() windowspecdefinition('a, 'b, 'a ASC NULLS FIRST, 'b ASC NULLS FIRST, specifiedwindowframe(RowFrame, unboundedpreceding$(), currentrow$())) AS _row_number_], ['a, 'b], ['a ASC NULLS FIRST, 'b ASC NULLS FIRST] +- Filter (isnotnull('a) AND isnotnull('b)) // keepempty=false +- Project +- UnresolvedRelation -
| dedup 2 a, b keepempty=true用Union :- DataFrameDropColumns('_row_number_) : +- Filter ('_row_number_ <= 2) : +- Window [row_number() windowspecdefinition('a, 'b, 'a ASC NULLS FIRST, 'b ASC NULLS FIRST, specifiedwindowframe(RowFrame, unboundedpreceding$(), currentrow$())) AS _row_number_], ['a, 'b], ['a ASC NULLS FIRST, 'b ASC NULLS FIRST] : +- Filter (isnotnull('a) AND isnotnull('b)) : +- Project : +- UnresolvedRelation +- Filter (isnull('a) OR isnull('b)) +- Project +- UnresolvedRelation
コマンドの説明
注記
この PPL コマンドをサポートする AWS データソース統合を確認するには、「コマンド」を参照してください。
describe コマンドを使用して、テーブル、スキーマ、カタログの構造とメタデータに関する詳細情報を取得します。describe コマンドのさまざまな例とユースケースを次に示します。
説明
-
describe tableこのコマンドはDESCRIBE EXTENDED tableSQL コマンドと同等です -
describe schema.table -
describe schema.`table` -
describe catalog.schema.table -
describe catalog.schema.`table` -
describe `catalog`.`schema`.`table`
評価コマンド
注記
この PPL コマンドをサポートする AWS データソース統合を確認するには、「コマンド」を参照してください。
eval コマンドは式を評価し、検索結果に結果を追加します。
構文
次の構文を使用します。
eval <field>=<expression> ["," <field>=<expression> ]...
-
field: 必須。フィールド名が存在しない場合は、新しいフィールドが追加されます。このフィールド名がすでに存在している場合、上書きされます。 -
expression: 必須。システムによってサポートされている任意の式。
例 1: 新しいフィールドを作成する
この例では、ドキュメントごとに新しい doubleAge フィールドを作成する方法を示します。新しい doubleAge は、年齢に 2 を掛けた評価結果です。
PPL クエリ:
os> source=accounts | eval doubleAge = age * 2 | fields age, doubleAge ; fetched rows / total rows = 4/4 +-------+-------------+ | age | doubleAge | |-------+-------------| | 32 | 64 | | 36 | 72 | | 28 | 56 | | 33 | 66 | +-------+-------------+
例 2: 既存のフィールドを上書きする
この例では、既存の年齢フィールドを年齢プラス 1 で上書きする方法を示します。
PPL クエリ:
os> source=accounts | eval age = age + 1 | fields age ; fetched rows / total rows = 4/4 +-------+ | age | |-------| | 33 | | 37 | | 29 | | 34 | +-------+
例 3: 評価で定義されたフィールドを使用して新しいフィールドを作成する
この例では、評価コマンドで定義された ddAge フィールドを使用して新しいフィールドを作成する方法を示します。新しいフィールド ddAge は doubleAge の評価結果に 2 を掛けた値で、doubleAge は評価コマンドで定義されます。
PPL クエリ:
os> source=accounts | eval doubleAge = age * 2, ddAge = doubleAge * 2 | fields age, doubleAge, ddAge ; fetched rows / total rows = 4/4 +-------+-------------+---------+ | age | doubleAge | ddAge | |-------+-------------+---------| | 32 | 64 | 128 | | 36 | 72 | 144 | | 28 | 56 | 112 | | 33 | 66 | 132 | +-------+-------------+---------+
前提条件: a、b、c は table 内の既存のフィールドです
その他の例
-
source = table | eval f = 1 | fields a,b,c,f -
source = table | eval f = 1(出力 a、b、c、f フィールド) -
source = table | eval n = now() | eval t = unix_timestamp(a) | fields n,t -
source = table | eval f = a | where f > 1 | sort f | fields a,b,c | head 5 -
source = table | eval f = a * 2 | eval h = f * 2 | fields a,f,h -
source = table | eval f = a * 2, h = f * 2 | fields a,f,h -
source = table | eval f = a * 2, h = b | stats avg(f) by h -
source = table | eval f = ispresent(a) -
source = table | eval r = coalesce(a, b, c) | fields r -
source = table | eval e = isempty(a) | fields e -
source = table | eval e = isblank(a) | fields e -
source = table | eval f = case(a = 0, 'zero', a = 1, 'one', a = 2, 'two', a = 3, 'three', a = 4, 'four', a = 5, 'five', a = 6, 'six', a = 7, 'se7en', a = 8, 'eight', a = 9, 'nine') -
source = table | eval f = case(a = 0, 'zero', a = 1, 'one' else 'unknown') -
source = table | eval f = case(a = 0, 'zero', a = 1, 'one' else concat(a, ' is an incorrect binary digit')) -
source = table | eval f = a in ('foo', 'bar') | fields f -
source = table | eval f = a not in ('foo', 'bar') | fields f
ケース例を使用した評価:
source = table | eval e = eval status_category = case(a >= 200 AND a < 300, 'Success', a >= 300 AND a < 400, 'Redirection', a >= 400 AND a < 500, 'Client Error', a >= 500, 'Server Error' else 'Unknown')
別のケースでの評価の例:
前提条件: a、b、c は table 内の既存のフィールドです
その他の例
-
source = table | eval f = 1 | fields a,b,c,f -
source = table | eval f = 1(出力 a、b、c、f フィールド) -
source = table | eval n = now() | eval t = unix_timestamp(a) | fields n,t -
source = table | eval f = a | where f > 1 | sort f | fields a,b,c | head 5 -
source = table | eval f = a * 2 | eval h = f * 2 | fields a,f,h -
source = table | eval f = a * 2, h = f * 2 | fields a,f,h -
source = table | eval f = a * 2, h = b | stats avg(f) by h -
source = table | eval f = ispresent(a) -
source = table | eval r = coalesce(a, b, c) | fields r -
source = table | eval e = isempty(a) | fields e -
source = table | eval e = isblank(a) | fields e -
source = table | eval f = case(a = 0, 'zero', a = 1, 'one', a = 2, 'two', a = 3, 'three', a = 4, 'four', a = 5, 'five', a = 6, 'six', a = 7, 'se7en', a = 8, 'eight', a = 9, 'nine') -
source = table | eval f = case(a = 0, 'zero', a = 1, 'one' else 'unknown') -
source = table | eval f = case(a = 0, 'zero', a = 1, 'one' else concat(a, ' is an incorrect binary digit')) -
source = table | eval f = a in ('foo', 'bar') | fields f -
source = table | eval f = a not in ('foo', 'bar') | fields f
ケース例を使用した評価:
source = table | eval e = eval status_category = case(a >= 200 AND a < 300, 'Success', a >= 300 AND a < 400, 'Redirection', a >= 400 AND a < 500, 'Client Error', a >= 500, 'Server Error' else 'Unknown')
別のケースでの評価の例:
source = table | where ispresent(a) | eval status_category = case(a >= 200 AND a < 300, 'Success', a >= 300 AND a < 400, 'Redirection', a >= 400 AND a < 500, 'Client Error', a >= 500, 'Server Error' else 'Incorrect HTTP status code' ) | stats count() by status_category
制限
-
既存のフィールドの上書きはサポートされていません。そのような操作を試みるクエリは、「参照 'a' が曖昧です」というメッセージで例外をスローします。
- `source = table | eval a = 10 | fields a,b,c` - `source = table | eval a = a * 2 | stats avg(a)` - `source = table | eval a = abs(a) | where a > 0` - `source = table | eval a = signum(a) | where a < 0`
eventstats コマンド
注記
この PPL コマンドをサポートする AWS データソース統合を確認するには、「コマンド」を参照してください。
eventstats コマンドを使用して、計算されたサマリー統計でイベントデータを強化します。イベント内の指定されたフィールドを分析し、さまざまな統統計的指標を計算し、これらの結果を各元のイベントに新しいフィールドとして追加することで動作します。
eventstats の主な側面
-
結果セット全体または定義されたグループ内で計算を実行します。
-
元のイベントはそのまま残り、統計結果を含む新しいフィールドが追加されます。
-
コマンドは、比較分析、外れ値の特定、個々のイベントへの追加のコンテキストの提供に特に役立ちます。
統計と eventstats の違い
stats および eventstats コマンドはどちらも統計の計算に使用されますが、動作方法と生成内容にはいくつかの重要な違いがあります。
出力形式
-
stats: 計算された統計のみを含む概要テーブルを生成します。 -
eventstats: 計算された統計を既存のイベントに新しいフィールドとして追加し、元のデータを保持します。
イベント保持
-
stats: 結果セットを統計概要のみに減らし、個々のイベントを破棄します。 -
eventstats: 元のイベントをすべて保持し、計算された統計を含む新しいフィールドを追加します。
ユースケース
-
stats: 概要レポートまたはダッシュボードの作成に最適です。多くの場合、結果を要約するための最終コマンドとして使用されます。 -
eventstats: さらなる分析やフィルタリングのために統計コンテキストでイベントを補強する必要がある場合に役立ちます。検索中に使用して、後続のコマンドで使用できる統計を追加できます。
構文
次の構文を使用します。
eventstats <aggregation>... [by-clause]
集計
-
必須。
-
集計関数。
-
集計の引数はフィールドである必要があります。
句ごと
-
オプション。
-
構文:
by [span-expression,] [field,]... -
by 句には、スカラー関数や集計関数などのフィールドと式を含めることができます。span 句を使用して、特定のフィールドを同じ間隔のバケットに分割することもできます。その後、eventstats コマンドは、これらのスパンバケットに基づいて集計を実行します。
-
デフォルト: by 句を指定しない場合、eventstats コマンドは結果セット全体で集計されます。
span-expression
-
オプション、最大 1 つまで。
-
構文:
span(field_expr, interval_expr) -
間隔式の単位は、デフォルトでは自然単位です。ただし、日付と時刻タイプのフィールドでは、日付/時刻の単位を使用するときに間隔式で単位を指定する必要があります。
例えば、
ageフィールドを 10 年ごとにバケットに分割するには、span(age, 10)を使用します。時間ベースのフィールドでは、span(timestamp, 1h)を使用してtimestampフィールドを時間単位の間隔に分割できます。
| スパン間隔の単位 |
|---|
| ミリ秒 (ms) |
| 秒 (秒) |
| 分 (m、大文字と小文字を区別する) |
| 時間 (h) |
| 日 (d) |
| 週 (w) |
| 月 (M、大文字と小文字を区別する) |
| 四半期 (q) |
| 年 (y) |
集計関数
COUNT
COUNT は、SELECT ステートメントによって取得された行の expr の数をカウントして返します。
CloudWatch Logs では、COUNT はサポートされません。
例:
os> source=accounts | eventstats count(); fetched rows / total rows = 4/4 +----------------+----------+-----------+----------+-----+--------+--------------------+------------+--------------------------+--------+-------+---------+ | account_number | balance | firstname | lastname | age | gender | address | employer | email | city | state | count() | +----------------+----------+-----------+----------+-----+--------+--------------------+------------+--------------------------+--------+-------+---------+ | 1 | 39225 | Jane | Doe | 32 | M | *** Any Lane | AnyCorp | janedoe@anycorp.com | Brogan | IL | 4 | | 6 | 5686 | Mary | Major | 36 | M | 671 Example Street | AnyCompany | marymajor@anycompany.com | Dante | TN | 4 | | 13 | 32838 | Nikki | Wolf | 28 | F | 789 Any Street | AnyOrg | | Nogal | VA | 4 | | 18 | 4180 | Juan | Li | 33 | M | *** Example Court | | juanli@exampleorg.com | Orick | MD | 4 | +----------------+----------+-----------+----------+-----+--------+--------------------+------------+--------------------------+--------+-------+---------+
SUM
SUM(expr) は expr の合計を返します。
例:
os> source=accounts | eventstats sum(age) by gender; fetched rows / total rows = 4/4 +----------------+----------+-----------+----------+-----+--------+-----------------------+------------+--------------------------+--------+-------+--------------------+ | account_number | balance | firstname | lastname | age | gender | address | employer | email | city | state | sum(age) by gender | +----------------+----------+-----------+----------+-----+--------+-----------------------+------------+--------------------------+--------+-------+--------------------+ | 1 | 39225 | Jane | Doe | 32 | M | 880 Any Lane | AnyCorp | janedoe@anycorp.com | Brogan | IL | 101 | | 6 | 5686 | Mary | Major | 36 | M | 671 Example Street | AnyCompany | marymajor@anycompany.com | Dante | TN | 101 | | 13 | 32838 | Nikki | Wolf | 28 | F | 789 Any Street | AnyOrg | | Nogal | VA | 28 | | 18 | 4180 | Juan | Li | 33 | M | 467 Example Court | | juanli@exampleorg.com | Orick | MD | 101 | +----------------+----------+-----------+----------+-----+--------+-----------------------+------------+--------------------------+--------+-------+--------------------+
AVG
AVG(expr) は expr の平均値を返します。
例:
os> source=accounts | eventstats avg(age) by gender; fetched rows / total rows = 4/4 +----------------+----------+-----------+----------+-----+--------+-----------------------+------------+---------------------------+--------+-------+--------------------+ | account_number | balance | firstname | lastname | age | gender | address | employer | email | city | state | avg(age) by gender | +----------------+----------+-----------+----------+-----+--------+-----------------------+------------+---------------------------+--------+-------+--------------------+ | 1 | 39225 | Jane | Doe | 32 | M | 880 Any Lane | AnyCorp | janedoe@anycorp.com | Brogan | IL | 33.67 | | 6 | 5686 | Mary | Major | 36 | M | 671 Example Street | Any Company | marymajor@anycompany.com | Dante | TN | 33.67 | | 13 | 32838 | Nikki | Wolf | 28 | F | 789 Any Street | AnyOrg | | Nogal | VA | 28.00 | | 18 | 4180 | Juan | Li | 33 | M | 467 Example Court | | juanli@exampleorg.com | Orick | MD | 33.67 | +----------------+----------+-----------+----------+-----+--------+-----------------------+-------------+--------------------------+--------+-------+--------------------+
MAX
MAX(expr) は expr の最大値を返します。
例
os> source=accounts | eventstats max(age); fetched rows / total rows = 4/4 +----------------+----------+-----------+----------+-----+--------+-----------------------+-------------+--------------------------+--------+-------+-----------+ | account_number | balance | firstname | lastname | age | gender | address | employer | email | city | state | max(age) | +----------------+----------+-----------+----------+-----+--------+-----------------------+-------------+--------------------------+--------+-------+-----------+ | 1 | 39225 | Jane | Doe | 32 | M | 880 Any Lane | AnyCorp | janedoe@anycorp.com | Brogan | IL | 36 | | 6 | 5686 | Mary | Major | 36 | M | 671 Example Street | Any Company | marymajor@anycompany.com | Dante | TN | 36 | | 13 | 32838 | Nikki | Wolf | 28 | F | 789 Any Street | AnyOrg | | Nogal | VA | 36 | | 18 | 4180 | Juan | Li | 33 | M | *** Example Court | | juanli@exampleorg.com | Orick | MD | 36 | +----------------+----------+-----------+----------+-----+--------+-----------------------+-------------+--------------------------+--------+-------+-----------+
MIN
MIN(expr) は expr の最小値を返します。
例
os> source=accounts | eventstats min(age); fetched rows / total rows = 4/4 +----------------+----------+-----------+----------+-----+--------+-----------------------+-------------+--------------------------+--------+-------+-----------+ | account_number | balance | firstname | lastname | age | gender | address | employer | email | city | state | min(age) | +----------------+----------+-----------+----------+-----+--------+-----------------------+-------------+--------------------------+--------+-------+-----------+ | 1 | 39225 | Jane | Doe | 32 | M | 880 Any Lane | AnyCorp | janedoe@anycorp.com | Brogan | IL | 28 | | 6 | 5686 | Mary | Major | 36 | M | 671 Example Street | Any Company | marymajor@anycompany.com | Dante | TN | 28 | | 13 | 32838 | Nikki | Wolf | 28 | F | *** Any Street | AnyOrg | | Nogal | VA | 28 | | 18 | 4180 | Juan | Li | 33 | M | *** Example Court | | juanli@exampleorg.com | Orick | MD | 28 | +----------------+----------+-----------+----------+-----+--------+-----------------------+-------------+--------------------------+--------+-------+-----------+
STDDEV_SAMP
STDDEV_SAMP(expr) は expr のサンプル標準偏差を返します。
例
os> source=accounts | eventstats stddev_samp(age); fetched rows / total rows = 4/4 +----------------+----------+-----------+----------+-----+--------+-----------------------+-------------+--------------------------+--------+-------+------------------------+ | account_number | balance | firstname | lastname | age | gender | address | employer | email | city | state | stddev_samp(age) | +----------------+----------+-----------+----------+-----+--------+-----------------------+-------------+--------------------------+--------+-------+------------------------+ | 1 | 39225 | Jane | Doe | 32 | M | *** Any Lane | AnyCorp | janedoe@anycorp.com | Brogan | IL | 3.304037933599835 | | 6 | 5686 | Mary | Major | 36 | M | 671 Example Street | Any Company | marymajor@anycompany.com | Dante | TN | 3.304037933599835 | | 13 | 32838 | Nikki | Wolf | 28 | F | 789 Any Street | AnyOrg | | Nogal | VA | 3.304037933599835 | | 18 | 4180 | Juan | Li | 33 | M | 467 Example Court | | juanli@exampleorg.com | Orick | MD | 3.304037933599835 | +----------------+----------+-----------+----------+-----+--------+-----------------------+-------------+--------------------------+--------+-------+------------------------+
STDDEV_POP
STDDEV_POP(expr) は expr の母集団標準偏差を返します。
例
os> source=accounts | eventstats stddev_pop(age); fetched rows / total rows = 4/4 +----------------+----------+-----------+----------+-----+--------+-----------------------+-------------+--------------------------+--------+-------+------------------------+ | account_number | balance | firstname | lastname | age | gender | address | employer | email | city | state | stddev_pop(age) | +----------------+----------+-----------+----------+-----+--------+-----------------------+-------------+--------------------------+--------+-------+------------------------+ | 1 | 39225 | Jane | Doe | 32 | M | 880 Any Lane | AnyCorp | janedoe@anycorp.com | Brogan | IL | 2.**************** | | 6 | 5686 | Mary | Major | 36 | M | *** Example Street | Any Company | marymajor@anycompany.com | Dante | TN | 2.**************** | | 13 | 32838 | Nikki | Wolf | 28 | F | *** Any Street | AnyOrg | | Nogal | VA | 2.**************** | | 18 | 4180 | Juan | Li | 33 | M | *** Example Court | | juanli@exampleorg.com | Orick | MD | 2.**************** | +----------------+----------+-----------+----------+-----+--------+-----------------------+-------------+--------------------------+--------+-------+------------------------+
PERCENTILE または PERCENTILE_APPROX
PERCENTILE(expr, percent) または PERCENTILE_APPROX(expr, percent) は expr の近似パーセンタイル値を指定されたパーセンテージで返します。
パーセント
-
数値は 0~100 の定数である必要があります。
例
os> source=accounts | eventstats percentile(age, 90) by gender; fetched rows / total rows = 4/4 +----------------+----------+-----------+----------+-----+--------+-----------------------+-------------+--------------------------+--------+-------+--------------------------------+ | account_number | balance | firstname | lastname | age | gender | address | employer | email | city | state | percentile(age, 90) by gender | +----------------+----------+-----------+----------+-----+--------+-----------------------+-------------+--------------------------+--------+-------+--------------------------------+ | 1 | 39225 | Jane | Doe | 32 | M | *** Any Lane | AnyCorp | janedoe@anycorp.com | Brogan | IL | 36 | | 6 | 5686 | Mary | Major | 36 | M | 671 Example Street | Any Company | marymajor@anycompany.com | Dante | TN | 36 | | 13 | 32838 | Nikki | Wolf | 28 | F | 789 Any Street | AnyOrg | | Nogal | VA | 28 | | 18 | 4180 | Juan | Li | 33 | M | *** Example Court | | juanli@exampleorg.com | Orick | MD | 36 | +----------------+----------+-----------+----------+-----+--------+-----------------------+-------------+--------------------------+--------+-------+--------------------------------+
例 1: フィールドの平均、合計、数をグループごとに計算する
この例では、性別ごとにグループ分けした全アカウントの平均年齢、年齢の合計、およびイベント数を算出します。
os> source=accounts | eventstats avg(age) as avg_age, sum(age) as sum_age, count() as count by gender; fetched rows / total rows = 4/4 +----------------+----------+-----------+----------+-----+--------+-----------------------+-------------+--------------------------+--------+-------+-----------+-----------+-------+ | account_number | balance | firstname | lastname | age | gender | address | employer | email | city | state | avg_age | sum_age | count | +----------------+----------+-----------+----------+-----+--------+-----------------------+-------------+--------------------------+--------+-------+-----------+-----------+-------+ | 1 | 39225 | Jane | Doe | 32 | M | *** Any Lane | AnyCorp | janedoe@anycorp.com | Brogan | IL | 33.666667 | 101 | 3 | | 6 | 5686 | Mary | Major | 36 | M | 671 Example Street | Any Company | marymajor@anycompany.com | Dante | TN | 33.666667 | 101 | 3 | | 13 | 32838 | Nikki | Wolf | 28 | F | 789 Any Street | AnyOrg | | Nogal | VA | 28.000000 | 28 | 1 | | 18 | 4180 | Juan | Li | 33 | M | *** Example Court | | juanli@exampleorg.com | Orick | MD | 33.666667 | 101 | 3 | +----------------+----------+-----------+----------+-----+--------+-----------------------+-------------+--------------------------+--------+-------+-----------+-----------+-------+
例 2: スパンごとにカウントを計算する
この例では、年齢を 10 年間隔でカウントして集計します。
os> source=accounts | eventstats count(age) by span(age, 10) as age_span fetched rows / total rows = 4/4 +----------------+----------+-----------+----------+-----+--------+-----------------------+-------------+--------------------------+--------+-------+----------+ | account_number | balance | firstname | lastname | age | gender | address | employer | email | city | state | age_span | +----------------+----------+-----------+----------+-----+--------+-----------------------+-------------+--------------------------+--------+-------+----------+ | 1 | 39225 | Jane | Doe | 32 | M | *** Any Lane | AnyCorp | janedoe@anycorp.com | Brogan | IL | 3 | | 6 | 5686 | Mary | Major | 36 | M | 671 Example Street | Any Company | marymajor@anycompany.com | Dante | TN | 3 | | 13 | 32838 | Nikki | Wolf | 28 | F | 789 Any Street | AnyOrg | | Nogal | VA | 1 | | 18 | 4180 | Juan | Li | 33 | M | *** Example Court | | juanli@exampleorg.com | Orick | MD | 3 | +----------------+----------+-----------+----------+-----+--------+-----------------------+-------------+--------------------------+--------+-------+----------+
例 3: 性別とスパンごとにカウントを計算する
この例では、年齢のカウントを 5 年間隔で集計し、性別ごとにグループ化します。
os> source=accounts | eventstats count() as cnt by span(age, 5) as age_span, gender fetched rows / total rows = 4/4 +----------------+----------+-----------+----------+-----+--------+-----------------------+-------------+---------------------------+--------+-------+-----+ | account_number | balance | firstname | lastname | age | gender | address | employer | email | city | state | cnt | +----------------+----------+-----------+----------+-----+--------+-----------------------+-------------+---------------------------+--------+-------+-----+ | 1 | 39225 | Jane | Doe | 32 | M | *** Any Lane | AnyCorp | janedoe@anycorp.com | Brogan | IL | 2 | | 6 | 5686 | Mary | Majo | 36 | M | 671 Example Street | Any Company | hattiebond@anycompany.com | Dante | TN | 1 | | 13 | 32838 | Nikki | Wolf | 28 | F | *** Any Street | AnyOrg | | Nogal | VA | 1 | | 18 | 4180 | Juan | Li | 33 | M | *** Example Court | | juanli@exampleorg.com | Orick | MD | 2 | +----------------+----------+-----------+----------+-----+--------+-----------------------+-------------+---------------------------+--------+-------+-----+
使用
-
source = table | eventstats avg(a) -
source = table | where a < 50 | eventstats avg(c) -
source = table | eventstats max(c) by b -
source = table | eventstats count(c) by b | head 5 -
source = table | eventstats distinct_count(c) -
source = table | eventstats stddev_samp(c) -
source = table | eventstats stddev_pop(c) -
source = table | eventstats percentile(c, 90) -
source = table | eventstats percentile_approx(c, 99)
スパンによる集計
-
source = table | eventstats count(a) by span(a, 10) as a_span -
source = table | eventstats sum(age) by span(age, 5) as age_span | head 2 -
source = table | eventstats avg(age) by span(age, 20) as age_span, country | sort - age_span | head 2
時間枠スパンによる集計 (タンブルウィンドウ関数)
-
source = table | eventstats sum(productsAmount) by span(transactionDate, 1d) as age_date | sort age_date -
source = table | eventstats sum(productsAmount) by span(transactionDate, 1w) as age_date, productId
複数のレベルによる集計グループ
-
source = table | eventstats avg(age) as avg_state_age by country, state | eventstats avg(avg_state_age) as avg_country_age by country -
source = table | eventstats avg(age) as avg_city_age by country, state, city | eval new_avg_city_age = avg_city_age - 1 | eventstats avg(new_avg_city_age) as avg_state_age by country, state | where avg_state_age > 18 | eventstats avg(avg_state_age) as avg_adult_country_age by country
拡張コマンド
注記
この PPL コマンドをサポートする AWS データソース統合を確認するには、「コマンド」を参照してください。
expand コマンドを使用して、次の型のフィールドをフラット化します:
-
Array<Any> -
Map<Any>
構文
次の構文を使用します。
expand <field> [As alias]
field
-
拡張 (展開) するフィールド。サポートされているタイプである必要があります。
alias
-
オプション。元のフィールド名の代わりに使用される名前。
使用
expand コマンドは、指定された配列またはマップフィールド内の各要素の行を生成します。ここでは、
-
配列要素は個々の行になります。
-
マップキーと値のペアは別々の行に分割され、各キーと値は行として表されます。
-
エイリアスを指定すると、展開された値は元のフィールド名ではなくエイリアスで表されます。
-
これは、
stats、eval、parseなどの他のコマンドと組み合わせて使用して、拡張後のデータを操作または抽出できます。
例
-
source = table | expand employee | stats max(salary) as max by state, company -
source = table | expand employee as worker | stats max(salary) as max by state, company -
source = table | expand employee as worker | eval bonus = salary * 3 | fields worker, bonus -
source = table | expand employee | parse description '(?<email>.+@.+)' | fields employee, email -
source = table | eval array=json_array(1, 2, 3) | expand array as uid | fields name, occupation, uid -
source = table | expand multi_valueA as multiA | expand multi_valueB as multiB
explain コマンド
注記
この PPL コマンドをサポートする AWS データソース統合を確認するには、「コマンド」を参照してください。
explain コマンドを使用すると、クエリ実行プランを理解し、クエリを分析して最適化してパフォーマンスを向上させることができます。この概要では、explain コマンドの目的とクエリの最適化における重要性について簡潔に説明します。
コメント
-
source=accounts | top gender // finds most common gender of all the accounts(行コメント) -
source=accounts | dedup 2 gender /* dedup the document with gender field keep 2 duplication */ | fields account_number, gender(ブロックコメント)
説明
-
describe tableこのコマンドはDESCRIBE EXTENDED tableSQL コマンドと同等です -
describe schema.table -
describe schema.`table` -
describe catalog.schema.table -
describe catalog.schema.`table` -
describe `catalog`.`schema`.`table`
Explain (説明する)
-
explain simple | source = table | where a = 1 | fields a,b,c -
explain extended | source = table -
explain codegen | source = table | dedup a | fields a,b,c -
explain cost | source = table | sort a | fields a,b,c -
explain formatted | source = table | fields - a -
explain simple | describe table
フィールド
-
source = table -
source = table | fields a,b,c -
source = table | fields + a,b,c -
source = table | fields - b,c -
source = table | eval b1 = b | fields - b1,c
フィールドの概要
-
source = t | fieldsummary includefields=status_code nulls=false -
source = t | fieldsummary includefields= id, status_code, request_path nulls=true -
source = t | where status_code != 200 | fieldsummary includefields= status_code nulls=true
ネスト化されたフィールド
-
source = catalog.schema.table1, catalog.schema.table2 | fields A.nested1, B.nested1 -
source = catalog.table | where struct_col2.field1.subfield > 'valueA' | sort int_col | fields int_col, struct_col.field1.subfield, struct_col2.field1.subfield -
source = catalog.schema.table | where struct_col2.field1.subfield > 'valueA' | sort int_col | fields int_col, struct_col.field1.subfield, struct_col2.field1.subfield
フィルタ
-
source = table | where a = 1 | fields a,b,c -
source = table | where a >= 1 | fields a,b,c -
source = table | where a < 1 | fields a,b,c -
source = table | where b != 'test' | fields a,b,c -
source = table | where c = 'test' | fields a,b,c | head 3 -
source = table | where ispresent(b) -
source = table | where isnull(coalesce(a, b)) | fields a,b,c | head 3 -
source = table | where isempty(a) -
source = table | where isblank(a) -
source = table | where case(length(a) > 6, 'True' else 'False') = 'True' -
source = table | where a not in (1, 2, 3) | fields a,b,c -
source = table | where a between 1 and 4– 注意: これは a >= 1 と a <= 4 を返します。つまり範囲は [1, 4] です。 -
source = table | where b not between '2024-09-10' and '2025-09-10'– 注: これは b >= '**********' と b <= '2025-09-10' を返します。 -
source = table | where cidrmatch(ip, '***********/24') -
source = table | where cidrmatch(ipv6, '2003:db8::/32') -
source = table | trendline sma(2, temperature) as temp_trend
IP 関連のクエリ
-
source = table | where cidrmatch(ip, '**************') -
source = table | where isV6 = false and isValid = true and cidrmatch(ipAddress, '**************') -
source = table | where isV6 = true | eval inRange = case(cidrmatch(ipAddress, '2003:***::/32'), 'in' else 'out') | fields ip, inRange
複雑なフィルター
source = table | eval status_category = case(a >= 200 AND a < 300, 'Success', a >= 300 AND a < 400, 'Redirection', a >= 400 AND a < 500, 'Client Error', a >= 500, 'Server Error' else 'Incorrect HTTP status code') | where case(a >= 200 AND a < 300, 'Success', a >= 300 AND a < 400, 'Redirection', a >= 400 AND a < 500, 'Client Error', a >= 500, 'Server Error' else 'Incorrect HTTP status code' ) = 'Incorrect HTTP status code'
source = table | eval factor = case(a > 15, a - 14, isnull(b), a - 7, a < 3, a + 1 else 1) | where case(factor = 2, 'even', factor = 4, 'even', factor = 6, 'even', factor = 8, 'even' else 'odd') = 'even' | stats count() by factor
論理条件を使用したフィルター
-
source = table | where c = 'test' AND a = 1 | fields a,b,c -
source = table | where c != 'test' OR a > 1 | fields a,b,c | head 1 -
source = table | where c = 'test' NOT a > 1 | fields a,b,c
評価
前提条件: a、b、c は table 内の既存のフィールドです
-
source = table | eval f = 1 | fields a,b,c,f -
source = table | eval f = 1(出力 a、b、c、f フィールド) -
source = table | eval n = now() | eval t = unix_timestamp(a) | fields n,t -
source = table | eval f = a | where f > 1 | sort f | fields a,b,c | head 5 -
source = table | eval f = a * 2 | eval h = f * 2 | fields a,f,h -
source = table | eval f = a * 2, h = f * 2 | fields a,f,h -
source = table | eval f = a * 2, h = b | stats avg(f) by h -
source = table | eval f = ispresent(a) -
source = table | eval r = coalesce(a, b, c) | fields r -
source = table | eval e = isempty(a) | fields e -
source = table | eval e = isblank(a) | fields e -
source = table | eval f = case(a = 0, 'zero', a = 1, 'one', a = 2, 'two', a = 3, 'three', a = 4, 'four', a = 5, 'five', a = 6, 'six', a = 7, 'se7en', a = 8, 'eight', a = 9, 'nine') -
source = table | eval f = case(a = 0, 'zero', a = 1, 'one' else 'unknown') -
source = table | eval f = case(a = 0, 'zero', a = 1, 'one' else concat(a, ' is an incorrect binary digit')) -
source = table | eval digest = md5(fieldName) | fields digest -
source = table | eval digest = sha1(fieldName) | fields digest -
source = table | eval digest = sha2(fieldName,256) | fields digest -
source = table | eval digest = sha2(fieldName,512) | fields digest
fillnull コマンド
注記
この PPL コマンドをサポートする AWS データソース統合を確認するには、「コマンド」を参照してください。
説明
fillnull コマンドを使用して、null 値を検索結果の 1 つ以上のフィールド内の指定した値に置き換えます。
構文
次の構文を使用します。
fillnull [with <null-replacement> in <nullable-field>["," <nullable-field>]] | [using <source-field> = <null-replacement> [","<source-field> = <null-replacement>]]
-
null-replacement: 必須。null 値を置き換えるために使用される値。
-
nullable-field: 必須。フィールドリファレンス。このフィールドの null 値は、null 置換で指定された値に置き換えられます。
例 1: Fillnull 1 フィールド
この例では、単一のフィールドで fillnull を使用する方法を示しています。
os> source=logs | fields status_code | eval input=status_code | fillnull with 0 in status_code; | input | status_code | |-------|-------------| | 403 | 403 | | 403 | 403 | | NULL | 0 | | NULL | 0 | | 200 | 200 | | 404 | 404 | | 500 | 500 | | NULL | 0 | | 500 | 500 | | 404 | 404 | | 200 | 200 | | 500 | 500 | | NULL | 0 | | NULL | 0 | | 404 | 404 |
例 2: 複数のフィールドに適用される Fillnull
この例では、複数のフィールドに適用された fillnull を示しています。
os> source=logs | fields request_path, timestamp | eval input_request_path=request_path, input_timestamp = timestamp | fillnull with '???' in request_path, timestamp; | input_request_path | input_timestamp | request_path | timestamp | |------------------------------------------------------------------------------------| | /contact | NULL | /contact | ??? | | /home | NULL | /home | ??? | | /about | 2023-10-01 10:30:00 | /about | 2023-10-01 10:30:00 | | /home | 2023-10-01 10:15:00 | /home | 2023-10-01 10:15:00 | | NULL | 2023-10-01 10:20:00 | ??? | 2023-10-01 10:20:00 | | NULL | 2023-10-01 11:05:00 | ??? | 2023-10-01 11:05:00 | | /about | NULL | /about | ??? | | /home | 2023-10-01 10:00:00 | /home | 2023-10-01 10:00:00 | | /contact | NULL | /contact | ??? | | NULL | 2023-10-01 10:05:00 | ??? | 2023-10-01 10:05:00 | | NULL | 2023-10-01 10:50:00 | ??? | 2023-10-01 10:50:00 | | /services | NULL | /services | ??? | | /home | 2023-10-01 10:45:00 | /home | 2023-10-01 10:45:00 | | /services | 2023-10-01 11:00:00 | /services | 2023-10-01 11:00:00 | | NULL | 2023-10-01 10:35:00 | ??? | 2023-10-01 10:35:00 |
例 3: Fillnull は、さまざまな null 置換値を持つ複数のフィールドに適用されます。
この例では、null を置き換えるために使用されるさまざまな値を持つ fillnull を示しています。
-
request_pathフィールドの/error -
timestampフィールドの1970-01-01 00:00:00
os> source=logs | fields request_path, timestamp | eval input_request_path=request_path, input_timestamp = timestamp | fillnull using request_path = '/error', timestamp='1970-01-01 00:00:00'; | input_request_path | input_timestamp | request_path | timestamp | |------------------------------------------------------------------------------------| | /contact | NULL | /contact | 1970-01-01 00:00:00 | | /home | NULL | /home | 1970-01-01 00:00:00 | | /about | 2023-10-01 10:30:00 | /about | 2023-10-01 10:30:00 | | /home | 2023-10-01 10:15:00 | /home | 2023-10-01 10:15:00 | | NULL | 2023-10-01 10:20:00 | /error | 2023-10-01 10:20:00 | | NULL | 2023-10-01 11:05:00 | /error | 2023-10-01 11:05:00 | | /about | NULL | /about | 1970-01-01 00:00:00 | | /home | 2023-10-01 10:00:00 | /home | 2023-10-01 10:00:00 | | /contact | NULL | /contact | 1970-01-01 00:00:00 | | NULL | 2023-10-01 10:05:00 | /error | 2023-10-01 10:05:00 | | NULL | 2023-10-01 10:50:00 | /error | 2023-10-01 10:50:00 | | /services | NULL | /services | 1970-01-01 00:00:00 | | /home | 2023-10-01 10:45:00 | /home | 2023-10-01 10:45:00 | | /services | 2023-10-01 11:00:00 | /services | 2023-10-01 11:00:00 | | NULL | 2023-10-01 10:35:00 | /error | 2023-10-01 10:35:00 |
fields コマンド
注記
この PPL コマンドをサポートする AWS データソース統合を確認するには、「コマンド」を参照してください。
fields コマンドを使用して、検索結果のフィールドを保持または削除します。
構文
次の構文を使用します。
field [+|-] <field-list>
-
index: オプション。プラス (+) を使用すると、フィールドリストで指定されたフィールドのみが保持されます。
マイナス (-) を使用すると、フィールドリストで指定されたすべてのフィールドが削除されます。
デフォルト –
-
field list: 必須。保持または削除するフィールドのカンマ区切りリスト。
例 1: 結果から指定されたフィールドを選択する
この例では、検索結果から account_number、firstname、および lastname フィールドを取得する方法を示します。
PPL クエリ:
os> source=accounts | fields account_number, firstname, lastname; fetched rows / total rows = 4/4 +------------------+-------------+------------+ | account_number | firstname | lastname | |------------------+-------------+------------| | 1 | Jane | Doe | | 6 | John | Doe | | 13 | Jorge | Souza | | 18 | Juan | Li | +------------------+-------------+------------+
例 2: 指定されたフィールドを結果から削除する
この例では、検索結果から account_number フィールドを削除する方法を示します。
PPL クエリ:
os> source=accounts | fields account_number, firstname, lastname | fields - account_number ; fetched rows / total rows = 4/4 +-------------+------------+ | firstname | lastname | |-------------+------------| | Jane | Doe | | John | Doe | | Jorge | Souza | | Juan | Li | +-------------+------------+
その他の例
-
source = table -
source = table | fields a,b,c -
source = table | fields + a,b,c -
source = table | fields - b,c -
source = table | eval b1 = b | fields - b1,c
ネスト化フィールドの例:
`source = catalog.schema.table1, catalog.schema.table2 | fields A.nested1, B.nested1` `source = catalog.table | where struct_col2.field1.subfield > 'valueA' | sort int_col | fields int_col, struct_col.field1.subfield, struct_col2.field1.subfield` `source = catalog.schema.table | where struct_col2.field1.subfield > 'valueA' | sort int_col | fields int_col, struct_col.field1.subfield, struct_col2.field1.subfield`
flatten コマンド
注記
この PPL コマンドをサポートする AWS データソース統合を確認するには、「コマンド」を参照してください。
flatten コマンドを使用して、次のタイプのフィールドを展開します。
-
struct<?,?> -
array<struct<?,?>>
構文
次の構文を使用します。
flatten <field>
-
field: フラット化するフィールド。フィールドはサポートされているタイプである必要があります。
Schema
| col_name | data_type |
|---|---|
| _time | 文字列 |
| bridges | array<struct<length:bigint,name:string>> |
| city | 文字列 |
| coor | struct<alt:bigint,lat:double,long:double> |
| country | 文字列 |
[データ]
| _time | bridges | city | coor | country |
|---|---|---|---|---|
| 2024-09-13T12:00:00 | [{801、タワーブリッジ}, {928、ロンドン橋}] | ロンドン | {35, 51.5074, -0.1278} | 英国 |
| 2024-09-13T12:00:00 | [{232、ポンヌフ}, {160, アレクサンドル 3 世橋}] | パリ | {35, 48.8566, 2.3522} | フランス |
| 2024-09-13T12:00:00 | [{48、リアルト橋}, {11、ため息橋}] | ベネツィア | {2, 45.4408, 12.3155} | イタリア |
| 2024-09-13T12:00:00 | [{***、カレル橋}, {343、レギオン橋}] | プラハ | {200, 50.0755, 14.4378} | チェコ共和国 |
| 2024-09-13T12:00:00 | [{375、セーチェーニ鎖橋}, {333、自由橋}] | ブダペスト | {96, 47.4979, 19.0402} | ハンガリー |
| 1990-09-13T12:00:00 | NULL | ワルシャワ | NULL | ポーランド |
例 1: 構造体をフラット化する
この例では、構造体フィールドをフラット化する方法を示します。
PPL クエリ:
source=table | flatten coor
| _time | bridges | city | country | alt | lat | long |
|---|---|---|---|---|---|---|
| 2024-09-13T12:00:00 | [{801、タワーブリッジ}, {928、ロンドン橋}] | ロンドン | 英国 | 35 | 51.5074 | -0.1278 |
| 2024-09-13T12:00:00 | [{232、ポンヌフ}, {160, アレクサンドル 3 世橋}] | パリ | フランス | 35 | 48.8566 | 2.3522 |
| 2024-09-13T12:00:00 | [{48、リアルト橋}, {11、ため息橋}] | ベネツィア | イタリア | 2 | 45.4408 | 12.3155 |
| 2024-09-13T12:00:00 | [{516、カレル橋}、{343、レギオン橋}] | プラハ | チェコ共和国 | 200 | 50.0755 | 14.4378 |
| 2024-09-13T12:00:00 | [{375、セーチェーニ鎖橋}, {333、自由橋}] | ブダペスト | ハンガリー | 96 | 47.4979 | 19.0402 |
| 1990-09-13T12:00:00 | NULL | ワルシャワ | ポーランド | NULL | NULL | NULL |
例 2: 配列をフラット化する
この例では、構造体フィールドの配列をフラット化する方法を示しています。
PPL クエリ:
source=table | flatten bridges
| _time | city | coor | country | length | 名前 |
|---|---|---|---|---|---|
| 2024-09-13T12:00:00 | ロンドン | {35, 51.5074, -0.1278} | 英国 | 801 | タワーブリッジ |
| 2024-09-13T12:00:00 | ロンドン | {35, 51.5074, -0.1278} | 英国 | 928 | ロンドン橋 |
| 2024-09-13T12:00:00 | パリ | {35, 48.8566, 2.3522} | フランス | 232 | ポンヌフ |
| 2024-09-13T12:00:00 | パリ | {35, 48.8566, 2.3522} | フランス | 160 | アレクサンドル 3 世橋 |
| 2024-09-13T12:00:00 | ベネツィア | {2, 45.4408, 12.3155} | イタリア | 48 | リアルト橋 |
| 2024-09-13T12:00:00 | ベネツィア | {2, 45.4408, 12.3155} | イタリア | 11 | ため息橋 |
| 2024-09-13T12:00:00 | プラハ | {200, 50.0755, 14.4378} | チェコ共和国 | 516 | カレル橋 |
| 2024-09-13T12:00:00 | プラハ | {200, 50.0755, 14.4378} | チェコ共和国 | 343 | レギオン橋 |
| 2024-09-13T12:00:00 | ブダペスト | {96, 47.4979, 19.0402} | ハンガリー | 375 | セーチェーニ鎖橋 |
| 2024-09-13T12:00:00 | ブダペスト | {96, 47.4979, 19.0402} | ハンガリー | 333 | 自由橋 |
| 1990-09-13T12:00:00 | ワルシャワ | NULL | ポーランド | NULL | NULL |
例 3: 配列と構造体をフラット化する
この例では、複数のフィールドをフラット化する方法を示します。
PPL クエリ:
source=table | flatten bridges | flatten coor
| _time | city | country | length | 名前 | alt | lat | long |
|---|---|---|---|---|---|---|---|
| 2024-09-13T12:00:00 | ロンドン | 英国 | 801 | タワーブリッジ | 35 | 51.5074 | -0.1278 |
| 2024-09-13T12:00:00 | ロンドン | 英国 | 928 | ロンドン橋 | 35 | 51.5074 | -0.1278 |
| 2024-09-13T12:00:00 | パリ | フランス | 232 | ポンヌフ | 35 | 48.8566 | 2.3522 |
| 2024-09-13T12:00:00 | パリ | フランス | 160 | アレクサンドル 3 世橋 | 35 | 48.8566 | 2.3522 |
| 2024-09-13T12:00:00 | ベネツィア | イタリア | 48 | リアルト橋 | 2 | 45.4408 | 12.3155 |
| 2024-09-13T12:00:00 | ベネツィア | イタリア | 11 | ため息橋 | 2 | 45.4408 | 12.3155 |
| 2024-09-13T12:00:00 | プラハ | チェコ共和国 | 516 | カレル橋 | 200 | 50.0755 | 14.4378 |
| 2024-09-13T12:00:00 | プラハ | チェコ共和国 | 343 | レギオン橋 | 200 | 50.0755 | 14.4378 |
| 2024-09-13T12:00:00 | ブダペスト | ハンガリー | 375 | セーチェーニ鎖橋 | 96 | 47.4979 | 19.0402 |
| 2024-09-13T12:00:00 | ブダペスト | ハンガリー | 333 | 自由橋 | 96 | 47.4979 | 19.0402 |
| 1990-09-13T12:00:00 | ワルシャワ | ポーランド | NULL | NULL | NULL | NULL | NULL |
grok コマンド
注記
この PPL コマンドをサポートする AWS データソース統合を確認するには、「コマンド」を参照してください。
grok コマンドは、テキストフィールドを grok パターンで解析し、検索結果に結果を追加します。
構文
次の構文を使用します。
grok <field> <pattern>
field
-
必須。
-
フィールドはテキストフィールドである必要があります。
pattern
-
必須。
-
指定されたテキストフィールドから新しいフィールドを抽出するために使用される grok パターン。
-
新しいフィールド名が既に存在する場合、元のフィールドが置き換えられます。
Grok パターン
grok パターンは、各ドキュメントのテキストフィールドを照合して新しいフィールドを抽出するために使用されます。
例 1: 新しいフィールドを作成する
この例では、ドキュメントごとに新しいフィールド host を作成する方法を示します。host は email フィールドの @ の後に続くホスト名になります。null フィールドを解析すると、空の文字列が返されます。
os> source=accounts | grok email '.+@%{HOSTNAME:host}' | fields email, host ; fetched rows / total rows = 4/4 +-------------------------+-------------+ | email | host | |-------------------------+-------------| | jane_doe@example.com | example.com | | arnav_desai@example.net | example.net | | null | | | juan_li@example.org | example.org | +-------------------------+-------------+
例 2: 既存のフィールドを上書きする
この例では、既存の address フィールドを番地を除去した状態で上書きする方法を示します。
os> source=accounts | grok address '%{NUMBER} %{GREEDYDATA:address}' | fields address ; fetched rows / total rows = 4/4 +------------------+ | address | |------------------| | Example Lane | | Any Street | | Main Street | | Example Court | +------------------+
例 3: grok を使用してログを解析する
この例では、grok を使用して raw ログを解析する方法を示します。
os> source=apache | grok message '%{COMMONAPACHELOG}' | fields COMMONAPACHELOG, timestamp, response, bytes ; fetched rows / total rows = 4/4 +-----------------------------------------------------------------------------------------------------------------------------+----------------------------+------------+---------+ | COMMONAPACHELOG | timestamp | response | bytes | |-----------------------------------------------------------------------------------------------------------------------------+----------------------------+------------+---------| | 177.95.8.74 - upton5450 [28/Sep/2022:10:15:57 -0700] "HEAD /e-business/mindshare HTTP/1.0" 404 19927 | 28/Sep/2022:10:15:57 -0700 | 404 | 19927 | | 127.45.152.6 - pouros8756 [28/Sep/2022:10:15:57 -0700] "GET /architectures/convergence/niches/mindshare HTTP/1.0" 100 28722 | 28/Sep/2022:10:15:57 -0700 | 100 | 28722 | | *************** - - [28/Sep/2022:10:15:57 -0700] "PATCH /strategize/out-of-the-box HTTP/1.0" 401 27439 | 28/Sep/2022:10:15:57 -0700 | 401 | 27439 | | ************** - - [28/Sep/2022:10:15:57 -0700] "POST /users HTTP/1.1" 301 9481 | 28/Sep/2022:10:15:57 -0700 | 301 | 9481 | +-----------------------------------------------------------------------------------------------------------------------------+----------------------------+------------+---------+
制限
grok コマンドには、parse コマンドと同じ制限があります。
head コマンド
注記
この PPL コマンドをサポートする AWS データソース統合を確認するには、「コマンド」を参照してください。
head コマンドを使用して、オプションのオフセットの以降の指定された結果の最初の N 数を検索順序で返します。
構文
次の構文を使用します。
head [<size>] [from <offset>]
<size>
-
オプション整数
-
返される結果の数。
-
デフォルト: 10
<offset>
-
オプションの
fromの後の整数。 -
スキップする結果の数。
-
デフォルト: 0
例 1: 最初の 10 件の結果を取得する
この例では、アカウントインデックスから最大 10 件の結果を取得する方法を示します。
PPL クエリ:
os> source=accounts | fields firstname, age | head; fetched rows / total rows = 4/4 +-------------+-------+ | firstname | age | |-------------+-------| | Jane | 32 | | John | 36 | | Jorge | 28 | | Juan | 33 | +-------------+-------+
例 2: 最初の N の結果を取得する
この例では、アカウントインデックスの最初の N の結果を示しています。
PPL クエリ:
os> source=accounts | fields firstname, age | head 3; fetched rows / total rows = 3/3 +-------------+-------+ | firstname | age | |-------------+-------| | Jane | 32 | | John | 36 | | Jorge | 28 | +-------------+-------+
例 3: オフセット M の後に最初の N の結果を取得する
この例では、アカウントインデックスから M の結果をスキップした後に最初の N の結果を取得する方法を示します。
PPL クエリ:
os> source=accounts | fields firstname, age | head 3 from 1; fetched rows / total rows = 3/3 +-------------+-------+ | firstname | age | |-------------+-------| | John | 36 | | Jorge | 28 | | Juan | 33 | +-------------+-------+
join コマンド
注記
この PPL コマンドをサポートする AWS データソース統合を確認するには、「コマンド」を参照してください。
join コマンドを使用すると、共通フィールドに基づいて複数のソースからのデータを組み合わせることができ、複雑な分析を実行し、分散データセットからより深いインサイトを得ることができます。
スキーマ
otel-v1-apm-span-* (ラージ) と otel-v1-apm-service-map (スモール) の 2 つ以上のインデックスがあります。
インデックスの関連フィールド:
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
lookup コマンド
注記
この PPL コマンドをサポートする AWS データソース統合を確認するには、「コマンド」を参照してください。
lookup コマンドを使用して、ルックアップインデックス (ディメンションテーブル) からデータを追加または置換することで、検索データを充実させます。このコマンドを使用すると、ディメンションテーブルの値を使用してインデックスのフィールドを拡張できます。これを使用して、ルックアップ条件が満たされたときに値を追加または置き換えることもできます。lookup コマンドは、静的データセットを使用してソースデータを充実させる Join コマンドよりも適しています。
構文
次の構文を使用します。
SEARCH source=<sourceIndex> | <other piped command> | LOOKUP <lookupIndex> (<lookupMappingField> [AS <sourceMappingField>])... [(REPLACE | APPEND) (<inputField> [AS <outputField>])...] | <other piped command>
lookupIndex
-
必須。
-
ルックアップインデックスの名前 (ディメンションテーブル)。
lookupMappingField
-
必須。
-
ルックアップインデックス内のマッピングキーで、右側のテーブルにおける結合キーに相当します。フィールドはカンマで区切って、複数のフィールドを指定できます。
sourceMappingField
-
オプション。
-
デフォルト: <lookupMappingField>。
-
ソースクエリからのマッピングキーで、左側の結合キーに相当します。
inputField
-
オプション。
-
デフォルト: 一致した値が見つかったルックアップインデックスのすべてのフィールド。
-
一致した値が結果出力に適用されるルックアップインデックスのフィールド。フィールドはカンマで区切って、複数のフィールドを指定できます。
outputField
-
オプション。
-
デフォルト:
<inputField>。 -
出力内のフィールド。複数の出力フィールドを指定できます。ソースクエリから既存のフィールド名を指定した場合、その値は inputField の一致する値に置き換えられるか、追加されます。新しいフィールド名を指定すると、結果に追加されます。
REPLACE | APPEND
-
オプション。
-
デフォルト: REPLACE
-
一致した値を処理する方法を指定します。REPLACE を指定すると、<lookupIndex> フィールドの一致した値が結果の値を上書きします。
APPENDを指定した場合、<lookupIndex> フィールドの一致値は、結果の欠損値にのみ付加されます。
使用
-
LOOKUP <lookupIndex> id AS cid REPLACE mail AS email
-
LOOKUP <lookupIndex> name REPLACE mail AS email
-
LOOKUP <lookupIndex> id AS cid, name APPEND address, mail AS email
-
LOOKUP <lookupIndex> id
例
以下の例を参照してください。
SEARCH source=<sourceIndex> | WHERE orderType = 'Cancelled' | LOOKUP account_list, mkt_id AS mkt_code REPLACE amount, account_name AS name | STATS count(mkt_code), avg(amount) BY name
SEARCH source=<sourceIndex> | DEDUP market_id | EVAL category=replace(category, "-", ".") | EVAL category=ltrim(category, "dvp.") | LOOKUP bounce_category category AS category APPEND classification
SEARCH source=<sourceIndex> | LOOKUP bounce_category category
parse コマンド
parse コマンドは、テキストフィールドを正規表現で解析し、検索結果にその結果を追加します。
注記
この PPL コマンドをサポートする AWS データソース統合を確認するには、「コマンド」を参照してください。
構文
次の構文を使用します。
parse <field> <pattern>
field
-
必須。
-
フィールドはテキストフィールドである必要があります。
pattern
-
必須文字列。
-
これは、指定されたテキストフィールドから新しいフィールドを抽出するために使用される正規表現パターンです。
-
新しいフィールド名が既に存在する場合、元のフィールドが置き換えられます。
正規表現
正規表現パターンは、各ドキュメントのテキストフィールド全体を Java 正規表現エンジンと一致させるために使用されます。式内の各名前付きキャプチャグループは、新しい STRING フィールドになります。
例 1: 新しいフィールドを作成する
例では、ドキュメントごとに新しいフィールド host を作成する方法を示します。host は email フィールドの @ の後に続くホスト名になります。null フィールドを解析すると、空の文字列が返されます。
PPL クエリ:
os> source=accounts | parse email '.+@(?<host>.+)' | fields email, host ; fetched rows / total rows = 4/4 +-----------------------+-------------+ | email | host | |-----------------------+-------------| | jane_doe@example.com | example.com | | john_doe@example.net | example.net | | null | | | juan_li@example.org | example.org | +-----------------------+-------------+
例 2: 既存のフィールドを上書きする
例では、既存の address フィールドを番地を除去した状態で上書きする方法を示します。
PPL クエリ:
os> source=accounts | parse address '\d+ (?<address>.+)' | fields address ; fetched rows / total rows = 4/4 +------------------+ | address | |------------------| | Example Lane | | Example Street | | Example Avenue | | Example Court | +------------------+
例 3: キャスト解析フィールドでフィルタリングおよびソートする
この例では、address フィールド内の 500 より大きい番地番号を並べ替える方法を示しています。
PPL クエリ:
os> source=accounts | parse address '(?<streetNumber>\d+) (?<street>.+)' | where cast(streetNumber as int) > 500 | sort num(streetNumber) | fields streetNumber, street ; fetched rows / total rows = 3/3 +----------------+----------------+ | streetNumber | street | |----------------+----------------| | *** | Example Street | | *** | Example Avenue | | 880 | Example Lane | +----------------+----------------+
制限
parse コマンドにはいくつかの制限があります。
-
解析で定義されたフィールドは、再度解析することはできません。
次のコマンドは機能しません。
source=accounts | parse address '\d+ (?<street>.+)' | parse street '\w+ (?<road>\w+)' -
解析で定義されたフィールドを他のコマンドで上書きすることはできません。
streetは上書きできないため、whereはどのドキュメントにも一致しません。source=accounts | parse address '\d+ (?<street>.+)' | eval street='1' | where street='1' ; -
解析で使用されるテキストフィールドは上書きできません。
addressは上書きされるため、streetは正常に解析されません。source=accounts | parse address '\d+ (?<street>.+)' | eval address='1' ; -
解析で定義されたフィールドは、
statsコマンドで使用した後にフィルタリングまたはソートすることはできません。次のコマンドの
whereは機能しません:source=accounts | parse email '.+@(?<host>.+)' | stats avg(age) by host | where host=pyrami.com ;
patterns コマンド
注記
この PPL コマンドをサポートする AWS データソース統合を確認するには、「コマンド」を参照してください。
patterns コマンドは、テキストフィールドからログパターンを抽出し、検索結果に結果を追加します。パターン別にログをグループ化すると、大量のログデータから統計情報を集計し、分析やトラブルシューティングを行うことが容易になります。
構文
次の構文を使用します。
patterns [new_field=<new-field-name>] [pattern=<pattern>] <field>
new-field-name
-
オプション文字列
-
これは、抽出されたパターンの新しいフィールドの名前です。
-
デフォルトは
patterns_fieldです。 -
名前が既に存在する場合、元のフィールドが置き換えられます。
pattern
-
オプション文字列
-
これは、テキストフィールドから除外すべき文字列の正規表現パターンです。
-
存在しない場合、デフォルトのパターンは英数字 (
[a-zA-Z\d]) です。
field
-
必須。
-
フィールドはテキストフィールドである必要があります。
例 1: 新しいフィールドを作成する
この例では、ドキュメントごとに email で抽出句読点を使用する方法を示します。null フィールドを解析すると、空の文字列が返されます。
PPL クエリ:
os> source=accounts | patterns email | fields email, patterns_field ; fetched rows / total rows = 4/4 +-----------------------+------------------+ | email | patterns_field | |-----------------------+------------------| | jane_doe@example.com | @. | | john_doe@example.net | @. | | null | | | juan_li@example.org | @. | +-----------------------+------------------+
例 2: ログパターンを抽出する
この例では、デフォルトのパターンを使用して raw ログフィールドから句読点を抽出する方法を示します。
PPL クエリ:
os> source=apache | patterns message | fields message, patterns_field ; fetched rows / total rows = 4/4 +-----------------------------------------------------------------------------------------------------------------------------+---------------------------------+ | message | patterns_field | |-----------------------------------------------------------------------------------------------------------------------------+---------------------------------| | 177.95.8.74 - upton5450 [28/Sep/2022:10:15:57 -0700] "HEAD /e-business/mindshare HTTP/1.0" 404 19927 | ... - [//::: -] " /-/ /." | | ************ - pouros8756 [28/Sep/2022:10:15:57 -0700] "GET /architectures/convergence/niches/mindshare HTTP/1.0" 100 28722 | ... - [//::: -] " //// /." | | *************** - - [28/Sep/2022:10:15:57 -0700] "PATCH /strategize/out-of-the-box HTTP/1.0" 401 27439 | ... - - [//::: -] " //--- /." | | ************** - - [28/Sep/2022:10:15:57 -0700] "POST /users HTTP/1.1" 301 9481 | ... - - [//::: -] " / /." | +-----------------------------------------------------------------------------------------------------------------------------+---------------------------------+
例 3: カスタム正規表現パターンを使用してログパターンを抽出する
この例では、ユーザー定義パターンを使用して raw ログフィールドから句読点を抽出する方法を示します。
PPL クエリ:
os> source=apache | patterns new_field='no_numbers' pattern='[0-9]' message | fields message, no_numbers ; fetched rows / total rows = 4/4 +-----------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------------------------+ | message | no_numbers | |-----------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------------------------| | 177.95.8.74 - upton5450 [28/Sep/2022:10:15:57 -0700] "HEAD /e-business/mindshare HTTP/1.0" 404 19927 | ... - upton [/Sep/::: -] "HEAD /e-business/mindshare HTTP/." | | 127.45.152.6 - pouros8756 [28/Sep/2022:10:15:57 -0700] "GET /architectures/convergence/niches/mindshare HTTP/1.0" 100 28722 | ... - pouros [/Sep/::: -] "GET /architectures/convergence/niches/mindshare HTTP/." | | *************** - - [28/Sep/2022:10:15:57 -0700] "PATCH /strategize/out-of-the-box HTTP/1.0" 401 27439 | ... - - [/Sep/::: -] "PATCH /strategize/out-of-the-box HTTP/." | | ************** - - [28/Sep/2022:10:15:57 -0700] "POST /users HTTP/1.1" 301 9481 | ... - - [/Sep/::: -] "POST /users HTTP/." | +-----------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------------------------+
制限
patterns コマンドには、parse コマンドと同じ制限があります。
rare コマンド
注記
この PPL コマンドをサポートする AWS データソース統合を確認するには、「コマンド」を参照してください。
rare コマンドを使用して、フィールドリスト内のすべてのフィールドの値の最も一般的なタプルを見つけます。
注記
グループ別フィールドの値の個別のタプルごとに最大 10 個の結果が返されます。
構文
次の構文を使用します。
rare [N] <field-list> [by-clause] rare_approx [N] <field-list> [by-clause]
フィールドリスト
-
必須。
-
フィールド名のカンマ区切りリスト。
句ごと
-
オプション。
-
結果をグループ化する 1 つ以上のフィールド。
N
-
返される結果の数。
-
デフォルト: 10
rare_approx
-
HyperLogLog++ アルゴリズムによる推定基数
を使用した、希少な (n) フィールドの概算数。
例 1: フィールド内で最も出現頻度の低い値を検索する
この例では、すべてのアカウントの最も出現頻度の低い性別を検索します。
PPL クエリ:
os> source=accounts | rare gender; os> source=accounts | rare_approx 10 gender; os> source=accounts | rare_approx gender; fetched rows / total rows = 2/2 +----------+ | gender | |----------| | F | | M | +----------+
例 2: 性別ごとに整理された最も頻度の低い値を検索する
この例では、性別ごとにすべてのアカウントグループの最も出現頻度の低い年齢を抽出します。
PPL クエリ:
os> source=accounts | rare 5 age by gender; os> source=accounts | rare_approx 5 age by gender; fetched rows / total rows = 4/4 +----------+-------+ | gender | age | |----------+-------| | F | 28 | | M | 32 | | M | 33 | | M | 36 | +----------+-------+
rename コマンド
rename コマンドを使用して、検索結果の 1 つ以上のフィールドの名前を変更します。
注記
この PPL コマンドをサポートする AWS データソース統合を確認するには、「コマンド」を参照してください。
構文
次の構文を使用します。
rename <source-field> AS <target-field>["," <source-field> AS <target-field>]...
source-field
-
必須。
-
これは、名前を変更するフィールドの名前です。
target-field
-
必須。
-
これは、変更後の名前です。
例 1: 1 つのフィールドの名前を変更する
この例では、1 つのフィールドの名前を変更する方法を示します。
PPL クエリ:
os> source=accounts | rename account_number as an | fields an; fetched rows / total rows = 4/4 +------+ | an | |------| | 1 | | 6 | | 13 | | 18 | +------+
例 2: 複数のフィールドの名前を変更する
この例では、複数のフィールドの名前を変更する方法を示します。
PPL クエリ:
os> source=accounts | rename account_number as an, employer as emp | fields an, emp; fetched rows / total rows = 4/4 +------+---------+ | an | emp | |------+---------| | 1 | Pyrami | | 6 | Netagy | | 13 | Quility | | 18 | null | +------+---------+
制限
-
既存のフィールドの上書きはサポートされていません:
source=accounts | grok address '%{NUMBER} %{GREEDYDATA:address}' | fields address
search コマンド
注記
この PPL コマンドをサポートする AWS データソース統合を確認するには、「コマンド」を参照してください。
search コマンドを使用して、インデックスからドキュメントを取得します。search コマンドは、PPL クエリの最初のコマンドとしてのみ使用できます。
構文
次の構文を使用します。
search source=[<remote-cluster>:]<index> [boolean-expression]
検索
-
オプション。
-
検索キーワード (省略可能)
インデックス
-
必須。
-
検索コマンドは、クエリ元のインデックスを指定する必要があります。
-
インデックス名には、クラスター間検索用に
<cluster name>:をプレフィックスとして付けることができます。
ブール式
-
オプション。
-
ブール値に評価される任意の式
例 1: すべてのデータを取得する
この例では、アカウントインデックスからすべてのドキュメントを取得します。
PPL クエリ:
os> source=accounts; +------------------+-------------+----------------------+-----------+----------+--------+----------------+---------+-------+-----------------------+------------+ | account_number | firstname | address | balance | gender | city | employer | state | age | email | lastname | |------------------+-------------+----------------------+-----------+----------+--------+----------------+---------+-------+-----------------------+------------| | 1 | Jorge | *** Any Lane | 39225 | M | Brogan | ExampleCorp | IL | 32 | jane_doe@example.com | Souza | | 6 | John | *** Example Street | 5686 | M | Dante | AnyCorp | TN | 36 | john_doe@example.com | Doe | | 13 | Jane | *** Any Street | ***** | F | Nogal | ExampleCompany | VA | 28 | null | Doe | | 18 | Juan | *** Example Court | 4180 | M | Orick | null | MD | 33 | juan_li@example.org | Li | +------------------+-------------+----------------------+-----------+----------+--------+----------------+---------+-------+-----------------------+------------+
例 2: 条件付きでデータを取得する
この例では、条件付きでアカウントインデックスからすべてのドキュメントを取得する方法を示しています。
PPL クエリ:
os> SEARCH source=accounts account_number=1 or gender="F"; +------------------+-------------+--------------------+-----------+----------+--------+----------------+---------+-------+-------------------------+------------+ | account_number | firstname | address | balance | gender | city | employer | state | age | email - | lastname | |------------------+-------------+--------------------+-----------+----------+--------+----------------+---------+-------+-------------------------+------------| | 1 | Jorge | *** Any Lane | ***** | M | Brogan | ExampleCorp | IL | 32 | jorge_souza@example.com | Souza | | 13 | Jane | *** Any Street | ***** | F | Nogal | ExampleCompany | VA | 28 | null | Doe | +------------------+-------------+--------------------+-----------+----------+--------+-----------------+---------+-------+------------------------+------------+
sort コマンド
sort コマンドを使用して、指定したフィールドで検索結果をソートします。
注記
この PPL コマンドをサポートする AWS データソース統合を確認するには、「コマンド」を参照してください。
構文
次の構文を使用します。
sort <[+|-] sort-field>...
[+|-]
-
オプション。
-
プラス [+] は昇順を示し、NULL/MISSING 値が先頭に並びます。
-
マイナス [-] は降順を示し、NULL/MISSING 値が末尾に並びます。
-
デフォルト: 昇順で、NULL/MISSING 値を先頭に配置されます。
ソートフィールド
-
必須。
-
ソートに使用されるフィールド。
例 1: 1 つのフィールドでソートする
この例では、年齢フィールドを使用してドキュメントを昇順でソートする方法を示しています。
PPL クエリ:
os> source=accounts | sort age | fields account_number, age; fetched rows / total rows = 4/4 +------------------+-------+ | account_number | age | |------------------+-------| | 13 | 28 | | 1 | 32 | | 18 | 33 | | 6 | 36 | +------------------+-------+
例 2: 1 つのフィールドでソートし、すべての結果を返します
この例では、年齢フィールドを使用してドキュメントを昇順でソートする方法を示しています。
PPL クエリ:
os> source=accounts | sort age | fields account_number, age; fetched rows / total rows = 4/4 +------------------+-------+ | account_number | age | |------------------+-------| | 13 | 28 | | 1 | 32 | | 18 | 33 | | 6 | 36 | +------------------+-------+
例 3: 1 つのフィールドで降順でソートする
この例では、年齢フィールドを使用してドキュメントを降順でソートする方法を示しています。
PPL クエリ:
os> source=accounts | sort - age | fields account_number, age; fetched rows / total rows = 4/4 +------------------+-------+ | account_number | age | |------------------+-------| | 6 | 36 | | 18 | 33 | | 1 | 32 | | 13 | 28 | +------------------+-------+
例 4: 複数のフィールドでソートする
この例では、性別フィールドを昇順に、年齢フィールドを降順にしてドキュメントをソートする方法を示しています。
PPL クエリ:
os> source=accounts | sort + gender, - age | fields account_number, gender, age; fetched rows / total rows = 4/4 +------------------+----------+-------+ | account_number | gender | age | |------------------+----------+-------| | 13 | F | 28 | | 6 | M | 36 | | 18 | M | 33 | | 1 | M | 32 | +------------------+----------+-------+
例 5: null を含むフィールドでソートする
この例では、デフォルトのオプション (昇順かつ NULL 値を最初に) で雇用主フィールドを並べ替える方法を示しています。結果は、null 値が最初の行にあることを示しています。
PPL クエリ:
os> source=accounts | sort employer | fields employer; fetched rows / total rows = 4/4 +------------+ | employer | |------------| | null | | AnyCompany | | AnyCorp | | AnyOrgty | +------------+
stats コマンド
stats コマンドを使用して、検索結果から集計を計算します。
注記
この PPL コマンドをサポートする AWS データソース統合を確認するには、「コマンド」を参照してください。
NULL/MISSING 値の処理
| 関数 | NULL | MISSING |
|---|---|---|
| COUNT | カウントされません | カウントされません |
| SUM | 無視 | 無視 |
| AVG | 無視 | 無視 |
| MAX | 無視 | 無視 |
| MIN | 無視 | 無視 |
構文
次の構文を使用します。
stats <aggregation>... [by-clause]
集計
-
必須。
-
フィールドに適用される集計関数。
句ごと
-
オプション。
-
構文:
by [span-expression,] [field,]... -
集計結果をグループ化するためのフィールドと式を指定します。by-clause を使用すると、フィールドと式を使用して集計結果をグループ化できます。スカラー関数、集計関数、スパン式を使用して、特定のフィールドを同じ間隔のバケットに分割することもできます。
-
デフォルト:
<by-clause>が指定されていない場合、stats コマンドは結果セット全体の集計を表す単一の行を返します。
span-expression
-
オプション、最大 1 つまで。
-
構文:
span(field_expr, interval_expr) -
間隔式の単位は、デフォルトでは自然単位です。フィールドが日付と時刻タイプのフィールドで、間隔が日付/時刻の単位である場合は、間隔式の中で単位を指定します。
-
例えば、
ageフィールドを 10 年でバケットに分割すると、span(age, 10)のようになります。タイムスタンプフィールドを時間単位の間隔に分割するには、span(timestamp, 1h)を使用します。
| スパン間隔の単位 |
|---|
| ミリ秒 (ms) |
| 秒 (秒) |
| 分 (m、大文字と小文字を区別する) |
| 時間 (h) |
| 日 (d) |
| 週 (w) |
| 月 (M、大文字と小文字を区別する) |
| 四半期 (q) |
| 年 (y) |
集計関数
COUNT
SELECT ステートメントによって取得された行の expr の数をカウントして返します。
例:
os> source=accounts | stats count(); fetched rows / total rows = 1/1 +-----------+ | count() | |-----------| | 4 | +-----------+
SUM
SUM(expr) を使用して expr の合計を返します。
例
os> source=accounts | stats sum(age) by gender; fetched rows / total rows = 2/2 +------------+----------+ | sum(age) | gender | |------------+----------| | 28 | F | | 101 | M | +------------+----------+
AVG
AVG(expr) を使用して expr の平均値を返します。
例
os> source=accounts | stats avg(age) by gender; fetched rows / total rows = 2/2 +--------------------+----------+ | avg(age) | gender | |--------------------+----------| | 28.0 | F | | 33.666666666666664 | M | +--------------------+----------+
MAX
MAX(expr) を使用して expr の最大値を返します。
例
os> source=accounts | stats max(age); fetched rows / total rows = 1/1 +------------+ | max(age) | |------------| | 36 | +------------+
MIN
MIN(expr) を使用して expr の最小値を返します。
例
os> source=accounts | stats min(age); fetched rows / total rows = 1/1 +------------+ | min(age) | |------------| | 28 | +------------+
STDDEV_SAMP
STDDEV_SAMP(expr) を使用して expr のサンプル標準偏差を返します。
例:
os> source=accounts | stats stddev_samp(age); fetched rows / total rows = 1/1 +--------------------+ | stddev_samp(age) | |--------------------| | 3.304037933599835 | +--------------------+
STDDEV_POP
STDDEV_POP(expr) を使用して expr の母集団標準偏差を返します。
例:
os> source=accounts | stats stddev_pop(age); fetched rows / total rows = 1/1 +--------------------+ | stddev_pop(age) | |--------------------| | 2.**************** | +--------------------+
TAKE
TAKE(field [, size]) を使用してフィールドの元の値を返します。値の順序は保証されません。
field
-
必須。
-
フィールドはテキストフィールドである必要があります。
size
-
オプション整数
-
値の数を返す必要があります。
-
デフォルトは 10 です。
例
os> source=accounts | stats take(firstname); fetched rows / total rows = 1/1 +-----------------------------+ | take(firstname) | |-----------------------------| | [Jane, Mary, Nikki, Juan | +-----------------------------+
PERCENTILE または PERCENTILE_APPROX
PERCENTILE(expr, percent) または PERCENTILE_APPROX(expr, percent)を使用して、expr の近似パーセンタイル値を指定されたパーセンテージで返します。
パーセント
-
数値は 0~100 の定数である必要があります。
例
os> source=accounts | stats percentile(age, 90) by gender; fetched rows / total rows = 2/2 +-----------------------+----------+ | percentile(age, 90) | gender | |-----------------------+----------| | 28 | F | | 36 | M | +-----------------------+----------+
例 1: イベントの数を計算する
この例では、アカウントのイベント数を計算する方法を示します。
os> source=accounts | stats count(); fetched rows / total rows = 1/1 +-----------+ | count() | |-----------| | 4 | +-----------+
例 2: フィールドの平均を計算する
この例では、すべてのアカウントの平均年齢を計算する方法を示しています。
os> source=accounts | stats avg(age); fetched rows / total rows = 1/1 +------------+ | avg(age) | |------------| | 32.25 | +------------+
例 3: フィールドの平均をグループごとに計算する
この例では、性別ごとにグループ化された、すべてのアカウントの平均年齢を計算する方法を示しています。
os> source=accounts | stats avg(age) by gender; fetched rows / total rows = 2/2 +--------------------+----------+ | avg(age) | gender | |--------------------+----------| | 28.0 | F | | 33.666666666666664 | M | +--------------------+----------+
例 4: フィールドの平均、合計、数をグループごとに計算する
この例では、すべてのアカウントの平均年齢、合計年齢、イベント数を性別ごとにグループ化して計算する方法を示しています。
os> source=accounts | stats avg(age), sum(age), count() by gender; fetched rows / total rows = 2/2 +--------------------+------------+-----------+----------+ | avg(age) | sum(age) | count() | gender | |--------------------+------------+-----------+----------| | 28.0 | 28 | 1 | F | | 33.666666666666664 | 101 | 3 | M | +--------------------+------------+-----------+----------+
例 5: フィールドの最大数を計算する
この例では、すべてのアカウントの最大有効期間を計算します。
os> source=accounts | stats max(age); fetched rows / total rows = 1/1 +------------+ | max(age) | |------------| | 36 | +------------+
例 6: フィールドの最大数と最小数をグループごとに計算する
この例では、すべてのアカウントの年齢の最大値と最小値を性別ごとにグループ化して計算します。
os> source=accounts | stats max(age), min(age) by gender; fetched rows / total rows = 2/2 +------------+------------+----------+ | max(age) | min(age) | gender | |------------+------------+----------| | 28 | 28 | F | | 36 | 32 | M | +------------+------------+----------+
例 7: フィールドの個別の数を計算する
フィールドの個別の値の数を取得するには、COUNT の代わりに DISTINCT_COUNT (または DC) 関数を使用できます。この例では、すべてのアカウントの性別フィールドの数と個別の数の両方を計算します。
os> source=accounts | stats count(gender), distinct_count(gender); fetched rows / total rows = 1/1 +-----------------+--------------------------+ | count(gender) | distinct_count(gender) | |-----------------+--------------------------| | 4 | 2 | +-----------------+--------------------------+
例 8: スパンごとにカウントを計算する
この例では、年齢を 10 年間隔でカウントして集計します。
os> source=accounts | stats count(age) by span(age, 10) as age_span fetched rows / total rows = 2/2 +--------------+------------+ | count(age) | age_span | |--------------+------------| | 1 | 20 | | 3 | 30 | +--------------+------------+
例 9: 性別とスパンごとにカウントを計算する
この例では、性別と 5 年の年齢スパン別にグループ化されたレコードをカウントします。
os> source=accounts | stats count() as cnt by span(age, 5) as age_span, gender fetched rows / total rows = 3/3 +-------+------------+----------+ | cnt | age_span | gender | |-------+------------+----------| | 1 | 25 | F | | 2 | 30 | M | | 1 | 35 | M | +-------+------------+----------+
コマンドで指定された順序に関係なく、スパン式は常に最初のグループ化キーとして表示されます。
os> source=accounts | stats count() as cnt by gender, span(age, 5) as age_span fetched rows / total rows = 3/3 +-------+------------+----------+ | cnt | age_span | gender | |-------+------------+----------| | 1 | 25 | F | | 2 | 30 | M | | 1 | 35 | M | +-------+------------+----------+
例 10: 性別とスパンでカウントを計算し、E メールリストを取得する
この例では、年齢の数を 10 年間隔で取得し、性別ごとにグループ化します。さらに、行ごとに最大 5 通の E メールのリストを取得します。
os> source=accounts | stats count() as cnt, take(email, 5) by span(age, 5) as age_span, gender fetched rows / total rows = 3/3 +-------+----------------------------------------------------+------------+----------+ | cnt | take(email, 5) | age_span | gender | |-------+----------------------------------------------------+------------+----------| | 1 | [] | 25 | F | | 2 | [janedoe@anycompany.com,juanli@examplecompany.org] | 30 | M | | 1 | [marymajor@examplecorp.com] | 35 | M | +-------+----------------------------------------------------+------------+----------+
例 11: フィールドのパーセンタイルを計算する
この例では、すべてのアカウントの 90 番目の年齢のパーセンタイルを計算する方法を示しています。
os> source=accounts | stats percentile(age, 90); fetched rows / total rows = 1/1 +-----------------------+ | percentile(age, 90) | |-----------------------| | 36 | +-----------------------+
例 12: フィールドのパーセンタイルをグループ別に計算する
この例では、すべてのアカウントグループのパーセンタイル 90 番目の年齢を性別ごとに計算する方法を示しています。
os> source=accounts | stats percentile(age, 90) by gender; fetched rows / total rows = 2/2 +-----------------------+----------+ | percentile(age, 90) | gender | |-----------------------+----------| | 28 | F | | 36 | M | +-----------------------+----------+
例 13: 性別とスパンごとにパーセンタイルを計算する
この例では、この例では、年齢を 10 年ごとの間隔で区切り、性別ごとにパーセンタイル 90 番目の年齢を取得します。
os> source=accounts | stats percentile(age, 90) as p90 by span(age, 10) as age_span, gender fetched rows / total rows = 2/2 +-------+------------+----------+ | p90 | age_span | gender | |-------+------------+----------| | 28 | 20 | F | | 36 | 30 | M | +-------+------------+----------+
- `source = table | stats avg(a) ` - `source = table | where a < 50 | stats avg(c) ` - `source = table | stats max(c) by b` - `source = table | stats count(c) by b | head 5` - `source = table | stats distinct_count(c)` - `source = table | stats stddev_samp(c)` - `source = table | stats stddev_pop(c)` - `source = table | stats percentile(c, 90)` - `source = table | stats percentile_approx(c, 99)`
スパンによる集計
- `source = table | stats count(a) by span(a, 10) as a_span` - `source = table | stats sum(age) by span(age, 5) as age_span | head 2` - `source = table | stats avg(age) by span(age, 20) as age_span, country | sort - age_span | head 2`
タイムウィンドウスパンの集計 (タンブルウィンドウ関数)
- `source = table | stats sum(productsAmount) by span(transactionDate, 1d) as age_date | sort age_date` - `source = table | stats sum(productsAmount) by span(transactionDate, 1w) as age_date, productId`
複数のレベルによる集計グループ
- `source = table | stats avg(age) as avg_state_age by country, state | stats avg(avg_state_age) as avg_country_age by country` - `source = table | stats avg(age) as avg_city_age by country, state, city | eval new_avg_city_age = avg_city_age - 1 | stats avg(new_avg_city_age) as avg_state_age by country, state | where avg_state_age > 18 | stats avg(avg_state_age) as avg_adult_country_age by country`
subquery コマンド
注記
この PPL コマンドをサポートする AWS データソース統合を確認するには、「コマンド」を参照してください。
subquery コマンドを使用して、Piped Processing Language (PPL) ステートメント内で複雑なネストされたクエリを実行します。
source=logs | where field in [ subquery source=events | where condition | fields field ]
この例では、プライマリ検索 (source=logs) はサブクエリ (source=events) の結果によってフィルタリングされます。
サブクエリコマンドは、複雑なデータ分析のために複数レベルのネストをサポートします。
ネスト化したサブクエリの例
source=logs | where id in [ subquery source=users | where user in [ subquery source=actions | where action="login" | fields user] | fields uid ]
InSubquery の使用
-
source = outer | where a in [ source = inner | fields b ] -
source = outer | where (a) in [ source = inner | fields b ] -
source = outer | where (a,b,c) in [ source = inner | fields d,e,f ] -
source = outer | where a not in [ source = inner | fields b ] -
source = outer | where (a) not in [ source = inner | fields b ] -
source = outer | where (a,b,c) not in [ source = inner | fields d,e,f ] -
source = outer a in [ source = inner | fields b ](サブクエリによる検索フィルタリング) -
source = outer a not in [ source = inner | fields b ](サブクエリによる検索フィルタリング) -
source = outer | where a in [ source = inner1 | where b not in [ source = inner2 | fields c ] | fields b ](ネスト化済み) -
source = table1 | inner join left = l right = r on l.a = r.a AND r.a in [ source = inner | fields d ] | fields l.a, r.a, b, c(結合フィルターとして)
IN-Subquery PPL を使用した SQL 移行の例
TPC-H Q4 (集計を含むサブクエリ内)
select o_orderpriority, count(*) as order_count from orders where o_orderdate >= date '1993-07-01' and o_orderdate < date '1993-07-01' + interval '3' month and o_orderkey in ( select l_orderkey from lineitem where l_commitdate < l_receiptdate ) group by o_orderpriority order by o_orderpriority
PPL InSubquery クエリによって書き換えられました:
source = orders | where o_orderdate >= "1993-07-01" and o_orderdate < "1993-10-01" and o_orderkey IN [ source = lineitem | where l_commitdate < l_receiptdate | fields l_orderkey ] | stats count(1) as order_count by o_orderpriority | sort o_orderpriority | fields o_orderpriority, order_count
TPC-H Q20 (サブクエリでネスト化)
select s_name, s_address from supplier, nation where s_suppkey in ( select ps_suppkey from partsupp where ps_partkey in ( select p_partkey from part where p_name like 'forest%' ) ) and s_nationkey = n_nationkey and n_name = 'CANADA' order by s_name
PPL InSubquery クエリによって書き換えられました:
source = supplier | where s_suppkey IN [ source = partsupp | where ps_partkey IN [ source = part | where like(p_name, "forest%") | fields p_partkey ] | fields ps_suppkey ] | inner join left=l right=r on s_nationkey = n_nationkey and n_name = 'CANADA' nation | sort s_name
ExistsSubquery の使用
前提: a、b はテーブル outer のフィールド、c、d はテーブル inner のフィールド、e、f はテーブル inner2 のフィールドです。
-
source = outer | where exists [ source = inner | where a = c ] -
source = outer | where not exists [ source = inner | where a = c ] -
source = outer | where exists [ source = inner | where a = c and b = d ] -
source = outer | where not exists [ source = inner | where a = c and b = d ] -
source = outer exists [ source = inner | where a = c ](サブクエリによる検索フィルタリング) -
source = outer not exists [ source = inner | where a = c ](サブクエリによる検索フィルタリング) -
source = table as t1 exists [ source = table as t2 | where t1.a = t2.a ](テーブルエイリアスは、存在するサブクエリで有用です) -
source = outer | where exists [ source = inner1 | where a = c and exists [ source = inner2 | where c = e ] ](ネスト化済み) -
source = outer | where exists [ source = inner1 | where a = c | where exists [ source = inner2 | where c = e ] ](ネスト化済み) -
source = outer | where exists [ source = inner | where c > 10 ](非相関が存在する) -
source = outer | where not exists [ source = inner | where c > 10 ](非相関が存在する) -
source = outer | where exists [ source = inner ] | eval l = "nonEmpty" | fields l(特別な非相関が存在する)
ScalarSubquery の使用
前提: a、b はテーブル outer のフィールド、c、d はテーブル inner のフィールド、e、f はテーブル inner2 のフィールドです。
非相関スカラーサブクエリ
Select 内:
-
source = outer | eval m = [ source = inner | stats max(c) ] | fields m, a -
source = outer | eval m = [ source = inner | stats max(c) ] + b | fields m, a
Where 内:
-
source = outer | where a > [ source = inner | stats min(c) ] | fields a
検索フィルター内:
-
source = outer a > [ source = inner | stats min(c) ] | fields a
相関スカラーサブクエリ
Select 内:
-
source = outer | eval m = [ source = inner | where outer.b = inner.d | stats max(c) ] | fields m, a -
source = outer | eval m = [ source = inner | where b = d | stats max(c) ] | fields m, a -
source = outer | eval m = [ source = inner | where outer.b > inner.d | stats max(c) ] | fields m, a
Where 内:
-
source = outer | where a = [ source = inner | where outer.b = inner.d | stats max(c) ] -
source = outer | where a = [ source = inner | where b = d | stats max(c) ] -
source = outer | where [ source = inner | where outer.b = inner.d OR inner.d = 1 | stats count() ] > 0 | fields a
検索フィルター内:
-
source = outer a = [ source = inner | where b = d | stats max(c) ] -
source = outer [ source = inner | where outer.b = inner.d OR inner.d = 1 | stats count() ] > 0 | fields a
ネスト化スカラーサブクエリ
-
source = outer | where a = [ source = inner | stats max(c) | sort c ] OR b = [ source = inner | where c = 1 | stats min(d) | sort d ] -
source = outer | where a = [ source = inner | where c = [ source = nested | stats max(e) by f | sort f ] | stats max(d) by c | sort c | head 1 ]
(関係) サブクエリ
InSubquery、ExistsSubquery、ScalarSubquery はすべてサブクエリ式です。ただし、RelationSubquery はサブクエリ式ではなく、Join 句または From 句でよく使用されるサブクエリプランです。
-
source = table1 | join left = l right = r [ source = table2 | where d > 10 | head 5 ](右結合側のサブクエリ) -
source = [ source = table1 | join left = l right = r [ source = table2 | where d > 10 | head 5 ] | stats count(a) by b ] as outer | head 1
追加のコンテキスト
InSubquery、ExistsSubquery、ScalarSubquery は、where 句と検索フィルターで一般的に使用されるサブクエリ式です。
Where コマンド:
| where <boolean expression> | ...
検索フィルター:
search source=* <boolean expression> | ...
サブクエリ式は、ブール式で使用できます。
| where orders.order_id in [ source=returns | where return_reason="damaged" | field order_id ]
orders.order_id in [ source=... ] は <boolean
expression> です。
一般的に、この種のサブクエリ句を InSubquery 式と呼びます。これは <boolean
expression> です。
異なる結合タイプのサブクエリ
ScalarSubquery を使用した例:
source=employees | join source=sales on employees.employee_id = sales.employee_id | where sales.sale_amount > [ source=targets | where target_met="true" | fields target_value ]
InSubquery、ExistsSubquery、ScalarSubquery とは異なり、RelationSubquery はサブクエリ式ではありません。代わりに、これはサブクエリプランです。
SEARCH source=customer | FIELDS c_custkey | LEFT OUTER JOIN left = c, right = o ON c.c_custkey = o.o_custkey [ SEARCH source=orders | WHERE o_comment NOT LIKE '%unusual%packages%' | FIELDS o_orderkey, o_custkey ] | STATS ...
top コマンド
注記
この PPL コマンドをサポートする AWS データソース統合を確認するには、「コマンド」を参照してください。
top コマンドを使用して、フィールドリスト内のすべてのフィールドの最も一般的な値のタプルを見つけます。
構文
次の構文を使用します。
top [N] <field-list> [by-clause] top_approx [N] <field-list> [by-clause]
N
-
返される結果の数。
-
デフォルト: 10
フィールドリスト
-
必須。
-
フィールド名のカンマ区切りリスト。
句ごと
-
オプション。
-
結果をグループ化する 1 つ以上のフィールド。
top_approx
-
HyperLogLog++ アルゴリズムによる推定基数
を使用した (n) 上位フィールドの概算数。
例 1: フィールドで最も出現頻度の高い値を検索する
この例では、すべてのアカウントで最も出現頻度の高い性別を検索します。
PPL クエリ:
os> source=accounts | top gender; os> source=accounts | top_approx gender; fetched rows / total rows = 2/2 +----------+ | gender | |----------| | M | | F | +----------+
例 2: フィールドで最も出現頻度の高い値を検索する (1 に制限)
この例では、すべてのアカウントで最も出現頻度の高い性別を 1 つ検索します。
PPL クエリ:
os> source=accounts | top_approx 1 gender; fetched rows / total rows = 1/1 +----------+ | gender | |----------| | M | +----------+
例 3: 性別ごとにグループ化された最も頻度の高い値を検索する
この例では、性別ごとにグループ化された、すべてのアカウントの最も頻度の高い年齢を検索します。
PPL クエリ:
os> source=accounts | top 1 age by gender; os> source=accounts | top_approx 1 age by gender; fetched rows / total rows = 2/2 +----------+-------+ | gender | age | |----------+-------| | F | 28 | | M | 32 | +----------+-------+
trendline コマンド
注記
この PPL コマンドをサポートする AWS データソース統合を確認するには、「コマンド」を参照してください。
trendline コマンドを使用して、フィールドの移動平均を計算します。
構文
次の構文を使用します
TRENDLINE [sort <[+|-] sort-field>] SMA(number-of-datapoints, field) [AS alias] [SMA(number-of-datapoints, field) [AS alias]]...
[+|-]
-
オプション。
-
プラス [+] は昇順を示し、NULL/MISSING 値が先頭に並びます。
-
マイナス [-] は降順を示し、NULL/MISSING 値が末尾に並びます。
-
デフォルト: 昇順で、NULL/MISSING 値を先頭に配置されます。
ソートフィールド
-
ソートを使用する場合は必須です。
-
ソートに使用されるフィールド。
number-of-datapoints
-
必須。
-
移動平均を計算するデータポイントの数。
-
ゼロより大きい値を指定する必要があります。
field
-
必須。
-
移動平均を計算するフィールドの名前。
alias
-
オプション。
-
移動平均を含む結果の列の名前。
単純移動平均 (SMA) タイプのみがサポートされています。これは次のように計算されます:
f[i]: The value of field 'f' in the i-th data-point n: The number of data-points in the moving window (period) t: The current time index SMA(t) = (1/n) * Σ(f[i]), where i = t-n+1 to t
例 1: 気温の時系列データに対する単純移動平均を計算する
この例では、2 つのデータポイントを使用して、気温に対する単純移動平均を計算します。
PPL クエリ:
os> source=t | trendline sma(2, temperature) as temp_trend; fetched rows / total rows = 5/5 +-----------+---------+--------------------+----------+ |temperature|device-id| timestamp|temp_trend| +-----------+---------+--------------------+----------+ | 12| 1492|2023-04-06 17:07:...| NULL| | 12| 1492|2023-04-06 17:07:...| 12.0| | 13| 256|2023-04-06 17:07:...| 12.5| | 14| 257|2023-04-06 17:07:...| 13.5| | 15| 258|2023-04-06 17:07:...| 14.5| +-----------+---------+--------------------+----------+
例 2: 温度の時系列データに対してソートを施した単純移動平均を計算する
この例では、device-id で降順でソートされた 2 つと 3 つのデータポイントを使用して、温度に対する 2 つの単純移動平均を計算します。
PPL クエリ:
os> source=t | trendline sort - device-id sma(2, temperature) as temp_trend_2 sma(3, temperature) as temp_trend_3; fetched rows / total rows = 5/5 +-----------+---------+--------------------+------------+------------------+ |temperature|device-id| timestamp|temp_trend_2| temp_trend_3| +-----------+---------+--------------------+------------+------------------+ | 15| 258|2023-04-06 17:07:...| NULL| NULL| | 14| 257|2023-04-06 17:07:...| 14.5| NULL| | 13| 256|2023-04-06 17:07:...| 13.5| 14.0| | 12| 1492|2023-04-06 17:07:...| 12.5| 13.0| | 12| 1492|2023-04-06 17:07:...| 12.0|12.333333333333334| +-----------+---------+--------------------+------------+------------------+
where コマンド
注記
この PPL コマンドをサポートする AWS データソース統合を確認するには、「コマンド」を参照してください。
where コマンドはブール式を使用して検索結果をフィルタリングします。ブール式が true と評価された場合にのみ結果を返します。
構文
次の構文を使用します。
where <boolean-expression>
ブール式
-
オプション。
-
ブール値に評価できる任意の式。
例 1: 条件付きで結果セットをフィルタリングする
この例では、特定の条件を満たすアカウントインデックスからドキュメントを取得する方法を示します。
PPL クエリ:
os> source=accounts | where account_number=1 or gender="F" | fields account_number, gender; fetched rows / total rows = 2/2 +------------------+----------+ | account_number | gender | |------------------+----------| | 1 | M | | 13 | F | +------------------+----------+
その他の例
論理条件を使用したフィルター
-
source = table | where c = 'test' AND a = 1 | fields a,b,c -
source = table | where c != 'test' OR a > 1 | fields a,b,c | head 1 -
source = table | where c = 'test' NOT a > 1 | fields a,b,c -
source = table | where a = 1 | fields a,b,c -
source = table | where a >= 1 | fields a,b,c -
source = table | where a < 1 | fields a,b,c -
source = table | where b != 'test' | fields a,b,c -
source = table | where c = 'test' | fields a,b,c | head 3 -
source = table | where ispresent(b) -
source = table | where isnull(coalesce(a, b)) | fields a,b,c | head 3 -
source = table | where isempty(a) -
source = table | where isblank(a) -
source = table | where case(length(a) > 6, 'True' else 'False') = 'True' -
source = table | where a between 1 and 4– 注意: これは a >= 1 と a <= 4 を返します。つまり範囲は [1, 4] です。 -
source = table | where b not between '2024-09-10' and '2025-09-10'– 注: これは b >= '**********' と b <= '2025-09-10' を返します。 -
source = table | where cidrmatch(ip, '***********/24') -
source = table | where cidrmatch(ipv6, '2003:db8::/32')
source = table | eval status_category = case(a >= 200 AND a < 300, 'Success', a >= 300 AND a < 400, 'Redirection', a >= 400 AND a < 500, 'Client Error', a >= 500, 'Server Error' else 'Incorrect HTTP status code') | where case(a >= 200 AND a < 300, 'Success', a >= 300 AND a < 400, 'Redirection', a >= 400 AND a < 500, 'Client Error', a >= 500, 'Server Error' else 'Incorrect HTTP status code' ) = 'Incorrect HTTP status code'
source = table | eval factor = case(a > 15, a - 14, isnull(b), a - 7, a < 3, a + 1 else 1) | where case(factor = 2, 'even', factor = 4, 'even', factor = 6, 'even', factor = 8, 'even' else 'odd') = 'even' | stats count() by factor
フィールドの概要
注記
この PPL コマンドをサポートする AWS データソース統合を確認するには、「コマンド」を参照してください。
fieldsummary コマンドを使用して、各フィールドの基本統計 (カウント、個別カウント、最小、最大、平均、標準偏差、平均) を計算し、各フィールドのデータ型を決定します。このコマンドは、その直前に置かれた任意のパイプと併用でき、それらを考慮に入れます。
構文
以下の構文を使用します。CloudWatch Logs のユースケースでは、クエリ内の 1 つのフィールドのみがサポートされています。
... | fieldsummary <field-list> (nulls=true/false)
includefields
-
統計を使用して収集されるすべての列のリストを統一された結果セットにまとめます。
Null
-
オプション。
-
true に設定する場合は、集計計算に null 値を含めます (数値の場合は null を 0 に置き換えます)。
例 1
PPL クエリ:
os> source = t | where status_code != 200 | fieldsummary includefields= status_code nulls=true +------------------+-------------+------------+------------+------------+------------+------------+------------+----------------| | Fields | COUNT | COUNT_DISTINCT | MIN | MAX | AVG | MEAN | STDDEV | NUlls | TYPEOF | |------------------+-------------+------------+------------+------------+------------+------------+------------+----------------| | "status_code" | 2 | 2 | 301 | 403 | 352.0 | 352.0 | 72.12489168102785 | 0 | "int" | +------------------+-------------+------------+------------+------------+------------+------------+------------+----------------|
例 2
PPL クエリ:
os> source = t | fieldsummary includefields= id, status_code, request_path nulls=true +------------------+-------------+------------+------------+------------+------------+------------+------------+----------------| | Fields | COUNT | COUNT_DISTINCT | MIN | MAX | AVG | MEAN | STDDEV | NUlls | TYPEOF | |------------------+-------------+------------+------------+------------+------------+------------+------------+----------------| | "id" | 6 | 6 | 1 | 6 | 3.5 | 3.5 | 1.8708286933869707 | 0 | "int" | +------------------+-------------+------------+------------+------------+------------+------------+------------+----------------| | "status_code" | 4 | 3 | 200 | 403 | 184.0 | 184.0 | 161.16699413961905 | 2 | "int" | +------------------+-------------+------------+------------+------------+------------+------------+------------+----------------| | "request_path" | 2 | 2 | /about| /home | 0.0 | 0.0 | 0 | 2 |"string"| +------------------+-------------+------------+------------+------------+------------+------------+------------+----------------|
拡張コマンド
注記
この PPL 関数をサポートする AWS データソース統合を確認するには、「関数」を参照してください。
expand コマンドを使用して Array<Any> または Map<Any> タイプのフィールドをフラット化し、要素またはキーと値のペアごとに個別の行を生成します。
構文
次の構文を使用します。
expand <field> [As alias]
field
-
拡張 (展開) するフィールド。
-
フィールドは、サポート対象のタイプである必要があります。
alias
-
オプション。
-
元のフィールド名の代わりに使用される名前。
使用上のガイドライン
拡張コマンドは、指定された配列またはマップフィールド内の各要素の行を生成します。ここでは、
-
配列要素は個々の行になります。
-
マップキーと値のペアは別々の行に分割され、各キーと値は行として表されます。
-
エイリアスを指定すると、展開された値は元のフィールド名ではなくエイリアスで表されます。
このコマンドを統計、評価、解析などの他のコマンドと組み合わせて使用して、拡張後のデータを操作または抽出できます。
例
-
source = table | expand employee | stats max(salary) as max by state, company -
source = table | expand employee as worker | stats max(salary) as max by state, company -
source = table | expand employee as worker | eval bonus = salary * 3 | fields worker, bonus -
source = table | expand employee | parse description '(?<email>.+@.+)' | fields employee, email -
source = table | eval array=json_array(1, 2, 3) | expand array as uid | fields name, occupation, uid -
source = table | expand multi_valueA as multiA | expand multi_valueB as multiB
expand コマンドは、評価、統計などの他のコマンドと組み合わせて使用できます。複数の expand コマンドを使用すると、各複合配列またはマップ内のすべての内部要素の直積集合が作成されます。
有効な SQL プッシュダウンクエリ
expand コマンドは、LATERAL VIEW の爆発を使用して同等の SQL オペレーションに変換されるため、SQL クエリレベルで配列またはマップを効率的に展開させることができます。
SELECT customer exploded_productId FROM table LATERAL VIEW explode(productId) AS exploded_productId
explode コマンドは、次の機能を提供します:
-
これは、新しい列を返す列操作です。
-
展開した列のすべての要素に新しい行が作成されます。
-
内部 null は、展開したフィールドの一部として無視されます (null の場合は作成/展開される行はありません)。
PPL 関数
トピック
PPL 条件関数
注記
この PPL 関数をサポートする AWS データソース統合を確認するには、「関数」を参照してください。
ISNULL
説明: フィールドが null の場合、isnull(field) は true を返します。
引数の型:
-
サポートされているすべてのデータ型:
戻り値の型:
-
BOOLEAN
例:
os> source=accounts | eval result = isnull(employer) | fields result, employer, firstname fetched rows / total rows = 4/4 +----------+-------------+-------------+ | result | employer | firstname | |----------+-------------+-------------| | False | AnyCompany | Mary | | False | ExampleCorp | Jane | | False | ExampleOrg | Nikki | | True | null | Juan | +----------+-------------+-------------+
ISNOTNULL
説明: フィールドが null でない場合、isnotnull(field) は true を返します。
引数の型:
-
サポートされているすべてのデータ型:
戻り値の型:
-
BOOLEAN
例:
os> source=accounts | where not isnotnull(employer) | fields account_number, employer fetched rows / total rows = 1/1 +------------------+------------+ | account_number | employer | |------------------+------------| | 18 | null | +------------------+------------+
EXISTS
例:
os> source=accounts | where exists(email) | fields account_number, email fetched rows / total rows = 1/1
IFNULL
説明: field1 が null field2 の場合、ifnull(field1,
field2) はを を返します。
引数の型:
-
サポートされているすべてのデータ型:
-
2 つのパラメータのタイプが異なる場合、関数はセマンティックチェックに失敗します。
戻り値の型:
-
いずれか
例:
os> source=accounts | eval result = ifnull(employer, 'default') | fields result, employer, firstname fetched rows / total rows = 4/4 +------------+------------+-------------+ | result | employer | firstname | |------------+------------+-------------| | AnyCompany | AnyCompany | Mary | | ExampleCorp| ExampleCorp| Jane | | ExampleOrg | ExampleOrg | Nikki | | default | null | Juan | +------------+------------+-------------+
NULLIF
説明: nullif(field1,
field2) は 2 つのパラメータが同じ場合は null を返し、それ以外の場合は field1 を返します。
引数の型:
-
サポートされているすべてのデータ型:
-
2 つのパラメータのタイプが異なる場合、関数はセマンティックチェックに失敗します。
戻り値の型:
-
いずれか
例:
os> source=accounts | eval result = nullif(employer, 'AnyCompany') | fields result, employer, firstname fetched rows / total rows = 4/4 +----------------+----------------+-------------+ | result | employer | firstname | |----------------+----------------+-------------| | null | AnyCompany | Mary | | ExampleCorp | ExampleCorp | Jane | | ExampleOrg | ExampleOrg | Nikki | | null | null | Juan | +----------------+----------------+-------------+
IF
説明: 条件が true の場合、if(condition,
expr1, expr2) は expr1 を返し、それ以外の場合は expr2 を返します。
引数の型:
-
サポートされているすべてのデータ型:
-
2 つのパラメータのタイプが異なる場合、関数はセマンティックチェックに失敗します。
戻り値の型:
-
いずれか
例:
os> source=accounts | eval result = if(true, firstname, lastname) | fields result, firstname, lastname fetched rows / total rows = 4/4 +----------+-------------+----------+ | result | firstname | lastname | |----------+-------------+----------| | Jane | Jane | Doe | | Mary | Mary | Major | | Pat | Pat | Candella | | Dale | Jorge | Souza | +----------+-----------+------------+ os> source=accounts | eval result = if(false, firstname, lastname) | fields result, firstname, lastname fetched rows / total rows = 4/4 +----------+-------------+------------+ | result | firstname | lastname | |----------+-------------+------------| | Doe | Jane | Doe | | Major | Mary | Major | | Candella | Pat | Candella | | Souza | Jorge | Souza | +----------+-------------+------------+ os> source=accounts | eval is_vip = if(age > 30 AND isnotnull(employer), true, false) | fields is_vip, firstname, lastname fetched rows / total rows = 4/4 +----------+-------------+------------+ | is_vip | firstname | lastname | |----------+-------------+------------| | True | Jane | Doe | | True | Mary | Major | | False | Pat | Candella | | False | Jorge | Souza | +----------+-------------+------------+
PPL 暗号化ハッシュ関数
注記
この PPL 関数をサポートする AWS データソース統合を確認するには、「関数」を参照してください。
MD5
MD5 は MD5 ダイジェストを計算し、32 文字の 16 進文字列として値を返します。
使用方法: md5('hello')
引数の型:
-
STRING
戻り値の型:
-
STRING
例:
os> source=people | eval `MD5('hello')` = MD5('hello') | fields `MD5('hello')` fetched rows / total rows = 1/1 +----------------------------------+ | MD5('hello') | |----------------------------------| | <32 character hex string> | +----------------------------------+
SHA1
SHA1 は SHA-1 の 16 進文字列の結果を返します。
使用方法: sha1('hello')
引数の型:
-
STRING
戻り値の型:
-
STRING
例:
os> source=people | eval `SHA1('hello')` = SHA1('hello') | fields `SHA1('hello')` fetched rows / total rows = 1/1 +------------------------------------------+ | SHA1('hello') | |------------------------------------------| | <40-character SHA-1 hash result> | +------------------------------------------+
SHA2
SHA2 は、ハッシュ関数の SHA-2 ファミリー (SHA-224、SHA-256, SHA-384、SHA-512) の 16 進文字列結果を返します。numBits は結果の希望するビット長を指定するもので、224、256、384、512 のいずれかである必要があります。
使用方法:
-
sha2('hello',256) -
sha2('hello',512)
引数の型:
-
STRING、INTEGER
戻り値の型:
-
STRING
例:
os> source=people | eval `SHA2('hello',256)` = SHA2('hello',256) | fields `SHA2('hello',256)` fetched rows / total rows = 1/1 +------------------------------------------------------------------+ | SHA2('hello',256) | |------------------------------------------------------------------| | <64-character SHA-256 hash result> | +------------------------------------------------------------------+ os> source=people | eval `SHA2('hello',512)` = SHA2('hello',512) | fields `SHA2('hello',512)` fetched rows / total rows = 1/1 +------------------------------------------------------------------+ | SHA2('hello',512) | | |------------------------------------------------------------------| | <128-character SHA-512 hash result> | +------------------------------------------------------------------+
PPL 日付および時刻関数
注記
この PPL 関数をサポートする AWS データソース統合を確認するには、「関数」を参照してください。
DAY
使用法: DAY(date) は 1~31 の範囲で、日付から月の日数を抽出します。
引数タイプ: STRING/DATE/TIMESTAMP
戻り値の型: INTEGER
シノニム: DAYOFMONTH、DAY_OF_MONTH
例:
os> source=people | eval `DAY(DATE('2020-08-26'))` = DAY(DATE('2020-08-26')) | fields `DAY(DATE('2020-08-26'))` fetched rows / total rows = 1/1 +---------------------------+ | DAY(DATE('2020-08-26')) | |---------------------------| | 26 | +---------------------------+
DAYOFMONTH
使用法: DAYOFMONTH(date) は 1~31 の範囲で、日付から月の日数を抽出します。
引数タイプ: STRING/DATE/TIMESTAMP
戻り値の型: INTEGER
シノニム: DAY、DAY_OF_MONTH
例:
os> source=people | eval `DAYOFMONTH(DATE('2020-08-26'))` = DAYOFMONTH(DATE('2020-08-26')) | fields `DAYOFMONTH(DATE('2020-08-26'))` fetched rows / total rows = 1/1 +----------------------------------+ | DAYOFMONTH(DATE('2020-08-26')) | |----------------------------------| | 26 | +----------------------------------+
DAY_OF_MONTH
使用法: DAY_OF_MONTH(DATE) は 1~31 の範囲で、日付から月の日数を抽出します。
引数タイプ: STRING/DATE/TIMESTAMP
戻り値の型: INTEGER
シノニム: DAY、DAYOFMONTH
例:
os> source=people | eval `DAY_OF_MONTH(DATE('2020-08-26'))` = DAY_OF_MONTH(DATE('2020-08-26')) | fields `DAY_OF_MONTH(DATE('2020-08-26'))` fetched rows / total rows = 1/1 +------------------------------------+ | DAY_OF_MONTH(DATE('2020-08-26')) | |------------------------------------| | 26 | +------------------------------------+
DAYOFWEEK
使用法: DAYOFWEEK(DATE) は日付の曜日インデックスを返します (1 = 日曜日、2 = 月曜日、...、7 = 土曜日)。
引数タイプ: STRING/DATE/TIMESTAMP
戻り値の型: INTEGER
シノニム: DAY_OF_WEEK
例:
os> source=people | eval `DAYOFWEEK(DATE('2020-08-26'))` = DAYOFWEEK(DATE('2020-08-26')) | fields `DAYOFWEEK(DATE('2020-08-26'))` fetched rows / total rows = 1/1 +---------------------------------+ | DAYOFWEEK(DATE('2020-08-26')) | |---------------------------------| | 4 | +---------------------------------+
DAY_OF_WEEK
使用法: DAY_OF_WEEK(DATE) は日付の曜日インデックスを返します (1 = 日曜日、2 = 月曜日、...、7 = 土曜日)。
引数タイプ: STRING/DATE/TIMESTAMP
戻り値の型: INTEGER
シノニム: DAYOFWEEK
例:
os> source=people | eval `DAY_OF_WEEK(DATE('2020-08-26'))` = DAY_OF_WEEK(DATE('2020-08-26')) | fields `DAY_OF_WEEK(DATE('2020-08-26'))` fetched rows / total rows = 1/1 +-----------------------------------+ | DAY_OF_WEEK(DATE('2020-08-26')) | |-----------------------------------| | 4 | +-----------------------------------+
DAYOFYEAR
使用法: DAYOFYEAR(DATE) は、1~366 の範囲で、日付から年内の日を返します。
引数タイプ: STRING/DATE/TIMESTAMP
戻り値の型: INTEGER
シノニム: DAY_OF_YEAR
例:
os> source=people | eval `DAYOFYEAR(DATE('2020-08-26'))` = DAYOFYEAR(DATE('2020-08-26')) | fields `DAYOFYEAR(DATE('2020-08-26'))` fetched rows / total rows = 1/1 +---------------------------------+ | DAYOFYEAR(DATE('2020-08-26')) | |---------------------------------| | 239 | +---------------------------------+
DAY_OF_YEAR
使用法: DAY_OF_YEAR(DATE) は、1~366 の範囲で、日付から年内の日を返します。
引数タイプ: STRING/DATE/TIMESTAMP
戻り値の型: INTEGER
シノニム: DAYOFYEAR
例:
os> source=people | eval `DAY_OF_YEAR(DATE('2020-08-26'))` = DAY_OF_YEAR(DATE('2020-08-26')) | fields `DAY_OF_YEAR(DATE('2020-08-26'))` fetched rows / total rows = 1/1 +-----------------------------------+ | DAY_OF_YEAR(DATE('2020-08-26')) | |-----------------------------------| | 239 | +-----------------------------------+
DAYNAME
使用法: DAYNAME(DATE) は、月曜日、火曜日、水曜日、木曜日、金曜日、土曜日、日曜日など、日付から曜日の名前を返します。
引数タイプ: STRING/DATE/TIMESTAMP
戻り値の型: STRING
例:
os> source=people | eval `DAYNAME(DATE('2020-08-26'))` = DAYNAME(DATE('2020-08-26')) | fields `DAYNAME(DATE('2020-08-26'))` fetched rows / total rows = 1/1 +-------------------------------+ | DAYNAME(DATE('2020-08-26')) | |-------------------------------| | Wednesday | +-------------------------------+
FROM_UNIXTIME
使用法: FROM_UNIXTIME はタイムスタンプまたは文字列値として指定された引数の表現を返します。この関数は、UNIX_TIMESTAMP 関数の逆変換を実行します。
2 番目の引数を指定すると、FROM_UNIXTIME はそれを使用して DATE_FORMAT 関数と同様の結果をフォーマットします。
タイムスタンプが 1970-01-01 00:00:00~3001-01-18 23:59:59.999999 (0~32536771199.999999 エポック時間) の範囲外の場合、関数は NULL を返します。
引数タイプ: DOUBLE、STRING
戻り値の型マップ:
DOUBLE -> TIMESTAMP
DOUBLE、STRING -> STRING
例:
os> source=people | eval `FROM_UNIXTIME(1220249547)` = FROM_UNIXTIME(1220249547) | fields `FROM_UNIXTIME(1220249547)` fetched rows / total rows = 1/1 +-----------------------------+ | FROM_UNIXTIME(1220249547) | |-----------------------------| | 2008-09-01 06:12:27 | +-----------------------------+ os> source=people | eval `FROM_UNIXTIME(1220249547, 'HH:mm:ss')` = FROM_UNIXTIME(1220249547, 'HH:mm:ss') | fields `FROM_UNIXTIME(1220249547, 'HH:mm:ss')` fetched rows / total rows = 1/1 +-----------------------------------------+ | FROM_UNIXTIME(1220249547, 'HH:mm:ss') | |-----------------------------------------| | 06:12:27 | +-----------------------------------------+
HOUR
使用法: HOUR(TIME) は時間の時の値を抽出します。
標準時刻とは異なり、この関数の時間値は 23 を超える範囲を持つことができます。その結果、HOUR(TIME) の戻り値は 23 を超える可能性があります。
引数タイプ: STRING/TIME/TIMESTAMP
戻り値の型: INTEGER
シノニム: HOUR_OF_DAY
例:
os> source=people | eval `HOUR(TIME('01:02:03'))` = HOUR(TIME('01:02:03')) | fields `HOUR(TIME('01:02:03'))` fetched rows / total rows = 1/1 +--------------------------+ | HOUR(TIME('01:02:03')) | |--------------------------| | 1 | +--------------------------+
HOUR_OF_DAY
使用法: HOUR_OF_DAY(TIME) は指定された時間から時間値を抽出します。
標準時刻とは異なり、この関数の時間値は 23 を超える範囲を持つことができます。その結果、HOUR_OF_DAY(TIME) の戻り値は 23 を超える可能性があります。
引数タイプ: STRING/TIME/TIMESTAMP
戻り値の型: INTEGER
シノニム: HOUR
例:
os> source=people | eval `HOUR_OF_DAY(TIME('01:02:03'))` = HOUR_OF_DAY(TIME('01:02:03')) | fields `HOUR_OF_DAY(TIME('01:02:03'))` fetched rows / total rows = 1/1 +---------------------------------+ | HOUR_OF_DAY(TIME('01:02:03')) | |---------------------------------| | 1 | +---------------------------------+
LAST_DAY
使用法: LAST_DAY は、指定された日付引数の DATE 値として月の最終日を返します。
引数タイプ: DATE/STRING/TIMESTAMP/TIME
戻り値の型: DATE
例:
os> source=people | eval `last_day('2023-02-06')` = last_day('2023-02-06') | fields `last_day('2023-02-06')` fetched rows / total rows = 1/1 +--------------------------+ | last_day('2023-02-06') | |--------------------------| | 2023-02-28 | +--------------------------+
LOCALTIMESTAMP
使用法: LOCALTIMESTAMP() は NOW() のシノニムです。
例:
> source=people | eval `LOCALTIMESTAMP()` = LOCALTIMESTAMP() | fields `LOCALTIMESTAMP()` fetched rows / total rows = 1/1 +---------------------+ | LOCALTIMESTAMP() | |---------------------| | 2022-08-02 15:54:19 | +---------------------+
LOCALTIME
使用法: LOCALTIME() は NOW() のシノニムです。
例:
> source=people | eval `LOCALTIME()` = LOCALTIME() | fields `LOCALTIME()` fetched rows / total rows = 1/1 +---------------------+ | LOCALTIME() | |---------------------| | 2022-08-02 15:54:19 | +---------------------+
MAKE_DATE
使用法: MAKE_DATE は指定された年、月、日の値に基づいて日付値を返します。すべての引数は整数に丸められます。
仕様: 1。MAKE_DATE(INTEGER, INTEGER, INTEGER) -> DATE
引数タイプ: INTEGER、INTEGER、INTEGER
戻り値の型: DATE
例:
os> source=people | eval `MAKE_DATE(1945, 5, 9)` = MAKEDATE(1945, 5, 9) | fields `MAKEDATE(1945, 5, 9)` fetched rows / total rows = 1/1 +------------------------+ | MAKEDATE(1945, 5, 9) | |------------------------| | 1945-05-09 | +------------------------+
MINUTE
使用法: MINUTE(TIME) は、指定された時間の分コンポーネントを 0~59 の範囲の整数として返します。
引数タイプ: STRING/TIME/TIMESTAMP
戻り値の型: INTEGER
シノニム: MINUTE_OF_HOUR
例:
os> source=people | eval `MINUTE(TIME('01:02:03'))` = MINUTE(TIME('01:02:03')) | fields `MINUTE(TIME('01:02:03'))` fetched rows / total rows = 1/1 +----------------------------+ | MINUTE(TIME('01:02:03')) | |----------------------------| | 2 | +----------------------------+
MINUTE_OF_HOUR
使用法: MINUTE_OF_HOUR(TIME) は、指定された時間の分コンポーネントを 0~59 の範囲の整数として返します。
引数タイプ: STRING/TIME/TIMESTAMP
戻り値の型: INTEGER
シノニム: MINUTE
例:
os> source=people | eval `MINUTE_OF_HOUR(TIME('01:02:03'))` = MINUTE_OF_HOUR(TIME('01:02:03')) | fields `MINUTE_OF_HOUR(TIME('01:02:03'))` fetched rows / total rows = 1/1 +------------------------------------+ | MINUTE_OF_HOUR(TIME('01:02:03')) | |------------------------------------| | 2 | +------------------------------------+
MONTH
使用法: MONTH(DATE) は、指定された日付の月を整数で返します。範囲は 1~12 です (1 は 1 月、12 は 12 月を表します)。
引数タイプ: STRING/DATE/TIMESTAMP
戻り値の型: INTEGER
シノニム: MONTH_OF_YEAR
例:
os> source=people | eval `MONTH(DATE('2020-08-26'))` = MONTH(DATE('2020-08-26')) | fields `MONTH(DATE('2020-08-26'))` fetched rows / total rows = 1/1 +-----------------------------+ | MONTH(DATE('2020-08-26')) | |-----------------------------| | 8 | +-----------------------------+
MONTHNAME
使用法: MONTHNAME(DATE) は、指定された日付の月を整数で返します。範囲は 1~12 です (1 は 1 月、12 は 12 月を表します)。
引数タイプ: STRING/DATE/TIMESTAMP
戻り値の型: INTEGER
シノニム: MONTH_OF_YEAR
例:
os> source=people | eval `MONTHNAME(DATE('2020-08-26'))` = MONTHNAME(DATE('2020-08-26')) | fields `MONTHNAME(DATE('2020-08-26'))` fetched rows / total rows = 1/1 +---------------------------------+ | MONTHNAME(DATE('2020-08-26')) | |---------------------------------| | August | +---------------------------------+
MONTH_OF_YEAR
使用法: MONTH_OF_YEAR(DATE) は、指定された日付の月を整数で返します。範囲は 1~12 です (1 は 1 月、12 は 12 月を表します)。
引数タイプ: STRING/DATE/TIMESTAMP
戻り値の型: INTEGER
シノニム: MONTH
例:
os> source=people | eval `MONTH_OF_YEAR(DATE('2020-08-26'))` = MONTH_OF_YEAR(DATE('2020-08-26')) | fields `MONTH_OF_YEAR(DATE('2020-08-26'))` fetched rows / total rows = 1/1 +-------------------------------------+ | MONTH_OF_YEAR(DATE('2020-08-26')) | |-------------------------------------| | 8 | +-------------------------------------+
NOW
使用法: NOW は現在の日付と時刻を「YYYY-MM-DD hh:mm:ss」形式の TIMESTAMP 値として返します。値はクラスターのタイムゾーンで表されます。
注記
NOW() は、ステートメントの実行が開始された時刻を示す一定の時間を返します。これは、SYSDATE() とは異なり、実行の正確な時刻を返します。
戻り値の型: TIMESTAMP
仕様: NOW() -> TIMESTAMP
例:
os> source=people | eval `value_1` = NOW(), `value_2` = NOW() | fields `value_1`, `value_2` fetched rows / total rows = 1/1 +---------------------+---------------------+ | value_1 | value_2 | |---------------------+---------------------| | 2022-08-02 15:39:05 | 2022-08-02 15:39:05 | +---------------------+---------------------+
QUARTER
使用法: QUARTER(DATE) は、指定された日付の四半期を 1~4 の範囲の整数として返します。
引数タイプ: STRING/DATE/TIMESTAMP
戻り値の型: INTEGER
例:
os> source=people | eval `QUARTER(DATE('2020-08-26'))` = QUARTER(DATE('2020-08-26')) | fields `QUARTER(DATE('2020-08-26'))` fetched rows / total rows = 1/1 +-------------------------------+ | QUARTER(DATE('2020-08-26')) | |-------------------------------| | 3 | +-------------------------------+
SECOND
使用法: SECOND(TIME) は、指定された時間の秒の要素を整数として 0~59 の範囲で返します。
引数タイプ: STRING/TIME/TIMESTAMP
戻り値の型: INTEGER
シノニム: SECOND_OF_MINUTE
例:
os> source=people | eval `SECOND(TIME('01:02:03'))` = SECOND(TIME('01:02:03')) | fields `SECOND(TIME('01:02:03'))` fetched rows / total rows = 1/1 +----------------------------+ | SECOND(TIME('01:02:03')) | |----------------------------| | 3 | +----------------------------+
SECOND_OF_MINUTE
使用法: SECOND_OF_MINUTE(TIME) は、指定された時間の秒の要素を整数として 0~59 の範囲で返します。
引数タイプ: STRING/TIME/TIMESTAMP
戻り値の型: INTEGER
シノニム: SECOND
例:
os> source=people | eval `SECOND_OF_MINUTE(TIME('01:02:03'))` = SECOND_OF_MINUTE(TIME('01:02:03')) | fields `SECOND_OF_MINUTE(TIME('01:02:03'))` fetched rows / total rows = 1/1 +--------------------------------------+ | SECOND_OF_MINUTE(TIME('01:02:03')) | |--------------------------------------| | 3 | +--------------------------------------+
SUBDATE
使用法: SUBDATE(DATE,
DAYS) は指定された日付から 2 番目の引数 (DATE や DAYS など) を減算します。
引数タイプ: DATE/TIMESTAMP、LONG
戻り値の型マップ: (DATE、LONG) -> DATE
アントニム: ADDDATE
例:
os> source=people | eval `'2008-01-02' - 31d` = SUBDATE(DATE('2008-01-02'), 31), `'2020-08-26' - 1` = SUBDATE(DATE('2020-08-26'), 1), `ts '2020-08-26 01:01:01' - 1` = SUBDATE(TIMESTAMP('2020-08-26 01:01:01'), 1) | fields `'2008-01-02' - 31d`, `'2020-08-26' - 1`, `ts '2020-08-26 01:01:01' - 1` fetched rows / total rows = 1/1 +----------------------+--------------------+--------------------------------+ | '2008-01-02' - 31d | '2020-08-26' - 1 | ts '2020-08-26 01:01:01' - 1 | |----------------------+--------------------+--------------------------------| | 2007-12-02 00:00:00 | 2020-08-25 | 2020-08-25 01:01:01 | +----------------------+--------------------+--------------------------------+
SYSDATE
使用法: SYSDATE() は現在の日付と時刻を「YYYY-MM-DD hh:mm:ss.nnnnnn」形式の TIMESTAMP 値として返します。
SYSDATE() は、実行される正確な時刻を返します。これは NOW() とは異なり、ステートメントの実行が開始された時刻を示す一定の時間を返します。
オプションの引数タイプ: INTEGER (0~6) – 戻り値の小数秒の桁数を指定します。
戻り値の型: TIMESTAMP
例:
os> source=people | eval `SYSDATE()` = SYSDATE() | fields `SYSDATE()` fetched rows / total rows = 1/1 +----------------------------+ | SYSDATE() | |----------------------------| | 2022-08-02 15:39:05.123456 | +----------------------------+
TIMESTAMP
使用法: TIMESTAMP(EXPR) は、入力文字列 expr をタイムスタンプとしてタイムスタンプ g 型を構築します。
単一の引数を使用して、TIMESTAMP(expr) は入力からタイムスタンプを作成します。expr が文字列の場合、それはタイムスタンプとして解釈されます。文字列以外の引数の場合、関数は UTC タイムゾーンを使用してタイムスタンプに expr をキャストします。expr が TIME 値の場合、関数はキャスト前に今日の日付を適用します。
2 つの引数で使用すると、TIMESTAMP(expr1, expr2) は日付式またはタイムスタンプ式 (expr1) に時間式 (expr2) を追加し、その結果をタイムスタンプ値として返します。
引数タイプ: STRING/DATE/TIME/TIMESTAMP
戻り値の型マップ:
(STRING/DATE/TIME/TIMESTAMP) -> TIMESTAMP
(STRING/DATE/TIME/TIMESTAMP, STRING/DATE/TIME/TIMESTAMP) -> TIMESTAMP
例:
os> source=people | eval `TIMESTAMP('2020-08-26 13:49:00')` = TIMESTAMP('2020-08-26 13:49:00'), `TIMESTAMP('2020-08-26 13:49:00', TIME('12:15:42'))` = TIMESTAMP('2020-08-26 13:49:00', TIME('12:15:42')) | fields `TIMESTAMP('2020-08-26 13:49:00')`, `TIMESTAMP('2020-08-26 13:49:00', TIME('12:15:42'))` fetched rows / total rows = 1/1 +------------------------------------+------------------------------------------------------+ | TIMESTAMP('2020-08-26 13:49:00') | TIMESTAMP('2020-08-26 13:49:00', TIME('12:15:42')) | |------------------------------------+------------------------------------------------------| | 2020-08-26 13:49:00 | 2020-08-27 02:04:42 | +------------------------------------+------------------------------------------------------+
UNIX_TIMESTAMP
使用法: UNIX_TIMESTAMP は指定された日付引数を Unix 時間 (1970 年の初めに開始されたエポックからの秒数) に変換します。引数を指定しない場合、現在の Unix 時間を返します。
date 引数は、DATE、TIMESTAMP 文字列、または YYMMDD、YYMMDDhhmmss、YYYYMMDD、のいずれかの形式の数値にすることができますYYYYMMDDhhmmss。引数に時間の要素が含まれている場合、オプションで小数秒が含まれることがあります。
引数が無効な形式であるか、1970-01-01 00:00:00 から 3001-01-18 23:59:59.999999 (エポック時間では 0 から 32536771199.999999) の範囲外である場合、関数は NULL を返します。
この関数は、DATE、TIMESTAMP、または を引数タイプ DOUBLE として受け入れるか、引数なしを受け入れます。常に Unix タイムスタンプを表す DOUBLE 値を返します。
逆変換には、FROM_UNIXTIME 関数を使用できます。
引数タイプ: <NONE>/DOUBLE/DATE/TIMESTAMP
戻り値の型: DOUBLE
例:
os> source=people | eval `UNIX_TIMESTAMP(double)` = UNIX_TIMESTAMP(20771122143845), `UNIX_TIMESTAMP(timestamp)` = UNIX_TIMESTAMP(TIMESTAMP('1996-11-15 17:05:42')) | fields `UNIX_TIMESTAMP(double)`, `UNIX_TIMESTAMP(timestamp)` fetched rows / total rows = 1/1 +--------------------------+-----------------------------+ | UNIX_TIMESTAMP(double) | UNIX_TIMESTAMP(timestamp) | |--------------------------+-----------------------------| | 3404817525.0 | 848077542.0 | +--------------------------+-----------------------------+
WEEK
使用法: WEEK(DATE) は特定の日付の週番号を返します。
引数タイプ: DATE/TIMESTAMP/STRING
戻り値の型: INTEGER
シノニム: WEEK_OF_YEAR
例:
os> source=people | eval `WEEK(DATE('2008-02-20'))` = WEEK(DATE('2008-02-20')) | fields `WEEK(DATE('2008-02-20'))` fetched rows / total rows = 1/1 +----------------------------+ | WEEK(DATE('2008-02-20')) | |----------------------------| | 8 | +----------------------------+
WEEKDAY
使用法: WEEKDAY(DATE) は日付の曜日インデックスを返します (0 = 月曜日、1 = 火曜日、...、6 = 日曜日)。
これは dayofweek 関数に似ていますが、日ごとに異なるインデックスを返します。
引数タイプ: STRING/DATE/TIME/TIMESTAMP
戻り値の型: INTEGER
例:
os> source=people | eval `weekday(DATE('2020-08-26'))` = weekday(DATE('2020-08-26')) | eval `weekday(DATE('2020-08-27'))` = weekday(DATE('2020-08-27')) | fields `weekday(DATE('2020-08-26'))`, `weekday(DATE('2020-08-27'))` fetched rows / total rows = 1/1 +-------------------------------+-------------------------------+ | weekday(DATE('2020-08-26')) | weekday(DATE('2020-08-27')) | |-------------------------------+-------------------------------| | 2 | 3 | +-------------------------------+-------------------------------+
WEEK_OF_YEAR
使用法: 指定された日付の週番号 WEEK_OF_YEAR(DATE) を返します。
引数タイプ: DATE/TIMESTAMP/STRING
戻り値の型: INTEGER
シノニム: WEEK
例:
os> source=people | eval `WEEK_OF_YEAR(DATE('2008-02-20'))` = WEEK(DATE('2008-02-20'))| fields `WEEK_OF_YEAR(DATE('2008-02-20'))` fetched rows / total rows = 1/1 +------------------------------------+ | WEEK_OF_YEAR(DATE('2008-02-20')) | |------------------------------------| | 8 | +------------------------------------+
YEAR
使用法: YEAR(DATE) は日付の年を返します (範囲: 1000~9999)。「ゼロ」日付の場合は 0 を返します。
引数タイプ: STRING/DATE/TIMESTAMP
戻り値の型: INTEGER
例:
os> source=people | eval `YEAR(DATE('2020-08-26'))` = YEAR(DATE('2020-08-26')) | fields `YEAR(DATE('2020-08-26'))` fetched rows / total rows = 1/1 +----------------------------+ | YEAR(DATE('2020-08-26')) | |----------------------------| | 2020 | +----------------------------+
DATE_ADD
使用法: DATE_ADD(date,
INTERVAL expr unit) は、指定された間隔を指定された日付に追加します。
引数タイプ: DATE、INTERVAL
戻り値の型: DATE
アントニム: DATE_SUB
例:
os> source=people | eval `'2020-08-26' + 1d` = DATE_ADD(DATE('2020-08-26'), INTERVAL 1 DAY) | fields `'2020-08-26' + 1d` fetched rows / total rows = 1/1 +---------------------+ | '2020-08-26' + 1d | |---------------------| | 2020-08-27 | +---------------------+
DATE_SUB
使用法: DATE_SUB(date,
INTERVAL expr unit) は日付から間隔 expr を減算します。
引数タイプ: DATE、INTERVAL
戻り値の型: DATE
アントニム: DATE_ADD
例:
os> source=people | eval `'2008-01-02' - 31d` = DATE_SUB(DATE('2008-01-02'), INTERVAL 31 DAY) | fields `'2008-01-02' - 31d` fetched rows / total rows = 1/1 +---------------------+ | '2008-01-02' - 31d | |---------------------| | 2007-12-02 | +---------------------+
TIMESTAMPADD
使用法: 指定した時間間隔を特定の日付に追加した後、TIMESTAMP 値を返します。
引数:
-
時間間隔: INTERVAL (SECOND、MINUTE、HOUR、DAY、WEEK、MONTH、QUARTER、YEAR)
-
整数: INTEGER
-
日付: DATE、TIMESTAMP、または STRING
STRING を日付引数として指定する場合は、有効な TIMESTAMP としてフォーマットします。関数は DATE 引数を自動的に TIMESTAMP に変換します。
例:
os> source=people | eval `TIMESTAMPADD(DAY, 17, '2000-01-01 00:00:00')` = TIMESTAMPADD(DAY, 17, '2000-01-01 00:00:00') | eval `TIMESTAMPADD(QUARTER, -1, '2000-01-01 00:00:00')` = TIMESTAMPADD(QUARTER, -1, '2000-01-01 00:00:00') | fields `TIMESTAMPADD(DAY, 17, '2000-01-01 00:00:00')`, `TIMESTAMPADD(QUARTER, -1, '2000-01-01 00:00:00')` fetched rows / total rows = 1/1 +----------------------------------------------+--------------------------------------------------+ | TIMESTAMPADD(DAY, 17, '2000-01-01 00:00:00') | TIMESTAMPADD(QUARTER, -1, '2000-01-01 00:00:00') | |----------------------------------------------+--------------------------------------------------| | 2000-01-18 00:00:00 | 1999-10-01 00:00:00 | +----------------------------------------------+--------------------------------------------------+
TIMESTAMPDIFF
使用法: TIMESTAMPDIFF(interval, start, end) は指定した間隔単位で開始日時と終了日時の差を返します。
引数:
-
時間間隔: INTERVAL (SECOND、MINUTE、HOUR、DAY、WEEK、MONTH、QUARTER、YEAR)
-
開始: DATE、TIMESTAMP、または STRING
-
終了: DATE、TIMESTAMP、または STRING
関数は、必要に応じて引数を自動的に TIMESTAMP に変換します。STRING 引数を有効な TIMESTAMP としてフォーマットします。
例:
os> source=people | eval `TIMESTAMPDIFF(YEAR, '1997-01-01 00:00:00', '2001-03-06 00:00:00')` = TIMESTAMPDIFF(YEAR, '1997-01-01 00:00:00', '2001-03-06 00:00:00') | eval `TIMESTAMPDIFF(SECOND, timestamp('1997-01-01 00:00:23'), timestamp('1997-01-01 00:00:00'))` = TIMESTAMPDIFF(SECOND, timestamp('1997-01-01 00:00:23'), timestamp('1997-01-01 00:00:00')) | fields `TIMESTAMPDIFF(YEAR, '1997-01-01 00:00:00', '2001-03-06 00:00:00')`, `TIMESTAMPDIFF(SECOND, timestamp('1997-01-01 00:00:23'), timestamp('1997-01-01 00:00:00'))` fetched rows / total rows = 1/1 +-------------------------------------------------------------------+-------------------------------------------------------------------------------------------+ | TIMESTAMPDIFF(YEAR, '1997-01-01 00:00:00', '2001-03-06 00:00:00') | TIMESTAMPDIFF(SECOND, timestamp('1997-01-01 00:00:23'), timestamp('1997-01-01 00:00:00')) | |-------------------------------------------------------------------+-------------------------------------------------------------------------------------------| | 4 | -23 | +-------------------------------------------------------------------+-------------------------------------------------------------------------------------------+
UTC_TIMESTAMP
使用法: UTC_TIMESTAMP は 'YYYY-MM-DD hh:mm:ss' の値として現在の UTC タイムスタンプを返します。
戻り値の型: TIMESTAMP
仕様: UTC_TIMESTAMP() -> TIMESTAMP
例:
> source=people | eval `UTC_TIMESTAMP()` = UTC_TIMESTAMP() | fields `UTC_TIMESTAMP()` fetched rows / total rows = 1/1 +---------------------+ | UTC_TIMESTAMP() | |---------------------| | 2022-10-03 17:54:28 | +---------------------+
CURRENT_TIMEZONE
使用法: CURRENT_TIMEZONE は現在のローカルタイムゾーンを返します。
戻り値の型: STRING
例:
> source=people | eval `CURRENT_TIMEZONE()` = CURRENT_TIMEZONE() | fields `CURRENT_TIMEZONE()` fetched rows / total rows = 1/1 +------------------------+ | CURRENT_TIMEZONE() | |------------------------| | America/Chicago | +------------------------+
PPL 式
注記
この PPL 関数をサポートする AWS データソース統合を確認するには、「関数」を参照してください。
式、特に値式はスカラー値を返します。式にはさまざまな型と形式があります。例えば、リテラル値はアトム式として扱われ、それらを基盤として算術式、述語式、関数式が構築されます。式は、Filter および Stats コマンドで算術式を使用するなど、さまざまな句で使用できます。
演算子
算術式は、次のように数値リテラルとバイナリ算術演算子によって形成された式です。
-
+: 加算。 -
-: 減算。 -
*: 乗算。 -
/: 除算 (整数の場合、結果は小数部が破棄された整数です) -
%: 剰余 (整数でのみ使用、結果は除算の余り)
優先順位
括弧を使用して、算術演算子の優先順位を制御します。それ以外の場合は、優先順位の高い演算子が最初に実行されます。
型変換
演算子のシグネチャを照合する際、暗黙の型変換が適用されます。例えば、整数 + の実数がシグネチャ +(double,double) と一致すると、結果として実数が得られます。このルールは関数呼び出しにも適用されます。
さまざまなタイプの算術式の例:
os> source=accounts | where age > (25 + 5) | fields age ; fetched rows / total rows = 3/3 +-------+ | age | |-------| | 32 | | 36 | | 33 | +-------+
述語演算子
述語演算子は、true と評価される式です。MISSING と NULL 値の比較は、次のルールに従います。
-
MISSING値はMISSING値とのみ等しく、他の値よりも小さくなります。 -
NULL値はNULL値と等しく、MISSING値よりも大きく、他のすべての値よりも小さくなります。
演算子
| 名前 | 説明 |
|---|---|
> |
大なり演算子 |
| >= | 以上演算子 |
< |
未満演算子 |
!= |
不等号演算子 |
<= |
以下演算子 |
= |
等号演算子 |
LIKE |
単純パターンマッチング |
IN |
NULL 値テスト |
AND |
AND 演算子 |
OR |
OR 演算子 |
XOR |
XOR 演算子 |
NOT |
NOT NULL 値テスト |
日付時刻を比較できます。異なる日付時刻タイプ (DATE や TIME など) を比較する場合、どちらも DATETIME に変換されます。以下のルールが変換に適用されます:
-
TIMEは今日の日付に適用されます。 -
DATEは午前 0 時に解釈されます。
基本的な述語演算子
比較演算子の例:
os> source=accounts | where age > 33 | fields age ; fetched rows / total rows = 1/1 +-------+ | age | |-------| | 36 | +-------+
IN
値リストの IN 演算子テストフィールドの例:
os> source=accounts | where age in (32, 33) | fields age ; fetched rows / total rows = 2/2 +-------+ | age | |-------| | 32 | | 33 | +-------+
OR
OR 演算子の例:
os> source=accounts | where age = 32 OR age = 33 | fields age ; fetched rows / total rows = 2/2 +-------+ | age | |-------| | 32 | | 33 | +-------+
NOT
NOT 演算子の例:
os> source=accounts | where age not in (32, 33) | fields age ; fetched rows / total rows = 2/2 +-------+ | age | |-------| | 36 | | 28 | +-------+
PPL IP アドレス関数
注記
この PPL 関数をサポートする AWS データソース統合を確認するには、「関数」を参照してください。
CIDRMATCH
使用法: CIDRMATCH(ip,
cidr) は指定された IP アドレスが指定された cidr 範囲内にあるかどうかを確認します。
引数の型:
-
STRING、STRING
-
戻り値の型: BOOLEAN
例:
os> source=ips | where cidrmatch(ip, '***********/24') | fields ip fetched rows / total rows = 1/1 +--------------+ | ip | |--------------| | *********** | +--------------+ os> source=ipsv6 | where cidrmatch(ip, '2003:db8::/32') | fields ip fetched rows / total rows = 1/1 +-----------------------------------------+ | ip | |-----------------------------------------| | 2003:0db8:****:****:****:****:****:0000 | +-----------------------------------------+
注記
-
ipは IPv4 アドレスまたは IPv6 アドレスにすることができます。 -
cidrは IPv4 または IPv6 ブロックにすることができます。 -
ipとcidrは、両方の IPv4 または両方の IPv6 である必要があります。 -
ipとcidrは両方とも有効で、空でない/null でない必要があります。
PPL JSON 関数
注記
この PPL 関数をサポートする AWS データソース統合を確認するには、「関数」を参照してください。
JSON
使用法: json(value) は文字列を JSON 形式で解析できるかどうかを評価します。この関数は、有効な JSON の場合は元の文字列を返し、無効な場合は null を返します。
引数タイプ: STRING
戻り値の型: STRING/NULL。有効な JSON オブジェクト形式の STRING 式。
例:
os> source=people | eval `valid_json()` = json('[1,2,3,{"f1":1,"f2":[5,6]},4]') | fields valid_json fetched rows / total rows = 1/1 +---------------------------------+ | valid_json | +---------------------------------+ | [1,2,3,{"f1":1,"f2":[5,6]},4] | +---------------------------------+ os> source=people | eval `invalid_json()` = json('{"invalid": "json"') | fields invalid_json fetched rows / total rows = 1/1 +----------------+ | invalid_json | +----------------+ | null | +----------------+
JSON_OBJECT
使用法: json_object(<key>, <value>[, <key>,
<value>]...) はキーと値のペアのメンバーから JSON オブジェクトを返します。
引数の型:
-
<key> は STRING である必要があります。
-
<value> は任意のデータ型にすることができます。
戻り値の型: JSON_OBJECT。有効な JSON オブジェクトの StructType 式。
例:
os> source=people | eval result = json_object('key', 123.45) | fields result fetched rows / total rows = 1/1 +------------------+ | result | +------------------+ | {"key":123.45} | +------------------+ os> source=people | eval result = json_object('outer', json_object('inner', 123.45)) | fields result fetched rows / total rows = 1/1 +------------------------------+ | result | +------------------------------+ | {"outer":{"inner":123.45}} | +------------------------------+
JSON_ARRAY
使用法: json_array(<value>...) は、値のリストを使用して JSON ARRAY を作成します。
引数タイプ: <value> は、文字列、数値、ブール値など、任意の種類の値にすることができます。
戻り値の型: ARRAY。有効な JSON 配列でサポートされている任意のデータ型の配列。
例:
os> source=people | eval `json_array` = json_array(1, 2, 0, -1, 1.1, -0.11) fetched rows / total rows = 1/1 +------------------------------+ | json_array | +------------------------------+ | [1.0,2.0,0.0,-1.0,1.1,-0.11] | +------------------------------+ os> source=people | eval `json_array_object` = json_object("array", json_array(1, 2, 0, -1, 1.1, -0.11)) fetched rows / total rows = 1/1 +----------------------------------------+ | json_array_object | +----------------------------------------+ | {"array":[1.0,2.0,0.0,-1.0,1.1,-0.11]} | +----------------------------------------+
TO_JSON_STRING
使用法: to_json_string(jsonObject) は指定された JSON オブジェクト値を持つ JSON 文字列を返します。
引数タイプ: JSON_OBJECT
戻り値の型: STRING
例:
os> source=people | eval `json_string` = to_json_string(json_array(1, 2, 0, -1, 1.1, -0.11)) | fields json_string fetched rows / total rows = 1/1 +--------------------------------+ | json_string | +--------------------------------+ | [1.0,2.0,0.0,-1.0,1.1,-0.11] | +--------------------------------+ os> source=people | eval `json_string` = to_json_string(json_object('key', 123.45)) | fields json_string fetched rows / total rows = 1/1 +-----------------+ | json_string | +-----------------+ | {'key', 123.45} | +-----------------+
ARRAY_LENGTH
使用法: array_length(jsonArray) は最も外側の配列に含まれる要素の数を返します。
引数タイプ: ARRAY。ARRAY または JSON_ARRAY オブジェクト。
戻り値の型: INTEGER
例:
os> source=people | eval `json_array` = json_array_length(json_array(1,2,3,4)), `empty_array` = json_array_length(json_array()) fetched rows / total rows = 1/1 +--------------+---------------+ | json_array | empty_array | +--------------+---------------+ | 4 | 0 | +--------------+---------------+
JSON_EXTRACT
使用法: json_extract(jsonStr, path) は指定された JSON パスに基づいて JSON 文字列から JSON オブジェクトを抽出します。入力 JSON 文字列が無効の場合、関数は null を返します。
引数タイプ: STRING、STRING
戻り値の型: STRING
-
有効な JSON オブジェクト形式の STRING 式。
-
無効な JSON の場合、
NULLが返されます。
例:
os> source=people | eval `json_extract('{"a":"b"}', '$.a')` = json_extract('{"a":"b"}', '$a') fetched rows / total rows = 1/1 +----------------------------------+ | json_extract('{"a":"b"}', 'a') | +----------------------------------+ | b | +----------------------------------+ os> source=people | eval `json_extract('{"a":[{"b":1},{"b":2}]}', '$.a[1].b')` = json_extract('{"a":[{"b":1},{"b":2}]}', '$.a[1].b') fetched rows / total rows = 1/1 +-----------------------------------------------------------+ | json_extract('{"a":[{"b":1.0},{"b":2.0}]}', '$.a[1].b') | +-----------------------------------------------------------+ | 2.0 | +-----------------------------------------------------------+ os> source=people | eval `json_extract('{"a":[{"b":1},{"b":2}]}', '$.a[*].b')` = json_extract('{"a":[{"b":1},{"b":2}]}', '$.a[*].b') fetched rows / total rows = 1/1 +-----------------------------------------------------------+ | json_extract('{"a":[{"b":1.0},{"b":2.0}]}', '$.a[*].b') | +-----------------------------------------------------------+ | [1.0,2.0] | +-----------------------------------------------------------+ os> source=people | eval `invalid_json` = json_extract('{"invalid": "json"') fetched rows / total rows = 1/1 +----------------+ | invalid_json | +----------------+ | null | +----------------+
JSON_KEYS
使用法: json_keys(jsonStr) は最も外側の JSON オブジェクトのすべてのキーを配列として返します。
引数タイプ: STRING。有効な JSON オブジェクト形式の STRING 式。
戻り値の型: ARRAY[STRING]。この関数は、他の有効な JSON 文字列、空の文字列、または無効な JSON に対して NULL を返します。
例:
os> source=people | eval `keys` = json_keys('{"f1":"abc","f2":{"f3":"a","f4":"b"}}') fetched rows / total rows = 1/1 +------------+ | keus | +------------+ | [f1, f2] | +------------+ os> source=people | eval `keys` = json_keys('[1,2,3,{"f1":1,"f2":[5,6]},4]') fetched rows / total rows = 1/1 +--------+ | keys | +--------+ | null | +--------+
JSON_VALID
使用法: json_valid(jsonStr) は JSON 文字列が有効な JSON 構文を使用しているかどうかを評価し、TRUE または FALSE を返します。
引数タイプ: STRING
戻り値の型: BOOLEAN
例:
os> source=people | eval `valid_json` = json_valid('[1,2,3,4]'), `invalid_json` = json_valid('{"invalid": "json"') | feilds `valid_json`, `invalid_json` fetched rows / total rows = 1/1 +--------------+----------------+ | valid_json | invalid_json | +--------------+----------------+ | True | False | +--------------+----------------+ os> source=accounts | where json_valid('[1,2,3,4]') and isnull(email) | fields account_number, email fetched rows / total rows = 1/1 +------------------+---------+ | account_number | email | |------------------+---------| | 13 | null | +------------------+---------+
PPL Lambda 関数
注記
この PPL 関数をサポートする AWS データソース統合を確認するには、「関数」を参照してください。
EXISTS
使用法: exists(array,
lambda) は Lambda 述語が配列内の 1 つ以上の要素を保持するかどうかを評価します。
引数タイプ: ARRAY、LAMBDA
戻り値の型: BOOLEAN。配列内の少なくとも 1 つの要素が Lambda 述語を満たす場合は TRUE を返し、それ以外の場合は FALSE を返します。
例:
os> source=people | eval array = json_array(1, -1, 2), result = exists(array, x -> x > 0) | fields result fetched rows / total rows = 1/1 +-----------+ | result | +-----------+ | true | +-----------+ os> source=people | eval array = json_array(-1, -3, -2), result = exists(array, x -> x > 0) | fields result fetched rows / total rows = 1/1 +-----------+ | result | +-----------+ | false | +-----------+
FILTER
使用法: filter(array,
lambda) は、指定された Lambda 関数を使用して入力配列をフィルタリングします。
引数タイプ: ARRAY、LAMBDA
戻り値の型: ARRAY。Lambda 述語を満たす入力配列内のすべての要素を含む ARRAY。
例:
os> source=people | eval array = json_array(1, -1, 2), result = filter(array, x -> x > 0) | fields result fetched rows / total rows = 1/1 +-----------+ | result | +-----------+ | [1, 2] | +-----------+ os> source=people | eval array = json_array(-1, -3, -2), result = filter(array, x -> x > 0) | fields result fetched rows / total rows = 1/1 +-----------+ | result | +-----------+ | [] | +-----------+
TRANSFORM
使用法: transform(array,
lambda) は Lambda 変換関数を使用して配列内の要素を変換します。2 番目の引数は、バイナリ Lambda 関数を使用する場合の要素のインデックスを意味します。これは、機能プログラミングの map に類似しています。
引数タイプ: ARRAY、LAMBDA
戻り値の型: ARRAY。Lambda 変換関数を入力配列の各要素に適用した結果を含む ARRAY。
例:
os> source=people | eval array = json_array(1, 2, 3), result = transform(array, x -> x + 1) | fields result fetched rows / total rows = 1/1 +--------------+ | result | +--------------+ | [2, 3, 4] | +--------------+ os> source=people | eval array = json_array(1, 2, 3), result = transform(array, (x, i) -> x + i) | fields result fetched rows / total rows = 1/1 +--------------+ | result | +--------------+ | [1, 3, 5] | +--------------+
REDUCE
使用法: reduce(array, start,
merge_lambda, finish_lambda) は Lambda 関数を適用することで、配列を 1 つの値に集約します。この関数は、開始値とすべての配列要素に merge_lambda を適用し、結果に finish_lambda を適用します。
引数タイプ: ARRAY、ANY、LAMBDA、LAMBDA
戻り値の型: ANY。Lambda 関数を開始値と入力配列に適用した最終結果。
例:
os> source=people | eval array = json_array(1, 2, 3), result = reduce(array, 0, (acc, x) -> acc + x) | fields result fetched rows / total rows = 1/1 +-----------+ | result | +-----------+ | 6 | +-----------+ os> source=people | eval array = json_array(1, 2, 3), result = reduce(array, 10, (acc, x) -> acc + x) | fields result fetched rows / total rows = 1/1 +-----------+ | result | +-----------+ | 16 | +-----------+ os> source=people | eval array = json_array(1, 2, 3), result = reduce(array, 0, (acc, x) -> acc + x, acc -> acc * 10) | fields result fetched rows / total rows = 1/1 +-----------+ | result | +-----------+ | 60 | +-----------+
PPL 数学関数
注記
この PPL 関数をサポートする AWS データソース統合を確認するには、「関数」を参照してください。
ABS
使用法: ABS(x)
は x の絶対値を計算します。
引数タイプ: INTEGER/LONG/FLOAT/DOUBLE
戻り値の型: INTEGER/LONG/FLOAT/DOUBLE
例:
os> source=people | eval `ABS(-1)` = ABS(-1) | fields `ABS(-1)` fetched rows / total rows = 1/1 +-----------+ | ABS(-1) | |-----------| | 1 | +-----------+
ACOS
使用法: ACOS(x) は x のアークコサインを計算します。x が -1~1 の範囲にない場合、NULL を返します。
引数タイプ: INTEGER/LONG/FLOAT/DOUBLE
戻り値の型: DOUBLE
例:
os> source=people | eval `ACOS(0)` = ACOS(0) | fields `ACOS(0)` fetched rows / total rows = 1/1 +--------------------+ | ACOS(0) | |--------------------| | 1.5707963267948966 | +--------------------+
ASIN
使用法: asin(x) は x のアークサインを計算します。x が -1~1 の範囲にない場合、NULL を返します。
引数タイプ: INTEGER/LONG/FLOAT/DOUBLE
戻り値の型: DOUBLE
例:
os> source=people | eval `ASIN(0)` = ASIN(0) | fields `ASIN(0)` fetched rows / total rows = 1/1 +-----------+ | ASIN(0) | |-----------| | 0.0 | +-----------+
ATAN
使用法: ATAN(x) は x のアークタンジェントを計算します。atan(y, x) は y/x のアークタンジェントを計算します。ただし、両引数の符号によって結果の象限が決まります。
引数タイプ: INTEGER/LONG/FLOAT/DOUBLE
戻り値の型: DOUBLE
例:
os> source=people | eval `ATAN(2)` = ATAN(2), `ATAN(2, 3)` = ATAN(2, 3) | fields `ATAN(2)`, `ATAN(2, 3)` fetched rows / total rows = 1/1 +--------------------+--------------------+ | ATAN(2) | ATAN(2, 3) | |--------------------+--------------------| | 1.1071487177940904 | 0.5880026035475675 | +--------------------+--------------------+
ATAN2
使用法: ATAN2(y, x) は y/x のアークタンジェントを計算しますが、両引数の符号によって結果の象限が決まります。
引数タイプ: INTEGER/LONG/FLOAT/DOUBLE
戻り値の型: DOUBLE
例:
os> source=people | eval `ATAN2(2, 3)` = ATAN2(2, 3) | fields `ATAN2(2, 3)` fetched rows / total rows = 1/1 +--------------------+ | ATAN2(2, 3) | |--------------------| | 0.5880026035475675 | +--------------------+
CBRT
使用法: CBRT は数値の立方根を計算します。
引数タイプ: INTEGER/LONG/FLOAT/DOUBLE
戻り値の型: DOUBLE:
INTEGER/LONG/FLOAT/DOUBLE -> DOUBLE
例:
opensearchsql> source=location | eval `CBRT(8)` = CBRT(8), `CBRT(9.261)` = CBRT(9.261), `CBRT(-27)` = CBRT(-27) | fields `CBRT(8)`, `CBRT(9.261)`, `CBRT(-27)`; fetched rows / total rows = 2/2 +-----------+---------------+-------------+ | CBRT(8) | CBRT(9.261) | CBRT(-27) | |-----------+---------------+-------------| | 2.0 | 2.1 | -3.0 | | 2.0 | 2.1 | -3.0 | +-----------+---------------+-------------+
CEIL
使用法: CEILING 関数のエイリアス。CEILING(T) は値 T の上限を取ります。
制限: CEILING は IEEE 754 ダブルタイプが保存時に 10 進数を表示する場合にのみ、予想どおりに動作します。
引数タイプ: INTEGER/LONG/FLOAT/DOUBLE
戻り値の型: LONG
例:
os> source=people | eval `CEILING(0)` = CEILING(0), `CEILING(50.00005)` = CEILING(50.00005), `CEILING(-50.00005)` = CEILING(-50.00005) | fields `CEILING(0)`, `CEILING(50.00005)`, `CEILING(-50.00005)` fetched rows / total rows = 1/1 +--------------+---------------------+----------------------+ | CEILING(0) | CEILING(50.00005) | CEILING(-50.00005) | |--------------+---------------------+----------------------| | 0 | 51 | -50 | +--------------+---------------------+----------------------+ os> source=people | eval `CEILING(3147483647.12345)` = CEILING(3147483647.12345), `CEILING(113147483647.12345)` = CEILING(113147483647.12345), `CEILING(3147483647.00001)` = CEILING(3147483647.00001) | fields `CEILING(3147483647.12345)`, `CEILING(113147483647.12345)`, `CEILING(3147483647.00001)` fetched rows / total rows = 1/1 +-----------------------------+-------------------------------+-----------------------------+ | CEILING(3147483647.12345) | CEILING(113147483647.12345) | CEILING(3147483647.00001) | |-----------------------------+-------------------------------+-----------------------------| | 3147483648 | 113147483648 | 3147483648 | +-----------------------------+-------------------------------+-----------------------------+
CONV
使用法: CONV(x, a, b) は数値 x を a ベースから b ベースに変換します。
引数タイプ: x: STRING、a: INTEGER、b: INTEGER
戻り値の型: STRING
例:
os> source=people | eval `CONV('12', 10, 16)` = CONV('12', 10, 16), `CONV('2C', 16, 10)` = CONV('2C', 16, 10), `CONV(12, 10, 2)` = CONV(12, 10, 2), `CONV(1111, 2, 10)` = CONV(1111, 2, 10) | fields `CONV('12', 10, 16)`, `CONV('2C', 16, 10)`, `CONV(12, 10, 2)`, `CONV(1111, 2, 10)` fetched rows / total rows = 1/1 +----------------------+----------------------+-------------------+---------------------+ | CONV('12', 10, 16) | CONV('2C', 16, 10) | CONV(12, 10, 2) | CONV(1111, 2, 10) | |----------------------+----------------------+-------------------+---------------------| | c | 44 | 1100 | 15 | +----------------------+----------------------+-------------------+---------------------+
COS
使用法: COS(x) は x のコサインを計算します。x はラジアンで表されます。
引数タイプ: INTEGER/LONG/FLOAT/DOUBLE
戻り値の型: DOUBLE
例:
os> source=people | eval `COS(0)` = COS(0) | fields `COS(0)` fetched rows / total rows = 1/1 +----------+ | COS(0) | |----------| | 1.0 | +----------+
COT
使用法: COT(x) は x のコタンジェントを計算します。x が 0 に等しい場合、範囲外エラーを返します。
引数タイプ: INTEGER/LONG/FLOAT/DOUBLE
戻り値の型: DOUBLE
例:
os> source=people | eval `COT(1)` = COT(1) | fields `COT(1)` fetched rows / total rows = 1/1 +--------------------+ | COT(1) | |--------------------| | 0.6420926159343306 | +--------------------+
CRC32
使用法: CRC32 は巡回冗長検査値を計算し、32 ビットの符号なし値を返します。
引数タイプ: STRING
戻り値の型: LONG
例:
os> source=people | eval `CRC32('MySQL')` = CRC32('MySQL') | fields `CRC32('MySQL')` fetched rows / total rows = 1/1 +------------------+ | CRC32('MySQL') | |------------------| | 3259397556 | +------------------+
DEGREES
使用法: DEGREES(x) は x をラジアンから度に変換します。
引数タイプ: INTEGER/LONG/FLOAT/DOUBLE
戻り値の型: DOUBLE
例:
os> source=people | eval `DEGREES(1.57)` = DEGREES(1.57) | fields `DEGREES(1.57)` fetched rows / total rows = 1/1 +-------------------+ | DEGREES(1.57) | |-------------------| | 89.95437383553924 | +-------------------+
E
使用法: E() はオイラー数を返します。
戻り値の型: DOUBLE
例:
os> source=people | eval `E()` = E() | fields `E()` fetched rows / total rows = 1/1 +-------------------+ | E() | |-------------------| | 2.718281828459045 | +-------------------+
EXP
使用法: EXP(x) は e の x 乗を返します。
引数タイプ: INTEGER/LONG/FLOAT/DOUBLE
戻り値の型: DOUBLE
例:
os> source=people | eval `EXP(2)` = EXP(2) | fields `EXP(2)` fetched rows / total rows = 1/1 +------------------+ | EXP(2) | |------------------| | 7.38905609893065 | +------------------+
FLOOR
使用法: FLOOR(T) は値 T の下限を取ります。
制限: FLOOR は IEEE 754 ダブルタイプが保存時に 10 進数を表示する場合にのみ、予想どおりに動作します。
引数タイプ: INTEGER/LONG/FLOAT/DOUBLE
戻り値の型: LONG
例:
os> source=people | eval `FLOOR(0)` = FLOOR(0), `FLOOR(50.00005)` = FLOOR(50.00005), `FLOOR(-50.00005)` = FLOOR(-50.00005) | fields `FLOOR(0)`, `FLOOR(50.00005)`, `FLOOR(-50.00005)` fetched rows / total rows = 1/1 +------------+-------------------+--------------------+ | FLOOR(0) | FLOOR(50.00005) | FLOOR(-50.00005) | |------------+-------------------+--------------------| | 0 | 50 | -51 | +------------+-------------------+--------------------+ os> source=people | eval `FLOOR(3147483647.12345)` = FLOOR(3147483647.12345), `FLOOR(113147483647.12345)` = FLOOR(113147483647.12345), `FLOOR(3147483647.00001)` = FLOOR(3147483647.00001) | fields `FLOOR(3147483647.12345)`, `FLOOR(113147483647.12345)`, `FLOOR(3147483647.00001)` fetched rows / total rows = 1/1 +---------------------------+-----------------------------+---------------------------+ | FLOOR(3147483647.12345) | FLOOR(113147483647.12345) | FLOOR(3147483647.00001) | |---------------------------+-----------------------------+---------------------------| | 3147483647 | 113147483647 | 3147483647 | +---------------------------+-----------------------------+---------------------------+ os> source=people | eval `FLOOR(282474973688888.022)` = FLOOR(282474973688888.022), `FLOOR(9223372036854775807.022)` = FLOOR(9223372036854775807.022), `FLOOR(9223372036854775807.0000001)` = FLOOR(9223372036854775807.0000001) | fields `FLOOR(282474973688888.022)`, `FLOOR(9223372036854775807.022)`, `FLOOR(9223372036854775807.0000001)` fetched rows / total rows = 1/1 +------------------------------+----------------------------------+--------------------------------------+ | FLOOR(282474973688888.022) | FLOOR(9223372036854775807.022) | FLOOR(9223372036854775807.0000001) | |------------------------------+----------------------------------+--------------------------------------| | 282474973688888 | 9223372036854775807 | 9223372036854775807 | +------------------------------+----------------------------------+--------------------------------------+
LN
使用法: LN(x) は x の自然対数を返します。
引数タイプ: INTEGER/LONG/FLOAT/DOUBLE
戻り値の型: DOUBLE
例:
os> source=people | eval `LN(2)` = LN(2) | fields `LN(2)` fetched rows / total rows = 1/1 +--------------------+ | LN(2) | |--------------------| | 0.6931471805599453 | +--------------------+
LOG
使用法: LOG(x) は x の自然対数 (底が e の対数) を返します。log(B, x) は log(x)/log(B) と同等です。
引数タイプ: INTEGER/LONG/FLOAT/DOUBLE
戻り値の型: DOUBLE
例:
os> source=people | eval `LOG(2)` = LOG(2), `LOG(2, 8)` = LOG(2, 8) | fields `LOG(2)`, `LOG(2, 8)` fetched rows / total rows = 1/1 +--------------------+-------------+ | LOG(2) | LOG(2, 8) | |--------------------+-------------| | 0.6931471805599453 | 3.0 | +--------------------+-------------+
LOG2
使用法: LOG2(x) は log(x)/log(2) に相当します。
引数タイプ: INTEGER/LONG/FLOAT/DOUBLE
戻り値の型: DOUBLE
例:
os> source=people | eval `LOG2(8)` = LOG2(8) | fields `LOG2(8)` fetched rows / total rows = 1/1 +-----------+ | LOG2(8) | |-----------| | 3.0 | +-----------+
LOG10
使用法: LOG10(x) は log(x)/log(10) に相当します。
引数タイプ: INTEGER/LONG/FLOAT/DOUBLE
戻り値の型: DOUBLE
例:
os> source=people | eval `LOG10(100)` = LOG10(100) | fields `LOG10(100)` fetched rows / total rows = 1/1 +--------------+ | LOG10(100) | |--------------| | 2.0 | +--------------+
MOD
使用法: MOD(n, m) は数値 n の残りを m で割って計算します。
引数タイプ: INTEGER/LONG/FLOAT/DOUBLE
戻り値の型: m がゼロ以外の値の場合、n 型と m 型の間でより広い型。m が 0 に等しい場合、NULL を返します。
例:
os> source=people | eval `MOD(3, 2)` = MOD(3, 2), `MOD(3.1, 2)` = MOD(3.1, 2) | fields `MOD(3, 2)`, `MOD(3.1, 2)` fetched rows / total rows = 1/1 +-------------+---------------+ | MOD(3, 2) | MOD(3.1, 2) | |-------------+---------------| | 1 | 1.1 | +-------------+---------------+
PI
使用法: PI() は定数 pi を返します。
戻り値の型: DOUBLE
例:
os> source=people | eval `PI()` = PI() | fields `PI()` fetched rows / total rows = 1/1 +-------------------+ | PI() | |-------------------| | 3.141592653589793 | +-------------------+
POW
使用法: POW(x, y) は x の y 乗の値を計算します。不正な入力は NULL 結果を返します。
引数タイプ: INTEGER/LONG/FLOAT/DOUBLE
戻り値の型: DOUBLE
シノニム: POWER(_,
_)
例:
os> source=people | eval `POW(3, 2)` = POW(3, 2), `POW(-3, 2)` = POW(-3, 2), `POW(3, -2)` = POW(3, -2) | fields `POW(3, 2)`, `POW(-3, 2)`, `POW(3, -2)` fetched rows / total rows = 1/1 +-------------+--------------+--------------------+ | POW(3, 2) | POW(-3, 2) | POW(3, -2) | |-------------+--------------+--------------------| | 9.0 | 9.0 | 0.1111111111111111 | +-------------+--------------+--------------------+
POWER
使用法: POWER(x, y) は x の y 乗の値を計算します。不正な入力は NULL 結果を返します。
引数タイプ: INTEGER/LONG/FLOAT/DOUBLE
戻り値の型: DOUBLE
シノニム: POW(_,
_)
例:
os> source=people | eval `POWER(3, 2)` = POWER(3, 2), `POWER(-3, 2)` = POWER(-3, 2), `POWER(3, -2)` = POWER(3, -2) | fields `POWER(3, 2)`, `POWER(-3, 2)`, `POWER(3, -2)` fetched rows / total rows = 1/1 +---------------+----------------+--------------------+ | POWER(3, 2) | POWER(-3, 2) | POWER(3, -2) | |---------------+----------------+--------------------| | 9.0 | 9.0 | 0.1111111111111111 | +---------------+----------------+--------------------+
RADIANS
使用法: RADIANS(x) は x を度からラジアンに変換します。
引数タイプ: INTEGER/LONG/FLOAT/DOUBLE
戻り値の型: DOUBLE
例:
os> source=people | eval `RADIANS(90)` = RADIANS(90) | fields `RADIANS(90)` fetched rows / total rows = 1/1 +--------------------+ | RADIANS(90) | |--------------------| | 1.5707963267948966 | +--------------------+
RAND
使用法: RAND()/RAND(N) は、範囲 0 <= 値 < 1.0 のランダム浮動小数点値を返します。整数 N を指定すると、関数は実行前にシードを初期化します。この挙動の一つの意味は、同一の引数 N に対して rand(N) は毎回同じ値を返し、列値の繰り返し可能なシーケンスを生成するということです。
引数タイプ: INTEGER
戻り値の型: FLOAT
例:
os> source=people | eval `RAND(3)` = RAND(3) | fields `RAND(3)` fetched rows / total rows = 1/1 +------------+ | RAND(3) | |------------| | 0.73105735 | +------------+
ROUND
使用法: ROUND(x, d) は引数 x を小数点以下 d 桁まで丸めます。d を指定しない場合、デフォルトは 0 です。
引数タイプ: INTEGER/LONG/FLOAT/DOUBLE
戻り値の型マップ:
-
(INTEGER/LONG [,INTEGER]) -> LONG
-
(FLOAT/DOUBLE [,INTEGER]) -> LONG
例:
os> source=people | eval `ROUND(12.34)` = ROUND(12.34), `ROUND(12.34, 1)` = ROUND(12.34, 1), `ROUND(12.34, -1)` = ROUND(12.34, -1), `ROUND(12, 1)` = ROUND(12, 1) | fields `ROUND(12.34)`, `ROUND(12.34, 1)`, `ROUND(12.34, -1)`, `ROUND(12, 1)` fetched rows / total rows = 1/1 +----------------+-------------------+--------------------+----------------+ | ROUND(12.34) | ROUND(12.34, 1) | ROUND(12.34, -1) | ROUND(12, 1) | |----------------+-------------------+--------------------+----------------| | 12.0 | 12.3 | 10.0 | 12 | +----------------+-------------------+--------------------+----------------+
SIGN
使用法: SIGN は、引数が負の場合は -1、ゼロの場合は 0、正の場合は 1 を返します。
引数タイプ: INTEGER/LONG/FLOAT/DOUBLE
戻り値の型: INTEGER
例:
os> source=people | eval `SIGN(1)` = SIGN(1), `SIGN(0)` = SIGN(0), `SIGN(-1.1)` = SIGN(-1.1) | fields `SIGN(1)`, `SIGN(0)`, `SIGN(-1.1)` fetched rows / total rows = 1/1 +-----------+-----------+--------------+ | SIGN(1) | SIGN(0) | SIGN(-1.1) | |-----------+-----------+--------------| | 1 | 0 | -1 | +-----------+-----------+--------------+
SIN
使用法: sin(x) は x のサインを計算します。x はラジアンで表されます。
引数タイプ: INTEGER/LONG/FLOAT/DOUBLE
戻り値の型: DOUBLE
例:
os> source=people | eval `SIN(0)` = SIN(0) | fields `SIN(0)` fetched rows / total rows = 1/1 +----------+ | SIN(0) | |----------| | 0.0 | +----------+
SQRT
使用法: SQRT は負でない数値の平方根を計算します。
引数タイプ: INTEGER/LONG/FLOAT/DOUBLE
戻り値の型マップ:
-
(負以外) INTEGER/LONG/FLOAT/DOUBLE -> DOUBLE
-
(負) INTEGER/LONG/FLOAT/DOUBLE -> NULL
例:
os> source=people | eval `SQRT(4)` = SQRT(4), `SQRT(4.41)` = SQRT(4.41) | fields `SQRT(4)`, `SQRT(4.41)` fetched rows / total rows = 1/1 +-----------+--------------+ | SQRT(4) | SQRT(4.41) | |-----------+--------------| | 2.0 | 2.1 | +-----------+--------------+
PPL 文字列関数
注記
この PPL 関数をサポートする AWS データソース統合を確認するには、「関数」を参照してください。
CONCAT
使用法: CONCAT(str1,
str2, ...., str_9) は最大 9 つの文字列を合計します。
引数の型:
-
STRING、STRING、....、STRING
-
戻り値の型: STRING
例:
os> source=people | eval `CONCAT('hello', 'world')` = CONCAT('hello', 'world'), `CONCAT('hello ', 'whole ', 'world', '!')` = CONCAT('hello ', 'whole ', 'world', '!') | fields `CONCAT('hello', 'world')`, `CONCAT('hello ', 'whole ', 'world', '!')` fetched rows / total rows = 1/1 +----------------------------+--------------------------------------------+ | CONCAT('hello', 'world') | CONCAT('hello ', 'whole ', 'world', '!') | |----------------------------+--------------------------------------------| | helloworld | hello whole world! | +----------------------------+--------------------------------------------+
CONCAT_WS
使用法: CONCAT_WS(sep, str1,
str2) は指定された区切り文字を使用して 2 つ以上の文字列を連結します。
引数の型:
-
STRING、STRING、....、STRING
-
戻り値の型: STRING
例:
os> source=people | eval `CONCAT_WS(',', 'hello', 'world')` = CONCAT_WS(',', 'hello', 'world') | fields `CONCAT_WS(',', 'hello', 'world')` fetched rows / total rows = 1/1 +------------------------------------+ | CONCAT_WS(',', 'hello', 'world') | |------------------------------------| | hello,world | +------------------------------------+
LENGTH
使用法: length(str) はバイト単位で測定された入力文字列の長さを返します。
引数の型:
-
STRING
-
戻り値の型: INTEGER
例:
os> source=people | eval `LENGTH('helloworld')` = LENGTH('helloworld') | fields `LENGTH('helloworld')` fetched rows / total rows = 1/1 +------------------------+ | LENGTH('helloworld') | |------------------------| | 10 | +------------------------+
LOWER
使用法: lower(string) は入力文字列を小文字に変換します。
引数の型:
-
STRING
-
戻り値の型: STRING
例:
os> source=people | eval `LOWER('helloworld')` = LOWER('helloworld'), `LOWER('HELLOWORLD')` = LOWER('HELLOWORLD') | fields `LOWER('helloworld')`, `LOWER('HELLOWORLD')` fetched rows / total rows = 1/1 +-----------------------+-----------------------+ | LOWER('helloworld') | LOWER('HELLOWORLD') | |-----------------------+-----------------------| | helloworld | helloworld | +-----------------------+-----------------------+
LTRIM
使用法: ltrim(str) は入力文字列から先頭のスペース文字を削除します。
引数の型:
-
STRING
-
戻り値の型: STRING
例:
os> source=people | eval `LTRIM(' hello')` = LTRIM(' hello'), `LTRIM('hello ')` = LTRIM('hello ') | fields `LTRIM(' hello')`, `LTRIM('hello ')` fetched rows / total rows = 1/1 +---------------------+---------------------+ | LTRIM(' hello') | LTRIM('hello ') | |---------------------+---------------------| | hello | hello | +---------------------+---------------------+
POSITION
使用法: POSITION(substr
IN str) は文字列内の部分文字列の最初の出現位置を返します。サブ文字列が文字列に含まれていない場合、0 を返します。引数のいずれかが NULL の場合、NULL を返します。
引数の型:
-
STRING、STRING
-
戻り値の型 INTEGER
例:
os> source=people | eval `POSITION('world' IN 'helloworld')` = POSITION('world' IN 'helloworld'), `POSITION('invalid' IN 'helloworld')`= POSITION('invalid' IN 'helloworld') | fields `POSITION('world' IN 'helloworld')`, `POSITION('invalid' IN 'helloworld')` fetched rows / total rows = 1/1 +-------------------------------------+---------------------------------------+ | POSITION('world' IN 'helloworld') | POSITION('invalid' IN 'helloworld') | |-------------------------------------+---------------------------------------| | 6 | 0 | +-------------------------------------+---------------------------------------+
REVERSE
使用法: REVERSE(str) は入力文字列の逆引き文字列を返します。
引数の型:
-
STRING
-
戻り値の型: STRING
例:
os> source=people | eval `REVERSE('abcde')` = REVERSE('abcde') | fields `REVERSE('abcde')` fetched rows / total rows = 1/1 +--------------------+ | REVERSE('abcde') | |--------------------| | edcba | +--------------------+
RIGHT
使用法: right(str,
len) は入力文字列から右端の文字を返します。サブ文字列が文字列に含まれていない場合、0 を返します。引数のいずれかが NULL の場合、NULL を返します。
引数の型:
-
STRING、INTEGER
-
戻り値の型: STRING
例:
os> source=people | eval `RIGHT('helloworld', 5)` = RIGHT('helloworld', 5), `RIGHT('HELLOWORLD', 0)` = RIGHT('HELLOWORLD', 0) | fields `RIGHT('helloworld', 5)`, `RIGHT('HELLOWORLD', 0)` fetched rows / total rows = 1/1 +--------------------------+--------------------------+ | RIGHT('helloworld', 5) | RIGHT('HELLOWORLD', 0) | |--------------------------+--------------------------| | world | | +--------------------------+--------------------------+
RTRIM
使用法: rtrim(str) は入力文字列から末尾のスペース文字を削除します。
引数の型:
-
STRING
-
戻り値の型: STRING
例:
os> source=people | eval `RTRIM(' hello')` = RTRIM(' hello'), `RTRIM('hello ')` = RTRIM('hello ') | fields `RTRIM(' hello')`, `RTRIM('hello ')` fetched rows / total rows = 1/1 +---------------------+---------------------+ | RTRIM(' hello') | RTRIM('hello ') | |---------------------+---------------------| | hello | hello | +---------------------+---------------------+
SUBSTRING
使用法: substring(str,
start) または substring(str, start,
length) は、入力文字列の部分文字列を返します。長さを指定しない場合、開始位置から文字列全体を返します。
引数の型:
-
STRING、INTEGER、INTEGER
-
戻り値の型: STRING
例:
os> source=people | eval `SUBSTRING('helloworld', 5)` = SUBSTRING('helloworld', 5), `SUBSTRING('helloworld', 5, 3)` = SUBSTRING('helloworld', 5, 3) | fields `SUBSTRING('helloworld', 5)`, `SUBSTRING('helloworld', 5, 3)` fetched rows / total rows = 1/1 +------------------------------+---------------------------------+ | SUBSTRING('helloworld', 5) | SUBSTRING('helloworld', 5, 3) | |------------------------------+---------------------------------| | oworld | owo | +------------------------------+---------------------------------+
TRIM
使用法: trim(string) は入力文字列から先頭と末尾の空白を削除します。
引数の型:
-
STRING
-
戻り値の型: STRING
例:
os> source=people | eval `TRIM(' hello')` = TRIM(' hello'), `TRIM('hello ')` = TRIM('hello ') | fields `TRIM(' hello')`, `TRIM('hello ')` fetched rows / total rows = 1/1 +--------------------+--------------------+ | TRIM(' hello') | TRIM('hello ') | |--------------------+--------------------| | hello | hello | +--------------------+--------------------+
UPPER
使用法: upper(string) は入力文字列を大文字に変換します。
引数の型:
-
STRING
-
戻り値の型: STRING
例:
os> source=people | eval `UPPER('helloworld')` = UPPER('helloworld'), `UPPER('HELLOWORLD')` = UPPER('HELLOWORLD') | fields `UPPER('helloworld')`, `UPPER('HELLOWORLD')` fetched rows / total rows = 1/1 +-----------------------+-----------------------+ | UPPER('helloworld') | UPPER('HELLOWORLD') | |-----------------------+-----------------------| | HELLOWORLD | HELLOWORLD | +-----------------------+-----------------------+
PPL 型変換関数
注記
この PPL 関数をサポートする AWS データソース統合を確認するには、「関数」を参照してください。
TRIM
使用法: cast(expr as
dateType) は expr を dataType にキャストし、dataType の値を返します。
次の変換ルールが適用されます。
| Src/Target | STRING | NUMBER | BOOLEAN | TIMESTAMP | DATE | TIME |
|---|---|---|---|---|---|---|
| STRING | Note1 | Note1 | TIMESTAMP() | DATE() | TIME() | |
| NUMBER | Note1 | v!=0 | 該当なし | 該当なし | 該当なし | |
| BOOLEAN | Note1 | v?1:0 | 該当なし | 該当なし | 該当なし | |
| TIMESTAMP | Note1 | 該当なし | 該当なし | DATE() | TIME() | |
| DATE | Note1 | 該当なし | 該当なし | 該当なし | 該当なし | |
| TIME | Note1 | 該当なし | 該当なし | 該当なし | 該当なし |
文字列へのキャストの例:
os> source=people | eval `cbool` = CAST(true as string), `cint` = CAST(1 as string), `cdate` = CAST(CAST('2012-08-07' as date) as string) | fields `cbool`, `cint`, `cdate` fetched rows / total rows = 1/1 +---------+--------+------------+ | cbool | cint | cdate | |---------+--------+------------| | true | 1 | 2012-08-07 | +---------+--------+------------+
数字へのキャストの例:
os> source=people | eval `cbool` = CAST(true as int), `cstring` = CAST('1' as int) | fields `cbool`, `cstring` fetched rows / total rows = 1/1 +---------+-----------+ | cbool | cstring | |---------+-----------| | 1 | 1 | +---------+-----------+
日付へのキャストの例:
os> source=people | eval `cdate` = CAST('2012-08-07' as date), `ctime` = CAST('01:01:01' as time), `ctimestamp` = CAST('2012-08-07 01:01:01' as timestamp) | fields `cdate`, `ctime`, `ctimestamp` fetched rows / total rows = 1/1 +------------+----------+---------------------+ | cdate | ctime | ctimestamp | |------------+----------+---------------------| | 2012-08-07 | 01:01:01 | 2012-08-07 01:01:01 | +------------+----------+---------------------+
連鎖キャストの例:
os> source=people | eval `cbool` = CAST(CAST(true as string) as boolean) | fields `cbool` fetched rows / total rows = 1/1 +---------+ | cbool | |---------| | True | +---------+