Monitoring Query Language リファレンス

これは、Cloud Monitoring の Monitoring Query Language のリファレンス マニュアルです。 ここでは次のトピックを扱います。

  • Monitoring Query Language がアクセスする時系列データベースの基礎となるデータモデル。

  • クエリの構造とセマンティクス。

  • クエリの作成元となるオペレーションと関数のそれぞれについての説明。

データモデル

Cloud Monitoring は、モニタリング対象(モニタリング対象リソース)について記録されたすべての測定値を含む時系列データベースを使用します。 ここでは、この時系列データベースの論理構造について説明します。

基本的な要素は「時系列」で、そのデータはモニタリング対象リソースのモニタリング測定値で構成されます。

データベース内の時系列はリレーショナル テーブルに論理的に編成されており、各テーブルには共通の意味と構造を持つ時系列が格納されています。 テーブルは、データを返し、グラフを生成して、アラートを計算するクエリによって参照されます。

データベースにはメタデータも含まれます。メタデータでは、モニタリング対象リソースに関連付けられた値が徐々に変化し、ユーザー構成またはモニタリング対象リソースタイプを実装するサービスによって設定されます。

時系列

時系列とは、名前付きの一連のポイントであり、各ポイントは測定値とその値が適用された時刻を表します。時系列は、時系列の構造を指定するタイプ、時系列に一意の名前を付ける ID、時系列データを含む履歴の 3 つの部分で構成されます。 この 3 つの部分について、このセクションで説明します。

時系列タイプは、時系列識別子と時系列履歴の構造を指定します。次の 2 つの部分で構成されます。

  • モニタリング対象リソースタイプ こちらに記載)。Compute Engine インスタンス(gce_instance)または Cloud SQL データベース(cloudsql_database)などのモニタリングされるモニタリング対象リソースの特定の種類に名前が付けられます。これには、そのタイプのモニタリング対象リソースのインスタンスを一意に識別する一連のラベル記述子があります。

  • 指標タイプ こちらに記載)。モニタリング対象リソースで取得できる特定の種類の測定値を表します。たとえば、Compute Engine インスタンスによってディスクから読み取られたバイト数は compute.googleapis.com/instance/disk/read_bytes_count という指標で測定され、Cloud SQL データベースのデータ使用率は cloudsql.googleapis.com/database/disk/bytes_used という指標で測定されます。 指標タイプでは、測定値のタイプ、測定の単位、時系列の種類を指定します。同じものの異なる側面を測定する時系列を識別するラベル記述子を指定できます。たとえば、appengine.googleapis.com/memcache/operation_count 指標でカウントされるコマンドを示す command です。

モニタリング対象リソースタイプと指標タイプは、それぞれ MonitoredResourceDescriptorMetricDescriptor で表されます。これらはタイプを表します。それぞれに、モニタリング対象リソースまたは指標タイプの名前が含まれる type というフィールドがあります。

時系列識別子は、時系列の名前で、同じタイプのすべての時系列から一意に識別します。 これは、時系列タイプを構成するモニタリング対象リソースタイプと指標タイプに指定されたラベル記述子ごとに 1 つの値となる、値のセットで構成されます。

  • モニタリング対象リソースタイプのラベルは、時系列の測定が行われたモニタリング対象リソースの種類の特定のインスタンスを一意に識別します。たとえば、gce_instanceモニタリング対象リソースには、特定の Google Compute Engine 仮想マシンを一意に識別するラベル project_idinstance_idzone があります。

  • 指標タイプの各ラベルは、時系列で表される指定された指標の特定の種類の測定を識別します。 たとえば、appengine.googleapis.com/memcache/operation_count 指標でカウントされたコマンドのステータスを示す status は、ヒット数をカウントするある時系列に対して 'HIT' の値を持ち、ミスの数をカウントする別の時系列に対して 'MISS' の値を持つ場合があります。

時系列履歴は、時間の連続したポイントであり、1 つの値、または場合によっては複数の値(CPU 負荷や温度と湿度など)の同時測定値を表します。この測定値はポイントの範囲によって指定された時刻に適用されます。ポイントには 2 つの要素があります。

  • ポイントの時間の範囲 は、常に存在する終了時刻と、存在しない場合もある開始時刻から構成されます。開始時刻が存在しない場合、ポイントの範囲は終了時刻で指定される 1 つの時点になります。開始時刻を指定する場合は、終了時刻よりも前に指定する必要があり、ポイントの範囲は、開始時刻から終了時刻までの期間となります。

    時系列の 2 つのポイントが同じ範囲を持つことはできません。さらに、時系列のポイントの範囲は、後述する指標タイプによって指定された時系列の種類によって制約されます。

  • ポイントの value は、1 つの値、または場合によっては複数の値(CPU 負荷や温度と湿度など)の同時測定値を表します。この測定値はポイントの範囲によって指定された時刻に適用されます。指標タイプは、各測定値について説明し、名前と値タイプを指定します。複数の測定値が存在する場合、それらは特定の順序で配置されており、その順序でインデックスによって参照できます。

    時系列データベースに保存される一般的な時系列には、各点の値が 1 つ存在します。時系列タイプの指標の名前は URI であり、単一の値の名前は指標名の最後の / より後の部分です。 たとえば、指標 appengine.googleapis.com/memcache/operation_count には operation_count という名前の値列があります。

    クエリの出力である時系列には、タイプ、名前、順序がクエリによって指定された複数のポイントが含まれる場合があります。

    指標タイプは、IntDoubleDistribution のタイプの場合、時系列値の測定単位も指定できます。単位には測定単位の統一コード(UCUM)のサブセットが使用されます。たとえば、ms はミリ秒、By はバイトです。詳しくは、測定単位をご覧ください。

ポイントの各値には特定の値のタイプがあり、これは時系列タイプの指標タイプによって指定されます。また、時系列識別子の各ラベルには、時系列タイプのモニタリング対象リソースまたは指標タイプのラベル記述子によって指定される値のタイプがあります。値のタイプは次のとおりです。

  • Int: 64 ビット符号付き整数。

  • String: UTF-8 でエンコードされた Unicode 文字列。

  • Bool: ブール値。

  • Double: 64 ビット IEEE 浮動小数点値。

  • Distribution: Double値の母集団(集合)のサマリー記述を提供するヒストグラムと統計情報を含む複雑な値。この値の各要素は次のとおりです。

    • 母集団の値の数のカウント
    • 母集団の値の合計
    • 母集団の値の平方偏差和。
    • ヒストグラム内のバケット間の境界を示すバケット仕様。バケットには、バケットの下限と上限の間に存在する値の数が含まれます。
    • 各バケットに含まれる値の数を示すヒストグラム。

    これらの各要素は、母集団の平均分散標準偏差パーセンタイルの推定値をさらに計算するのに十分です。

ポイント値のタイプは上記のいずれかです。時系列識別子のラベルタイプは、StringIntBool のいずれかです。

これらのタイプに加えて、ポイントの開始時刻と終了時刻の間に存在するタイプ、またはクエリで時刻と期間を記述するために使用されるタイプがさらに 2 つあります。

  • Date: Unix エポックからの経過時間として測定された特定の時点。これは、特定の時点のタイムゾーンに依存しない表現です。ポイントの開始時刻と終了時刻はこのタイプです。

  • Duration: 期間。この時間には特定の測定単位はありませんが(分解能はマイクロ秒レベルです)、Int または Double に変換するときに特定の単位(例: 秒)を取ります。

それぞれの型(Date と Duration を除く)の値のセットには、特定の値が存在しないことを示す no-value という値が含まれます。これは、次の 2 つのケースで使用されます。

  • 特定の値が不明な場合。たとえば、値の計算を妨げるエラー(ゼロ除算など)がある場合。

  • ラベルが時系列タイプで必要ですが、値が不明な場合、no-value が時系列識別子のラベルの値になります。 これは、指標が収集されたときに値が不明な場合や、クエリによって時系列が生成され、ラベル値を生成する計算によって値が生成されなかった場合に発生します。no-value は個別の値であるため、指定されたラベルの実際の値を持つ他の識別子と時系列識別子を区別します。

no-value は IEEE NaN、および空の文字列である String 値とは異なります。ポイント内のどの値も no-value にすることはできません。

時系列の種類は、時系列内のポイントの値の意味を示し、各ポイントの範囲を制限します。時系列には次の 3 つの種類があります。

  • Gauge: Gauge 時系列内のポイントの値は、そのポイントの終了時間に対して測定された値です。Gauge ストリームのポイントは開始ポイントを持たないため、その範囲は 1 つの時点です。ポイントの値は次のいずれかを表します。

    • 一部の変数(キューの長さ、使用中のメモリ量など)から取得されるサンプル

    • ポイントの時刻で true であり、次のポイントの時刻まで true である状態

    • 時系列内の 1 個前のポイントからそのポイントまでの期間に適用されたなんらかの量の集計(平均値、最大値など)。

  • Delta: 数値(Int または Double)の場合、各ポイントはポイントの範囲、つまり、ポイントの開始時刻(現在)と終了時刻の間での測定値の変化を表します。Distribution の値の場合、ポイントの範囲中に発生した数値の母集団を持ちます。 Delta 時系列の種類には、Int、Double、または Distribution の型の値が指定されます。

    Delta 時系列では、任意の 2 個のポイントの時間範囲が重なることはできないため、各ポイントは測定値(数値)の独立した変化または値の別個の母集団(Distribution)を表します。理想的には、各ポイントの時間範囲は 1 個前のポイントの時間範囲の直後に始まります。そのため、時系列はそれがカバーする時間の範囲の完全な記述となります。

  • Cumulative: これは時間範囲が重なった Delta 時系列と考えることができます。2 個のポイントの時間範囲が重なっている場合、それらのポイントは同じ開始時刻を持つ必要があるという制約があります。したがって、各ポイントは、共通の開始時刻を持つ最後のポイントからの測定値の累積的な増加を表します。

    累積指標は、外部データソースから時系列を収集する堅牢な方法です。

    • 値を収集するたびにソースのカウンタまたはアキュムレータをリセットする必要がなく、複数の期間でソースを簡単にモニタリングできます。

    • いくつかのポイントが欠落していても、累積カウントは失われません。次のポイントには、開始時刻以降のすべてのカウントが含まれます(欠落したポイントのカウントも含む)。失われるのは時間分解能だけです。

    ただし、クエリでは累積時系列が頻繁に観測されることはありません。クエリから返される時系列のオペレーションを簡単にするため、累積時系列がクエリの一部としてフェッチされると、その時系列は自動的にデルタ時系列に変換されます。その際、各ポイントの時間範囲は 1 個前のポイントの時刻から始まり、その値は 1 個前のポイント以降の変化量になります。これは提示する情報を変えずに各ポイントを他のポイントから独立させます。(これは fetch_cumulative でオーバーライドできます)。

    ポイントに複数の値がある時系列の場合、各値には時系列の種類(Gauge またはDelta のみ)があります。いずれかの値が Delta の種類を持つ場合は、指標全体の時系列の種類が Delta になります(したがって、各ポイントは開始時刻と終了時刻を持ちます)。それ以外の場合、指標の種類は Gauge になります(終了時刻のみ)。

同じ時系列タイプ(モニタリング対象リソースタイプと指標タイプ)を持つすべての時系列は、リレーショナル テーブルに論理的に編成されます。このテーブルのテーブル名は、モニタリング対象リソースタイプの後に指標タイプ名を連結したものになります。

テーブルには、そのテーブルに含まれる各時系列のポイントごとに 1 個の行があります。 テーブルには次の種類の列があります。

  • 時系列識別子列。モニタリング対象リソースと指標タイプで指定された時系列識別子ラベルごとに 1 つの列。列の名前はラベルの名前(キー)で、列のタイプはラベルの値のタイプです。モニタリング対象リソースラベルと指標ラベルの名前が同じ場合、指標ラベル列の名前の先頭に metric. が追加されます。

    時系列は、対応する各時系列識別子の列のそれぞれに同じ値を持つテーブル内のすべての行で構成されます。

  • 時刻列(1 列または複数列)。時系列内のポイントの範囲から導出される。関数 end() によってアクセスされる終了時刻列が常に 1 つ存在します(実際にはその列に名前を付けません)。指標が Delta 時系列の場合、関数 start() によってアクセスされる開始時刻列があります。(累積時系列の種類の指標の開始時刻列もあります)。どちらの列にも Date タイプの値があります。

  • 列。時系列のポイントの 内の値ごとに 1 つ。 各列には、その値の指定された名前とタイプがあり、値列は指標タイプで指定された列と同じ順序になっています。 値名と同じ名前のモニタリング対象リソースラベルまたは指標ラベルがある場合、指標タイプによって指定された値名の先頭に value. が付けられます。

1 つの時系列のすべてのポイントの時系列識別子列に同じ値があり、これらの列は時系列を一意に識別します。時系列列と終了時刻列の組み合わせがテーブルの主キーとなり、これによってある特定の行(したがって、ある特定のポイント)が一意に識別されます。

上記はデータベースに保存されている時系列で構成されたストアド テーブルに関する説明です。 クエリはストアド テーブルを初期入力として受け取り、連続的なテーブル オペレーション(フィルタ、集計、結合など)を実行して、これらのテーブル オペレーションの出力として中間派生テーブルを生成します。

派生テーブルはストアド テーブルと同じ構造を持ちますが、次の点が異なります。

  • テーブルを生成した変換でモニタリング対象リソースラベル列がすべて保持されている場合、そのテーブルはモニタリング対象リソースタイプに関連付けられたままです。それ以外の場合、派生テーブルはモニタリング対象リソースタイプに関連付けられません。これは、メタデータ(次のセクションで説明)にとって重要です。

  • 派生テーブルは、モニタリング対象リソースタイプと指標タイプによってではなく、テーブルタイプによって記述されます。テーブルタイプは、ラベルのセットに時系列識別子のすべての列が含まれるという点以外は指標タイプと同じです。実際に派生したテーブルによっては、時系列識別子列が実際のモニタリング対象リソースタイプまたは指標タイプによって指定された列と関係がない場合があります。

  • 派生テーブルには名前はありません。

メタデータ

モニタリング対象リソースタイプにはメタデータ タイプを含めることができ、それぞれが特定のモニタリング対象リソースタイプのすべてのインスタンスに値を関連付けます。各メタデータ タイプには名前と値のタイプ(StringIntBool)があります。

メタデータには次の 2 種類があります。

  • システム メタデータ。モニタリング対象リソースを作成および管理するサービスによって作成される。システム メタデータには、metadata.system_labels.<key> 形式の名前があり、<key> は特定の種類のメタデータを示します。

  • ユーザー メタデータ。サービスで、特定のモニタリング対象リソースにラベルを添付できる場合に存在する。ユーザー メタデータの形式は metadata.user_labels.<key> で、<key> はユーザーがエンティティに関連付けたラベルのキーです。例: metadata.user_labels.my_key。ユーザー メタデータの値は常に、文字列 型です。

モニタリング対象リソースタイプに関連付けられたテーブル(ストアド テーブルまたは派生テーブル)は、そのモニタリング対象リソースタイプに関連付けられたメタデータ タイプごとに 1 個ずつ追加の仮想値列を持つとみなすことができます。テーブル内の各行のメタデータ列には、その行の終了時刻列の時刻でのそのメタデータの値が存在します。これらの追加のメタデータ列は実際にはテーブルの一部ではありませんが、テーブル行で動作する式でメタデータの名前を指定する場合と同様に、クエリ式で参照できます。

配置

時系列は、そのポイントの終了時刻が定期的な間隔でのみ発生する場合、一時的にアライメント(または単にアライメント)されます。時系列内のすべてのポイントがアライメント ベース時間の前(または後)のアライメント期間の倍数である終了時刻を持つ場合、時系列は特定のアライメント ベース時間と期間に対してアライメントされます。たとえば、アライメントのベース時間が 10:03 で、アライメント期間が 5 分の場合、09:48、09:53、09:58、10:03、10:08 はすべてポイントの有効な終了時刻になります。

テーブルの時系列に Delta 時系列の種類がある場合、各ポイントの開始時刻は、期間の Duration ごとに、終了時刻よりも前でなければならず、すべてのポイントの Duration を同じ長さにします。開始時刻が Cumulative のテーブルは、一般に、異なる時系列間でポイントの開始時刻を一致させることができないため、アライメントできません。

テーブルを構成するすべての時系列が同じアライメント時刻と期間に対してアライメントされている場合、テーブルはその時刻と期間に対してアライメントされます。

テーブルがアライメントされると、異なる時系列のポイントが時間的に並べられます。これにより、異なる時系列を組み合わせてオペレーションを行うことができます。たとえば、すべてのモニタリング対象リソースの指標の合計である時系列を取得する場合は、個々の時系列のポイントを「揃える」、つまり同じアライメントとする必要があります。結果の時系列のポイントの値は、個々の時系列の同じ時刻でのポイントの値の合計になります。

構文とセマンティクス

字句要素

クエリのテキストは、次の文法とその規則で説明される一連のトークンで構成されています。

  • トークンは、以下の文法に示すすべて大文字の非終端記号のいずれかによって記述されます。
  • base_string 以外のトークンには空白は含まれません。空白はスペース、タブ、改行、コメントです。コメントは、# で始まり改行で終わる、base_string に含まれていない任意のテキストです。
  • トークン間の空白は無視されます(トークンを区切る場合を除く)。
  • この文法で、隣接する 2 個のトークンが BARE_NAME 以外の単一のトークンとして認識される場合は(BARE_NAME は特定のコンテキストでのみ認識されます)、隣接する 2 個のトークンを空白で区切る必要があります。
ID : letter { letter_num_under } .
QUOTED_COLUMN : ( 'c' | 'C' ) base_string .
BARE_NAME : ( '/' | letter_num_under ) { letter_num_under | '.' | '/' | '-' } .
NUMBER : digit { digit } [ fraction | '.' ] [ exponent ] | fraction [exponent] .
STRING : [ 'r' | 'R' ] base_string .
DURATION : digit { digit } ( 's' | 'ms' | 'us' | 'm' | 'h' | 'd' | 'w' ) .
DATE : ( 'd' | 'D' ) base_string .

letter_num_under : letter | digit | '_' .
base_string : '\'' any-but-quote '\'' | '"' any-but-quote-quote '"' .
fraction : '.' digit { digit } .
exponent : ( 'e' | 'E' ) [ '-' | '+' ] digit { digit } .

letter - an ASCII letter
digit  - an ASCII digit
any-but-quote - any Unicode character except the ASCII control codes or `'`.
any-but-quote-quote - any Unicode character except the ASCII control codes or `"'.

識別子(ID)は、Monitoring クエリの一部である組み込みテーブル オペレーションと関数の名前を指定するため、および式に含まれる列やメタデータの名前を指定するために使用されます。ID がテーブル オペレーション名または関数名になる場所と ID が列名になる場所は構文によって区別されるため、列名として使用できない「予約済み」の識別子はありません。QUOTED_COLUMN は、識別子として解析されない列の名前を与えるために使用されます。例: c'total cpu'

NUMBERSTRINGDURATIONDATE の各トークンはリテラル値を識別します。 NUMBER の後に unit を付加すると、そのリテラル値の測定単位STRING として指定できます。STRING には Unicode 文字が使用できます。r または R の接頭辞が付いていない場合は、通常のエスケープ シーケンスが認識されます。DURATION の接尾辞は時間の長さの単位(秒、ミリ秒、マイクロ秒、分、時間、日、週)を示します。日付の base_string には 2010/06/23-19:32:15-07:00 という書式の日付が含まれます。この書式の最初の - はスペースに置き換えることができ、タイムゾーン(-07:00)は秒、分、時と同様に省略できます。

残りのトークンは句読点トークンと演算子トークンであり、以降に示す文法では '^''<=' のように引用符で囲まれています。次のトークンとなります。^<=<====~>=>|||_-,;:::!=<>!~!///.()[]{}*&&%+

クエリの構造

クエリは、パイプ演算子(|)で結合された一連のオペレーション(table_op)で構成されます。各テーブル オペレーションは、入力としてテーブルを受け取り、出力としてテーブルを生成します。あるテーブル オペレーションによって出力されたテーブルは次のテーブル オペレーションにパイプで渡され、テーブルを受け取ったオペレーションはそのテーブルを使用して独自のテーブル出力を生成します。

query : table_op { '|' table_op } .
table_op : basic_table_op | grouped_table_op | shortcut_table_op .

basic_table_op : ID [ arg { ',' arg } ] .
arg : table_name | expr | map .

grouped_table_op:  '{' query { ';' query } '}' .

テーブル オペレーションは 3 種類あります。 (table_op)

  • basic_table_op は、実行するオペレーションの種類を指定する ID で始まります(説明はこちらを参照)。その後に、指定したテーブル オペレーションで何を行うかの詳細を提供する引数(arg)が続きます。それぞれの種類の basic_table_op は 0 個、1 個または複数のテーブルを入力として受け取り、1 個のテーブルを出力として生成します。

  • grouped_table_op は、クエリの順序付きリストで構成されます。各クエリは 1 個のテーブルを生成し、grouped_table_op の結果はこれらのテーブルの順序付きリストになります。各クエリは、grouped_table_op に入力された 0 個以上の同じ入力テーブルを入力として受け取ります。

  • shortcut_table_op は、basic_table_op のショートカット表記です(こちらをご覧ください)。

1 つの table_op によって出力されたテーブルは、次の table_op への入力としてパイプ演算子(|)によって渡されます。パイプ演算子の左側のテーブル オペレーション(これをプロデューサーと呼びます)によって出力されたテーブルを、パイプ演算子の右側のテーブル オペレーション(これをコンシューマと呼びます)に渡す際の規則は次のとおりです。

  • テーブル入力を受け取らないテーブル オペレーションをコンシューマにすることはできません。

  • 単一のテーブルを出力するプロデューサーと単一のテーブルを受け取るコンシューマの場合、プロデューサーの出力テーブルがコンシューマに入力されます。

  • 複数のテーブルを出力するプロデューサーと単一のテーブルを受け取るコンシューマの場合、コンシューマは各入力テーブルに別々に適用され、コンシューマ テーブル オペレーションは入力テーブルごとに 1 個のテーブルを出力します。

  • 複数のテーブルを出力するプロデューサーと複数のテーブルを受け取るコンシューマの場合、生成されたすべてのテーブルがコンシューマに入力されます。

  • 単一のテーブルを生成するプロデューサーと grouped_table_op であるコンシューマの場合、grouped_table_op の各 query の最初のテーブル オペレーションに単一のテーブルが入力されます。

  • grouped_table_op が複数のテーブルを生成するプロデューサーのコンシューマになることはできません。

  • grouped_table_op の各 query の最後の table_op は、テーブルを 1 つだけ生成する必要があります。

テーブル オペレーションの 'arg' 要素は、入力テーブルをどのように出力テーブルに処理するかに関する情報をテーブル オペレーションに提供します。arg には次の 3 個のいずれかを指定できます。

  • テーブル名table_name)。テーブルに名前を付ける、または Cloud Monitoring データベースから取得するテーブルの名前の一部です。

  • expr)。値を計算するための数式です。静的に既知のリテラル値、またはテーブル オペレーションの入力テーブルの 1 個以上の行の列値から計算された値を指定できます。

  • マップmap)。テーブル オペレーションの出力テーブルの列の計算方法を記述します。map には、列の値を計算する 1 つ以上の expr が含まれます。

テーブル名

table_name は、監視対象リソースタイプ指標タイプ、グループ、またはテーブルに名前を指定します。これらは後続処理のために時系列データベースからテーブルをフェッチするテーブル オペレーションで使用されます。

table_name : name { '::' name } .
name : string | BARE_NAME | ID .

単一の name は、モニタリング対象リソースタイプまたは指標タイプ(モニタリング対象リソースタイプ gce_instanceaws_dynamodb_table、指標タイプ loadbalancing.googleapis.com/http/backend_latencies など)を指します。

モニタリング対象リソースタイプには、グループ名を使用するか、モニタリング対象リソースタイプ名の後に :: とグループ名を付けて、名前を付けることもできます。前者はグループで単一のモニタリング対象リソースタイプが指定されている場合に使用でき、後者はグループで複数のモニタリング対象リソースが指定されている場合に使用されます。

ストアド テーブルの名前は、モニタリング対象リソース名の後に :: と指標名を連結したものになります。例: gce_instance :: loadbalancing.googleapis.com/http/backend_latencies

式(expr)は値を計算するための数式です。これはテーブル オペレーションの引数として使用され、テーブル オペレーションがその入力テーブルに対して行う変換を記述するのに役立ちます。expr にはリテラル式、または動的な式を使用できます。

expr がリテラルの場合は、リテラル値と、引数がリテラル値の単純な関数呼び出しのみで構成されます。そのような式の値は、クエリがテーブルに適用される前に決定されます。

動的な expr はテーブル列への参照を含めることができ、入力テーブルの 1 個以上の行の値を計算するために使用されます。 動的な式には次の 3 種類があります。

  • 値式: 値式は入力テーブルの行ごとに 1 個の値を生成します。値式にはテーブル列への参照を含めることが可能で、1 行の入力行に対して評価されるとき、それらの参照はその行の対応する列の値に評価されます。

  • 集計式: 集計式は入力テーブル行のセットに対して 1 個の値を生成します。これは次の 3 個の部分に分解できます。

    • 各行の値を生成するために各入力行に個別に適用される、1 つ以上の値式。これらの値式は、集計関数の引数です。

    • 値式によって生成された入力値のコレクションを受け取ってそれらを単一の値に集約する、1 個以上の集計関数

    • 集計関数の結果を受け取って式全体の値を生成する、集計関数に対する外部式。

    たとえば、集計式の sum(if(status >= 500, val(), 0)) / sum(val()) では、各部分は次のようになります。

    • 値式は、if(status >= 500, val(), 0)val() です。 これらは各入力行に適用され、2 個の値コレクションを生成します。

    • 集計関数は 2 個の sum 関数の呼び出しです。これらはそれぞれ、その引数である値式によって生成された値のコレクションを入力として受け取ります。

    • 外部式は除算演算子(/)です。これは各 sum 集計関数の最終的な出力に適用され、式全体の値を生成します。

  • アライメント式: アライメント式は、アライメント関数の単一の呼び出しで構成されます。アライメント関数は、入力時系列から出力値を生成し、align によってアライメントされたテーブルを生成するために使用されます。

各式は、演算子で接続された opnd 要素(下記で定義)で構成されます。

expr : term { infix_op term } .
term : { prefix_op } opnd .
infix_op : '&&' | '||' | '^'
         | '==' | '=' | '!=' | '<>' | '<' | '>' | '<=' | '>=' | '=~' | '!~'
         | '+' | '-'
         | '*' | '/' | '//' | '%' .
prefix_op : '+' | '-' | '!' .

演算子は、優先順位に従って通常の方法で動作します。次の表では、演算子を 5 つのグループに分けています。グループ内のすべての演算子は同じ優先順位を持ち、上位グループほど強固にバインディングします。同じ優先順位の演算子は左から右に適用されます。 各演算子は、テーブルで指定された関数に対応し、オペランドに適用されます。

演算子 関数 オペレーション
*
/
//
%
mul
div
div
rem
乗算
除算
整数除算
整数剰余
+
-
add
sub
加算
減算
==   =
!=   <>
<=
>=
>
<
=~
!~
eq
ne
le
ge
gt
lt
re_full_match
! re_full_match
等価比較
不等比較
以下比較
以上比較
より大きい比較
より小さい比較
完全一致の正規表現
完全一致ではない正規表現
&& and 論理 AND
|| or 論理 OR

接頭辞演算子 +-! は、それぞれ単項関数 posnegnot に対応し、中置演算子の前に適用されます。

したがって、a < b && a + b + c / -d == 5(a < b) && (((a + b) + (c / (-d))) == 5) と同等であり、これは and(lt(a, b), eq(add(add(a, b), div(c, neg(d))), 5)) と同等です。

演算子はオペランド(opnd)を操作します。

opnd : literal | column_meta_name | '_' | '(' expr ')' | call_chain .

literal : NUMBER [ unit ] | string | DURATION | DATE .
unit : STRING
string : STRING { STRING } .

column_meta_name : id { '.' id } .
id : ID | QUOTED_COLUMN .

opnd は、値を計算する特定の方法に対応します。

  • literal は、特定のリテラル トークンの値です。

    • NUMBER リテラルの後に unit を付加すると、リテラル値の測定単位を指定できます。たとえば、33 バイトの場合は 33 'By' のようになります。

    • string は、1 つの文字列値に連結された 1 つ以上の STRING トークンで構成されます。したがって、'a-' 'b''a-b' と同じ値になります。

  • column_meta_name は、は入力テーブルの列または仮想メタデータ列の名前を指定するもので、式が適用される入力行の該当する列の値に評価されます。

  • _ はデフォルト値を表します。これは、オプションの正式な引数に渡す実際の引数としてのみ指定できます。

  • '(' expr ')' は、expr の値であるかっこで囲まれた式です。

  • call_chain は 1 個以上の連鎖した関数呼び出しです。

call_chain : [ ID arg_list ] { '.' call } .
arg_list : '(' [ expr { ',' expr } [ ',' ] ] ')' .
call : ID [ arg_list ] .

call_chain 内の各 ID は、ゼロ個以上の引数に適用される関数を指定します。関数呼び出しの引数は、入力テーブルの値列、呼び出しチェーン内の前の call の結果、または arg_list 内の expr の値から取得できます。

  • 呼び出しチェーンが ID で始まる場合(なおかつ、その前に . が付いていない場合)、呼び出される関数の引数は後続の arg_list 内の expr によって提供されます。

    たとえば、add(error_count, 1) は、関数 add を、column_meta_name error_countliteral 1 の 2 個の引数に適用します。これは error_count + 1 と同等です。

  • call_chain'.' call で始まる場合は、入力テーブルの値列が、呼び出される関数の最初の引数になります。callarg_list がある場合、arg_list は追加の引数を提供します。

    たとえば、値列 numden を持つテーブルに適用される .div は、div(num, den) またはnum / den と同等です。 単一の値列 count を持つテーブルに適用される式 .add(3) は、add(count, 3) または count + 3 と同等です。

  • call によって呼び出される関数は、呼び出しチェーン内の最初の呼び出しを除き、呼び出しチェーン内の前に呼び出された関数の出力を最初の引数として受け取ります。callarg_list がある場合、arg_list は追加の引数を提供します。

    たとえば、単一の値列 error_count を持つテーブルに適用される .mul(3).div(4) は、error_count * 3 / 4 または (error_count * 3) / 4 と同等の div(mul(error_count, 3), 4) と同等の div(.mul(3), 4) と同等です。

テーブルの終了時刻列と開始時刻列には列名がありません。 時刻列の値には、end 関数と start 関数を使用してアクセスします。

マップ

map は出力行の列の値を計算し、それらに名前を付けます。map には、それを使用する場所に応じて、出力行の時系列識別子列を計算する時系列識別子 map と、出力行の値列を計算する値 map の 2 種類があります。

map : [ modifier ] '[' [ maplet { ',' maplet } ] ']' .
modifier : ID .
maplet : [ column_name ':' ] expr .
column_name : ID | QUOTED_COLUMN .

maplet 内の各 expr は出力列の値を計算し、column_name は列の名前を指定します。column_name が指定されていない場合は、列名は expr から作成されます。expr が単に入力列の名前である場合は、それが column_name になります。関数が適用されている場合は、それらの関数が名前に追加されます。たとえば、sum(error_count / 3) が適用されている場合、列名は error_count_div_sum になります。

map(時系列マップまたは値マップ)によって計算される出力列は、map 内の maplet、および入力テーブルの対応する種類の列(時系列列または値列)から取得されます。これがどのように行われるかは modifier によって異なります。

  • modifier なし: 出力行の対応する列は、map 内の maplet で指定されたとおりの列で構成されます。列の名前は、ID または QUOTED_COLUMN によって明示的に指定されるか、expr の形式から導出されます。出力行の列の値は expr の値になります。

    maplet は、出力テーブルのすべての列の間で一意の列名(明示的な列名または導出された列名)を持つ必要があります。

    たとえば、値列 numden を持つテーブルに値列 map として [ratio: num/den] を適用すると、値列 ratio を持つ出力テーブルが作成され、ratio 列の値は 2 個の入力列の比率になります。

    時系列識別子列 project_idzoneinstance を持つテーブルに時系列識別子 map として [zone] を適用すると、時系列識別子列 zone だけを持つテーブルが作成され、その値は zone 入力テーブル列と同じです。

  • add: 入力行の対応する種類(時系列識別子または値)の列がすべて出力行に含まれます。さらに、maplet 内の maplet ごとに、その名前と値が map によって与えられた出力列が追加されます。

    maplet は、出力テーブルのすべての列の間で一意の列名(明示的な列名または導出された列名)を持つ必要があります。

    たとえば、値列 numden を持つテーブルに add[ratio: num/den]を値 map として適用すると、値列 numdenratio を持つ出力テーブルが作成され、ratio 列の値は他の 2 つの列の比率になります。

  • update: map 内の maplet の列名とは異なる列名を持つ入力行の対応する種類(時系列識別子または値)は、出力行に含まれます。 さらに、maplet 内の maplet ごとに、その名前と値が map によって与えられた出力列が追加されます。

    maplet は、出力テーブルのすべての列の間で一意の列名(明示的な列名または導出された列名)を持つ必要があります。入力テーブルの対応する種類の置換する列の名前を指定できます。

    たとえば、時系列識別子 map は次のようになります。

      update[job: re_extract(job, '[^-]*-(.*)', r'\1'),
             kind: re_extract(job, '([^-]*)-.*', r'\1')]
    

    時系列識別子列を持つテーブルで使用すると、userjobzone は、時系列識別子列 userjobzonekind を持つ出力テーブルになります。

  • drop: 各 maplet は、対応する種類の入力列の名前である expr で構成する必要があります。出力列は、対応する種類の入力列のうち、maplet 内の expr で指定された列を除くすべての列で構成されます。

    mapletcolumn_name を含めることはできません。また、expr には、入力テーブル内の対応する種類の列に名前を付ける必要があります。

    たとえば、時系列識別子列 userjobzone を持つテーブルに時系列識別子 map として drop [job, user] を適用すると、時系列識別子列 zone を持つ出力テーブルが作成されます。

  • ignore: 各 maplet は、列名である expr で構成されている必要があります。指定した列名が対応する種類の入力列の名前である場合、その列は出力列に含まれません。maplet の列名が対応する種類の入力テーブル列の名前ではない場合、その maplet は無効になります。したがって、出力列は、対応する種類の入力列のうち、maplet 内の expr で指定された列を除くすべての列で構成されます。

    mapletcolumn_name を含めることはできません。また、expr は単に列名にする必要がありますが、入力テーブルの列の名前にする必要はありません。入力テーブルの列の名前が含まれていない maplet は無視されます。

    たとえば、時系列識別子列 userjobzone を持つテーブルに時系列識別子 map として ignore [job, instance] を適用すると、時系列識別子列 userzone を持つ出力テーブルが作成されます。(maplet の instance は無視されます)

  • rename: 各 maplet には明示的な column_name と、入力テーブルの対応する種類の列を参照する expr を持つ必要があります。入力テーブルの対応する種類のすべての列が出力されますが、maplet で参照されている場合、列名が maplet 内の column_name で指定された新しい名前に変更されます。

    maplet 内の column_name は、出力テーブルの列名の間で一意でなければなりません。

    たとえば、値列 numdenratio を持つ入力テーブルに値列 map として rename[numerator : num, denominator : den] を適用すると、値列 numeratordenominatorratio を持つ出力テーブルが作成されます。

測定単位

すべての数値(Int、Double、Distribution)には、測定単位を関連付けることができ、その値で使用される測定単位を示します。単位は、統合単位の統一コード(UCUM)のサブセットに従った文字列で表されます。たとえば、バイト数を示す値には単位「By」と、転送されたバイトのレートを表す単位「By/s」があります。

単位は、テーブル オペレーションによって生成されるテーブルの列と、式の値に添付されます。これらは、型と同じように、列または式に静的に関連付けられます。数値型の列または式には、単位を関連付けることができますが、必ずしも関連付ける必要はありません。

テーブルの列に添付される単位は、次のソースから取得されます。

  • 指標記述子では、指標の値の単位を指定できます。これらは指標を説明するドキュメント(こちらなど)で確認できます。fetchmetric のテーブル オペレーションによって生成されるテーブルの値列には、指標記述子で指定された単位が入ります。

  • 入力テーブルの列のコピーである出力テーブルの列は、入力テーブルの列と同じ単位になります。そのため、たとえば、filter テーブル オペレーションは入力テーブルのどの列でも単位を変更せず、出力に渡します。

  • union テーブル オペレーションは、複数のテーブルを 1 つにまとめ、すべてのテーブルが同じ列を持っている必要があります。入力テーブルの各値列は、単位が添付されていないか、単位が同一であるか、もしくは他の入力テーブルの列に添付されています。いずれかの入力テーブルの列に単位が指定されている場合、出力テーブルのその列に単位が含まれます。どの入力テーブルにも列に指定されている単位がない場合、その列には出力でも単位がありません。

  • 出力テーブルの列の値を計算する expr を含むテーブル オペレーションの場合、出力列の単位には、以下で説明するように、その expr に単位が添付されます。

expr に添付される単位は、expr の形式によって異なります。

  • リテラル値そのものに単位はありません。ただし、数値(IntまたはDouble)リテラルには、単位を指定する文字列を値の後に続けることで単位を指定できます。したがって、3 "By" は値 3 の expr で、型は Int で、単位はバイト(By)です。

  • 列の参照式は、入力テーブルの名前付き列から単位を取得します(単位がある場合)。

  • 関数と演算子は、入力値の単位から出力値の測定単位を取得します。したがって、amount に単位 By があり、time に単位 s がある場合、amount / time には単位 By/s が設定されます。2 つの数値引数を受け取る関数では通常、両方の引数に単位を設定するか、いずれの引数にも単位を設定しないかのどちらかにする必要があります。各関数のドキュメントでは、その関数による測定単位の処理について説明しています。

    多くの関数には単位の一致に関する用件があります。たとえば、add には両方のオペランドに同じ単位が必要です(単位がある場合)。これらの要件については、各関数のドキュメントをご覧ください。

  • 関数 scalecast_units には、単位に関して特定の機能があります。

    scale 関数は、ある単位の値に、別の単位の値に変換するスケーリング ファクタを乗算します。したがって、「KiBy」(キロバイト)単位の expr ev の場合、scale(ev, "By") の結果は、ev に 1,024 を乗算し、その結果の単位を By に指定したものとなります。これは ev * 1024 'By/KiBy' と同じです。

    cast_units 関数は、引数の元の単位に関係なく、指定された単位で引数を返します。そのため、cast_units(ev, 'By/s')ev の値を変更せず、単位は By/s で返すことになります。

MQL でサポートされている UCUM 単位のサブセットは、この文法に従った文字列値によって指定されます。

digit : '0' | '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9'
exponent : [ '+' | '-' ] { digit }
simple_unit : [ PREFIX_SYMBOL ] ATOM_SYMBOL
annotatable : '10^' exponent | simple_unit
component : annotatable [ annotation ] | '1'
annotation : “{” ANNOTATION-STRING “}” | annotatable | annotation
unit : component { '.' component } { '/' component }

simple_unitATOM_SYMBOL で指定された単位を指定します。この単位は、PREFIX_SYMBOL によって指定されるスケーリング係数を先頭に任意でつけます。

ATOM_SYMBOL は、以下の基本的な測定単位を提供します。

テキスト 意味
s
min 分(60 秒)
h 時間(60 分)
d 日(24 時間)
wk 週(7 日)
bit ビット
By バイト(8 ビット)
% 10^-2(%にスケーリングされた無次元の比率)
m メーター
g グラム
K ケルビン
C クーロン
Hz ヘルツ(1/s)
J ジュール(kg.mm/s/s)
W ワット(kg.mm/s/s/s)(J/s)
A アンペア(C/s)
V ボルト(kg.mm/s/s/C)(J/C)

PREFIX_SYMBOLは、先行する基本単位のスケール係数を示します。

テキスト 意味 スケール
k キロ 10^3
M メガ 10^6
G ギガ 10^9
T テラ 10^12
P ペタ 10^15
E エクサ 10^18
Z ゼタ 10^21
Y ヨタ 10^24
m ミリ 10^-3
u マイクロ 10^-6
n ナノ 10^-9
p ピコ 10^-12
f フェムト 10^-15
a アト 10^-18
z ゼプト 10^-21
y ヨクト 10^-24
Ki キビ 2^10
Mi メビ 2^20
Gi ギビ 2^30
Ti テビ 2^40
Pi ペビ 2^50

無次元の単位は、1 または 10 のべき乗(10^2 のような 10^ exponent)で指定できます。単位 1 は、ほとんどのカウンタ指標に指定できる単位です。パーセント(%)にスケーリングされる無次元の比率もサポートされます。したがって、10^-2% は同じ単位になります。言い換えると、パーセンテージに 3 を追加することは、対応する比率に .03 を加算するのと同じことになります。exponent は -128~127 の範囲に制限されています。

annotation は、annotatablesimple_unit または 10の累乗)に添付でき、単位の意味を変更しないコメントです。単位にアタッチされていないアノテーションは、単位 1 にアタッチされている場合と同様に扱われます。したがって、{queries}/s1/s と同等で、1 単位は {queries} で装飾されています。

単位文字列は、. または / で連結された複数の component 文字列で構成されます。. コネクタは単位の乗算、/ コネクタは単位の除算を示します。乗算と除算は左から右に適用されます。MQL がサポートする UCUM 単位のサブセットでは、除算コネクタはすべて乗算コネクタの後に配置する必要があります。これにより、加速度の単位を m/s/s と表記したい場合に m/s.s と記述する問題を回避できます。UCUM 単位では m/s.sm.s/s や単なる m と同じであるので注意してください。

2 つの単位文字列は、アノテーションに関係なく、同じディメンションとスケールを持つ場合は同等です。ディメンションとスケールは、従来の方法で決定されます。

  • component は、無次元、または時間、長さ、データ、マス、チャージのいずれかの組み合わせのディメンションです。たとえば、bitBy の両方にディメンション データがあります。単位文字列のディメンションは、各注釈可能要素をそのディメンションに変換し、それらを単位文字列で指定されたとおりに乗算および除算し、分子と分母に表示されるディメンションを約分することによって検出されます。したがって、b.h/s(ビット時間/秒)には、「データ」×「時間」を「時間」で割ったディメンションがあり、「時間」ディメンションは、「データ」ディメンションを残すために約分されます。

  • 各注釈可能要素は、そのディメンションの基本単位に対して相対的にスケーリングされます。例: h(時間)には「時間」ディメンションがあり、基本単位はsで、スケーリング係数は 3,600 です(1 時間ごとに 3,600 秒)。単位文字列のスケーリング係数は、乗算と除算によって組み合わされた各componentのスケーリング係数の組み合わせです。

数値リテラルには、値の後に必要な測定単位の文字列を続けることで、単位を指定できます。したがって、3 "m/s" は単位 m/s の値 3 であり、10.8 "km/h" は単位 km/h の値 10.8 と同じ速度を表します。

1 つの単位の値をスケーリングすると、scale 関数を使用して同じディメンションの別の単位を作成できます。たとえば、MiByBy は、それぞれスケーリング係数が 8*1024 および 8 であるディメンション データです(ディメンション データの基本単位との比較で、bit です)。単位 MiBy の値 x は、式 scale(x, "By") によって単位 By の値にスケーリングできます。これによって x を 1,024 で乗算し、値の単位は By になります。これは、式 x * 1024 "By/MiBy"size * 1024 "By/MiBy"、と同じで、結果的な式の単位は MiBy.By/MiBy または By です。

scale 関数は、リクエストされた単位のディメンションが、スケーリングされる値の単位と同じであることを確認します。

sizeが値の単位が "KiBy"である列の場合、式scale(size, "By")size * 1024 "By/KiBy"と同じであり、結果の式の単位はMiBy.By/MiByまたはByです。

MQL が自動的に値を調整または値の単位を提供するケースは限られます。

  • 同等の単位の2つの引数(addsub、数値比較演算子、ifor_else)を必要とする関数fの場合、引数の1つは、2番目の単位引数なしのscale関数の呼び出しになる可能性があります。もう一方の f の引数の単位で scale 関数の引数の単位と同じディメンションがある場合、scale 関数の 2 番目の引数は自動的に f のもう一方の引数の単位に設定されます。これにより、2 つのf の引数の単位は同等になり、f が動作します。

    たとえば、+ 演算子では、異なる単位の 2 つの数値を加算するのは無意味なため、引数の単位は同じである必要があります。cache_size の単位が By で、heap_size の単位が MiBy の場合、式 scale(cache_size) + heap_size は式 scale(cache_size, "MiBy") + heap_size と同等です。

  • 比較関数の場合、一方の引数が同じディメンションで他方の引数とは異なるスケールの単位を持つリテラルである場合、そのリテラルは同じスケールを持つようにスケーリングされます。

    たとえば、「cache_size」に単位 By がある場合、式 cache_size < 3 "KiBy" は式 cache_size < 3072 "By" と同等です。cache_sizeInt型の場合、これはcache_size < scale(3 "KiBy", "By")と同じではないことに注意してください。これは、scaleが結果をDouble型に変換するため、比較の精度が低下する可能性があるためです。この場合の整数スケーリングでは、特定の比較が行われた際の適切な丸め処理とオーバーフローの処理が考慮されます。

  • mul の引数または div の除数のいずれについても、単位のないリテラルには単位「1」が割り当てられます。これは、単位を変更することを意図していないスケーリング オペレーションを考慮に入れています(例えば、レートが 2 倍だったらどうなるかを尋ねるなど)。単位を変更するには、scale を使用することをおすすめします。これにより、コンバージョンに適したスケーリング ファクタが自動的に選択されます。

単位エラーは、クエリを評価する際に警告として扱われるため、クエリは結果を生成します。アラートを定義する場合、単位エラーは実際のエラーとして処理されるため、アラートが定義できなくなります。

Duration と Date は数値型ではなく、単位がないことにご注意ください。60s という Duration 値は数値ではない時間の長さであり、1m60000ms とまったく同じ時間の長さです。60s == 60000ms は有効で正です。

時間の単位の値が異なります。3 'min'180 's' という数字は、単位の異なる 2 つの数値(3 と 180)です。スケーリングを行わないと、比較しても意味がありません。

scale 関数は Duration 値と Date 値を単位付きの Double 値に変換します。たとえば、scale(60s, "min")scale(1m, "min")scale(60000ms, "min") はすべて、単位 min の double 値 1.0 を返します。

テーブル オペレーションのショートカット

ショートカットは基本的なテーブル オペレーションを指定する簡便な方法です。

shortcut_table_op : shortcut { ',' arg } .
shortcut : table_name | '(' expr ')' | map | DURATION .

ショートカット テーブル オペレーションにはいくつかの形式があり、そのそれぞれがある種の基本的なテーブル オペレーションを指定します。

  • 関数昇格ショートカットは通常のテーブル オペレーションのように見えますが、これは(テーブル オペレーションではなく)関数の名前を指定する ID で始まり、その後に続く arg 要素(すべてが expr 形式)が関数の引数になります。

    関数は、その関数が引数となるテーブル オペレーションを提供することによって昇格します。関数の前にあたかも .. 演算子が付いているかのように、入力テーブルの値列が関数の最初の引数になります。具体的なプロモーションは以下のとおりです。

    • 通常の関数は value テーブル オペレーションの引数になり、出力テーブルの単一の値列を計算します。

      たとえば、| add 3value [.add(3)] のショートカットで、| div| value [.div] のショートカットです。

    • 集計関数は、最初の引数が空の map[ ])である group_by テーブル オペレーションの 2 番目の引数になります。したがって、この関数は、時系列識別子列を持たない出力テーブル(単一時系列のテーブル)の単一の値列を計算します。

      たとえば、| min| group_by [], [.min] のショートカットです。

    • アライメント関数は align テーブル オペレーションの引数になり、入力テーブルの時系列に対して指定した種類のアライメントを実行します。

      たとえば、| delta 10m はテーブル オペレーション | align [.delta(10m)] のショートカットです。

  • 命名ショートカットは table_name で始まります。この table_name は、それがどのような種類のものの名前を指定しているかに応じて、resourcemetricfetch テーブル オペレーションの引数として使用されます。

    たとえば、| gce_instance はテーブル オペレーション | resource gce_instance のショートカットで、| gce_instance :: compute/instance/cpu/usage_time| fetch gce_instance :: compute/instance/cpu/usage_timeのショートカットです。

  • フィルタリング ショートカットは、filter テーブル オペレーションの述語となるかっこで囲まれた expr で構成されます。

    たとえば、| (job == 'search')| filter job == 'search' のショートカットです。

  • グループ化ショートカットは、group_by テーブル オペレーションの最初の引数になる map で始まります。その後に、出力テーブルの値列を集計する maparg として指定できます。

    たとえば、| [zone]| group_by [zone] のショートカットです。

  • ウィンドウイング ショートカットは、group_by テーブル オペレーションの最初の引数になるDURATIONで始まります。その後に、出力テーブルの値列を集計する maparg として指定する必要があります。

    たとえば、| 10m, [.sum]| group_by 10m, [.sum] のショートカットです。

  • 期間ショートカットは DURATION で始まり、その後に arg は続きません。これはクエリ オペレーションの全体的な時間範囲を指定する for テーブル オペレーションになります。

    たとえば、| 10m| for 10m のショートカットです。

テーブル オペレーションと関数の説明

Monitoring Query Language の各テーブル オペレーションと関数の説明は、テーブル オペレーションまたは関数に指定できるテーブル入力(テーブル オペレーション用)と引数のタイプを示すドキュメント シグネチャで始まります。このセクションでは、これらのシグネチャの形式について説明します。

これらのシグネチャは Monitoring Query Language の一部ではありません。 Monitoring Query Language を記述するために使用されます。

テーブル オペレーションのシグネチャは、テーブル オペレーションへの入力テーブルを記述するタイプで始まり、テーブル オペレーションの名前、テーブル オペレーションの有効な引数を記述する引数と続きます。たとえば、pick テーブル オペレーションのシグネチャは次のようになります。

Table   | pick   lit-Int,   [ TSIDSel ],[ Windowed(Num) ]

このテーブル オペレーションは、入力としてTable を受け取り(最も一般的なケース)、引数としては lit-Int[ TSIDSel ][ Windowed(Num) ] で表される 3 つの可能性があります。

入力テーブルと | はオプションです。指定しないと、テーブル オペレーションで入力テーブルが取得されません。入力テーブルの仕様は、次のいずれかです。

  • Table: テーブル オペレーションへの入力は単一のテーブルです。
  • Table++: テーブル オペレーションは 2 個以上のテーブルを入力として受け取ります。
  • Resource: テーブル オペレーションは、モニタリング対象リソースタイプによって指定されたテーブルのコレクション(特定のモニタリング対象リソースタイプがある時系列を含むすべてのテーブル)を受け取ります。
  • ResourceOrTable: Table または Resource のいずれかを入力として使用できます。

テーブル オペレーションの名前に続く引数リスト内の各引数記述子は、次の部分で構成されます。

  • [ ] で囲むことができます。その場合はオプションとなり、実際の引数は、すべての明示的に指定された引数の後に置かれている場合は、_ として指定、または省略できます。

  • クエリを評価する前に、引数値が既知の定数値であることを示す lit- 接頭辞を付けることができます。

  • 常に、実際の引数の許可される型を記述する値のタイプまたは型のクラス(下記を参照)の名前を持ちます。

  • 入力値の時系列の種類を制限する時系列の種類を指定する接尾辞を持つことができます。

引数記述子の型名については、こちらに記載されています(BoolIntDoubleDistributionStringDuration、または Date)。この場合、実際の引数は同じ型の式であることが必要です。

以下は、実際の引数は、指標、モニタリング対象リソース、またはテーブルの名前をそれぞれ指定する table_name であることを示します。

  • MetricName
  • ResourceName
  • TableName

引数記述子では、実際の引数が次のさまざまな型のいずれかの式であることを示すカテゴリを指定できます。

  • Num: Int または Double のどちらか
  • Summable: 合計できる値のタイプ。IntDouble、または Distribution
  • Comparable: 比較できる値のタイプ。IntDoubleStringBoolDurationDate
  • ColumnValue: 有効な列値である型。IntDoubleStringBool、またはDistribution
  • Windowed(Num): within 関数、ago 関数、または bottom 関数によってアノテーションが付けられる場合がある Num
  • WindowDuration: window または sliding によってアノテーションが付けられている可能性がある Duration
  • BucketSpecification: Distribution のバケット指定。

テーブル オペレーションには、出力行の時系列識別子列または値列を指定する map 引数が必要な場合があります。これは次のいずれかで示されます。

  • RowToTSID: 出力テーブルの時系列識別子列を記述するマップ。
  • TSIDSel: 保持する時系列識別子列を指定するマップ。map 内の各 maplet は、列に名前を付ける exprID または column_name)のみで構成され必要があります。たとえば、[zone, name] を指定すると、出力列は入力時系列識別子列 zonename のみで構成され、他のすべての入力列は削除されます。
  • RowToVal: 出力テーブルの値列を記述するマップ。マップではない式が実際の引数として指定されている場合は、その式を持つ単一要素のマップになります。
  • RowSetToVal: 集計によって出力テーブルの値列を記述するマップ。マップではない式が実際の引数として指定されている場合は、その式を持つ単一要素のマップになります。
  • DefaultColumns: outer_join のデフォルト値の列を記述するマップ。 マップではない式が実際の引数として指定されている場合は、その式を持つ単一要素のマップになります。

関数のシグネチャは、関数の名前で始まり、関数の有効な引数を示すかっこで囲まれた引数リスト、関数によって返される値を示す戻り値のタイプと続きます。たとえば、fraction_less_than 関数のシグネチャは次のようになります。

fraction_less_than(Summable,   lit-Num)   → Double

この関数は、Summablelit-Num で記述される 2 つの引数を取り、Double 型の値を返します。引数リストには、上記のテーブル オペレーションと同じ要素が含まれます。戻り値のタイプは、戻り値がその型であることを示す特定の値のタイプ、または次のいずれかです。

  • Num - 関数の引数のいずれかが Double の場合は Double、それ以外の場合は Int となります。
  • ColumnValue - 関数の最初の実際の引数と同じ型です。
  • LastArgType - 関数の最後の実際の引数と同じ型です。
  • Windowed() - Windowed の実際の引数と同じ型で、Windowed 型のアノテーションが付けられます。実際の Windowed 引数の型が Int の場合、戻り値のタイプは Windowed(Int)です。(within 関数、ago 関数、bottom 関数をご覧ください)。

関数の引数記述子または戻り値の型には、引数あるいは結果の時系列の種類を制御するインジケーターが含まれる場合があります。これらは、タイプに付加される次のいずれかの接尾辞として表示されます。

  • .Cumulative.Delta.Gauge は、実際の引数が指定された時系列の種類を持っていることを示します。
  • .CumulativeOK は、実際の引数が Cumulative であることを意味します。
  • .FirstArgKind は、戻り値のタイプに対してのみ、関数の最初の引数と同じ時系列の種類を意味します。

引数に時系列の種類の接尾辞がない場合、引数は Gauge または Delta 時系列の種類でなければなりません。戻り値のタイプに時系列の種類の接尾辞がない場合は、Gauge になります。

関数のシグネチャには、次のような注記を含めることもできます。

  • (暗黙的な行入力): これは、関数が行全体を暗黙的な入力として受け取ることを示します。たとえば、hash_tsid 関数は入力行の時系列識別子列のハッシュを生成しますが、これらの列の値を明示的な引数としては受け取りません。
  • (時間集計のみ): 集計関数 のシグネチャで使用され、関数のシグネチャは時間集計を行う場合にのみ適用されることを示します。 (それ以外の場合は、その他の関数のシグネチャが適用されます。) これには、時間集計と空間集計の両方が同じテーブル オペレーションで行われる場合も含まれます。
  • (スライディング時間集計のみ): 集計関数 のシグネチャで使用され、関数のシグネチャはスライディング時間集計を行う場合にのみ適用されることを示します。 (それ以外の場合は、その他の関数のシグネチャが適用されます。) これには、スライディング時間集計と空間集計の両方が同じテーブル オペレーションで行われる場合も含まれます。

テーブル オペレーション

このセクションでは、Monitoring Query Language での基本的なテーブル オペレーションについて説明します。

  • 取得
    • fetch   データベースからテーブルを生成します。
    • metric   テーブルのセットから特定の指標タイプのテーブルを生成します。
    • fetch_cumulative   データベースから Cumulative 時系列のテーブルを生成します。
  • 選択
    • filter   入力テーブルの行を述語によってフィルタリングします。
    • top   並べ替え値の式によって最上位の時系列を選択します。
    • bottom   並べ替え値の式によって最下位の時系列を選択します。
    • top_by   異なるグループの並べ替え値の式によって時系列を選択します。
    • bottom_by   異なるグループの並べ替え値の式によって時系列を選択します。
  • 行の変更
    • map   テーブルの各行の時系列識別子列と値列を書き換えます。
    • value   テーブルの各行の値列を書き換えます。
    • time_shift   時系列を前に移動します。
  • 時系列アライメント
    • align   アライメント関数を使用して、アライメントされたテーブルを生成します。
  • 集計
    • group_by   マップされた時系列識別子とタイム ウィンドウによって行を集計します。
    • union_group_by   複数のテーブルの行を集計します。
    • unaligned_group_by   マップされた時系列識別子によって行をアライメントなしで集計します。
  • 結合
    • join   複数のテーブルの自然結合。
    • outer_join   2 つのテーブルの外部結合。
    • union   複数のテーブルの結合。
  • タイム ホライズンと期間
    • every   整列されたテーブル出力の期間を指定します。
    • within   クエリ出力の時間範囲を指定します。
    • graph_period    時系列グラフの描画に推奨される出力期間を指定します。
    • window   アライメント操作のウィンドウを指定します。
  • アラート
    • condition   入力テーブルにブール条件列を追加します。
    • absent_for   入力がない場合の条件を作成します。
  • その他
    • ident   アイデンティティ テーブル オペレーション。入力テーブルは変更されません。
    • ratio   2 つのアライメントされた入力テーブルの値列の比率を計算します。
    • filter_ratio   入力値列の 2 つのフィルタリングされた合計の比率を計算します。
    • filter_ratio_by   入力値列の 2 つのフィルタされた合計のグループ化された比率を計算します。

取得

fetch テーブル オペレーションの出力は、Cloud Monitoring 時系列データベースから名前で取得されるテーブルです。

resource テーブル オペレーションの出力は、名前にモニタリング対象リソースタイプが含まれるすべてのテーブルのセットです。各 resource は最終的には、名前にその指標が含まれる単一のテーブルを選択する metric テーブル オペレーションが必要です。metric テーブル オペレーションの前に、結果のテーブルに含まれる行を制限する filter テーブル オペレーションがある場合があります。

fetch   データベースからテーブルを生成します。


シグネチャ:   fetch   lit-TableName

fetch オペレーションは、TableName 引数で指定されたテーブル名を名前として持つテーブルを時系列データベースからフェッチします。 テーブル名に不明なモニタリング対象のリソースタイプ名または指標タイプ名が含まれている場合は、エラーになります。

指定されたタイプのモニタリング対象リソースから指定されたタイプの指標が収集されてない場合、このテーブルは空になります。

指標が「Cumulative」である場合、テーブルを構成する時系列は「Delta」時系列に効果的に変換され、各ポイントは、前のポイント以降の値の変化を表します。

また、fetch オペレーションでは、モニタリング対象リソースの名前を指定し、指標名を指定しないことで、特定のモニタリング対象リソースに基づくすべてのテーブルをフェッチできます。このような fetch オペレーションの後に、特定の指標のデータを含む特定のテーブルを選択する metric オペレーションを続ける必要があります。このような fetch と後続の metric の間にある唯一のオペレーションは、モニタリング対象リソース列に基づいてフィルタリングする filter オペレーションです。

この例のように、特定のモニタリング対象リソースについて複数の指標をフェッチする場合は、この形式の fetch が便利です。

  fetch gce_instance | filter zone = 'asia-east1-a' |
  { metric compute.googleapis.com/instance/cpu/utilization ;
    metric compute.googleapis.com/instance/cpu/reserved_cores
  } | join | div
  gce_instance | (zone = 'asia-east1-a') |
  { compute.googleapis.com/instance/cpu/utilization ;
    compute.googleapis.com/instance/cpu/reserved_cores
  } | join | div

これは次と同等です。

  { fetch gce_instance :: compute.googleapis.com/instance/cpu/utilization ;
    fetch gce_instance :: compute.googleapis.com/instance/cpu/reserved_cores
  } | filter zone = 'asia-east1-a' | join | div

metric   テーブルのセットから特定の指標タイプのテーブルを生成します。


シグネチャ:   Resource   | metric   lit-MetricName

metric テーブル オペレーションは、fetch テーブル オペレーションによって生成された、指標名を指定しない一連のテーブルを取得します。lit-MetricName 引数で指定された指標のデータを保持するテーブルを 1 つ選択し、そのテーブルを出力として生成します。指定された名前の指標定義が存在しない場合はエラーになります。指定した指標名のデータが含まれた入力テーブルがない場合、空のテーブルが生成されます。

fetch_cumulative   データベースから Cumulative 時系列のテーブルを生成します。


シグネチャ:   fetch_cumulative   lit-TableName

fetch_cumulative テーブル オペレーションは fetch テーブル オペレーションと同じですが、Cummulative 指標は、取得されたときに自動的に Delta 指標に変換はされません。

選択

選択テーブル オペレーションでは、入力テーブルから行を選択して出力テーブルに含めます。出力テーブルのタイプは、入力テーブルとまったく同じです。

filter   入力テーブルの行を述語によってフィルタリングします。


シグネチャ:   ResourceOrTable   | filter   Bool

filterオ ペレーションは、単一の入力テーブル内、または resource オペレーションによって指定されたテーブルのコレクション内の各行の引数 Bool 式を評価します。この式が true に評価された入力テーブルの行だけが出力テーブルに保持されます。

入力がテーブルのコレクションである場合、モニタリング対象リソースラベル(すべてのテーブルに共通)のみが述語で参照できます。

top   並べ替え値の式によって最上位の時系列を選択します。


シグネチャ:   Table   | top   lit-Int,   [ Windowed(Num) ]

top テーブル オペレーションは、入力テーブル内の各時系列の並べ替え値を計算し、最大の並べ替え値を使用して Int 引数で指定された時系列の数を選択します。Windowed 引数の式は、並べ替え値を計算します。

Windowed(Num) 引数は、値のタイム ウィンドウ内にある時系列の行に適用されます。デフォルトの値のタイム ウィンドウは、クエリのタイム ウィンドウと同じです。式が集計式(.min など)の場合、終了タイムスタンプが値ウィンドウ内にあるすべての行の集計です。式が値式(.val(0)/.val(1) など)の場合は、値ウィンドウ内の最も新しい行(ある場合)に適用されます。時系列の値ウィンドウ内に行がない場合、または Windowed(Num) 引数で時系列の値が生成されない場合、その時系列は出力に含まれません。

within 関数を Windowed(Num) 引数で使用して、ウィンドウの開始時刻、期間、および / または終了時刻を指定して、値ウィンドウを変更できます。

例:

  | top 3

時系列で最も新しいポイントの最も大きい値を持つ 3 つの時系列を選択します。

  | top 7, .max

クエリ ウィンドウ内で、時系列のすべてのポイントの最大値を持つ 7 つの時系列を選択します。

  | top 3, .min.within(-10h, 1h)

10 時間前から 1 時間継続するウィンドウにある各時系列の行に適用される min レデューサの最大値を持つ 3 つの時系列を選択します。

bottom   並べ替え値の式によって最下位の時系列を選択します。


シグネチャ:   Table   | bottom   lit-Int,   [ Windowed(Num) ]

bottom テーブル オペレーションは、入力テーブル内の各時系列の並べ替え値を計算し、最小の並べ替え値を使用して Int 引数で指定された時系列の数を選択します。Windowed 引数の式は、並べ替え値を計算します。

Windowed(Num) 引数は、値のタイム ウィンドウ内にある時系列の行に適用されます。デフォルトの値のタイム ウィンドウは、クエリのタイム ウィンドウと同じです。式が集計式(.min など)の場合、終了タイムスタンプが値ウィンドウ内にあるすべての行の集計です。式が値式(.val(0)/.val(1) など)の場合は、値ウィンドウ内の最も新しい行(ある場合)に適用されます。時系列の値ウィンドウ内に行がない場合、または Windowed(Num) 引数で時系列の値が生成されない場合、その時系列は出力に含まれません。

within 関数を Windowed(Num) 引数で使用して、ウィンドウの開始時刻、期間、および / または終了時刻を指定して、値ウィンドウを変更できます。

例:

  | bottom 3

時系列で最も新しいポイントの最も小さい値を持つ 3 つの時系列を選択します。

  | bottom 7, .min

クエリ ウィンドウ内で、時系列のすべてのポイントの最小値を持つ 7 つの時系列を選択します。

  | bottom 3, .max.within(10h)

10 時間前から現在まで継続するウィンドウにある各時系列の行に適用される max レデューサの最小値を持つ 3 つの時系列を選択します。

top_by   異なるグループの並べ替え値の式によって時系列を選択します。


シグネチャ:   Table   | top_by   TSIDSel,   lit-Int,   [ Windowed(Num) ]

top_by テーブル オペレーションは、TSIDSel 引数によって計算された同じ時系列識別子を持つ時系列をグループ化します。各グループ内で、同じ Int 引数と Windowed 引数を指定した場合に top が実行するのと同じメソッドで時系列を選択します。各グループについて、グループ内の各時系列の並べ替え値を計算し、最大の並べ替え値を使用して Int 引数で指定された時系列の数を選択します。Windowed 引数の式は、並べ替え値を計算します。

Windowed(Num) 引数は、値のタイム ウィンドウ内にある時系列の行に適用されます。デフォルトの値のタイム ウィンドウは、クエリのタイム ウィンドウと同じです。式が集計式(.min など)の場合、終了タイムスタンプが値ウィンドウ内にあるすべての行の集計です。式が値式(.val(0)/.val(1) など)の場合は、値ウィンドウ内の最も新しい行(ある場合)に適用されます。時系列の値ウィンドウ内に行がない場合、または Windowed(Num) 引数で時系列の値が生成されない場合、その時系列は出力に含まれません。

within 関数を Windowed(Num) 引数で使用して、ウィンドウの開始時刻、期間、および / または終了時刻を指定して、値ウィンドウを変更できます。

例:

  | top_by [zone], 1

「zone」列の値が同じ時系列のグループごとに、時系列の中で最も新しいポイントの最大値を持つ時系列が選択されます。

  | top_by [project_id], 2, .max

「project_id」列の値が同じ時系列グループごとに、クエリ ウィンドウ内の時系列のすべてのポイントの最大値を持つ 2 つの時系列が選択されます。

  | top_by [zone], 1, .min.within(-10h, 1h)

「zone」列の値が同じ時系列の各グループについて、10 時間前から 1 時間継続するウィンドウにある各時系列の行に適用される min レデューサの最大値を持つ時系列を選択します。

bottom_by   異なるグループの並べ替え値の式によって時系列を選択します。


シグネチャ:   Table   | bottom_by   TSIDSel,   lit-Int,   [ Windowed(Num) ]

bottom_by テーブル オペレーションは、TSIDSel 引数によって計算された同じ時系列識別子を持つ時系列をグループ化します。各グループ内で、同じ Int 引数と Windowed 引数を指定した場合に bottom が実行するのと同じメソッドで時系列を選択します。各グループについて、グループ内の各時系列の並べ替え値を計算し、最小の並べ替え値を使用して Int 引数で指定された時系列の数を選択します。Windowed 引数の式は、並べ替え値を計算します。

Windowed(Num) 引数は、値のタイム ウィンドウ内にある時系列の行に適用されます。デフォルトの値のタイム ウィンドウは、クエリのタイム ウィンドウと同じです。式が集計式(.min など)の場合、終了タイムスタンプが値ウィンドウ内にあるすべての行の集計です。式が値式(.val(0)/.val(1) など)の場合は、値ウィンドウ内の最も新しい行(ある場合)に適用されます。時系列の値ウィンドウ内に行がない場合、または Windowed(Num) 引数で時系列の値が生成されない場合、その時系列は出力に含まれません。

within 関数を Windowed(Num) 引数で使用して、ウィンドウの開始時刻、期間、および / または終了時刻を指定して、値ウィンドウを変更できます。

例:

  | bottom_by [zone], 1

「zone」列の値が同じ時系列のグループごとに、時系列の中で最も新しいポイントの最小値を持つ時系列が選択されます。

  | bottom_by [project_id], 2, .max

「project_id」列の値が同じ時系列グループごとに、クエリ ウィンドウ内の時系列のすべてのポイントの最小値を持つ 2 つの時系列が選択されます。

  | bottom_by [zone], 1, .min.within(1h)

「zone」列の値が同じ時系列の各グループについて、10 時間前から 1 時間継続するウィンドウにある各時系列の行に適用される min レデューサの最小値を持つ時系列を選択します。

行の変更

map   テーブルの各行の時系列識別子列と値列を書き換えます。


シグネチャ:   Table   | map   [ RowToTSID ],   [ RowToVal ]

入力 Table の行ごとに次の 2 個の変換が適用されます。

  • RowToTSID マップが指定されている場合は、そのマップを行の時系列識別子列に適用して、対応する出力行の時系列識別子列が生成されます。RowToTSID マップが指定されていない場合(または _ と指定されている場合)、出力される時系列識別子列は入力と同じになります。

  • RowToVal マップが指定されている場合は、そのマップを入力行の値列に適用して、出力行の値列が生成されます。RowToVal マップが指定されていない場合、出力される値列は入力と同じになります。

入力内の 2 つの異なる時系列の行が出力内の同じ時系列にマッピングされている場合、動的エラーになります。この場合、入力時系列の 1 つから派生した行が出力から削除され、エラー メッセージが表示されます。

RowToTSID マップに値列または時刻列への参照が含まれている場合は、単一の入力時系列が複数の出力時系列に分割されます。そのため、RowToTSID マップに値列または時刻列への参照が含まれている場合、このマップは値列が Gauge または Delta 時系列の種類であるテーブルにのみ適用できます。

value   テーブルの各行の値列を書き換えます。


シグネチャ:   Table   | value   RowToVal

入力 Table の行ごとに RowToVal マップをその行の列に適用して、対応する出力行の値列を生成します。各出力行には、元の入力行と同じ時系列識別子列と時刻列、および RowToVal マップによって生成された値列があります。

time_shift   時系列を前に移動します。


シグネチャ:   Table   | time_shift   lit-Duration

入力テーブルの各行には、Duration 引数によって指定され時間列に追加された量があります。これにより、テーブル内の各時系列が前に移動します。

入力テーブルがアライメントされている場合、シフト量はアライメント期間の偶数倍である必要があります。これにより、入力テーブルのアライメントが維持されます。

時系列アライメント

align   アライメント関数を使用して、アライメントされたテーブルを生成します。


シグネチャ:   Table   | align   [ Aligner ]

alignテーブル オペレーションでは、Aligner 引数に指定されたアライメント関数を使用して、入力テーブル内の各時系列からアライメントされた時系列を作成し、出力テーブルにその時系列を生成します。

アライメントのベース時間はクエリ ウィンドウの終了時刻で、アライメント期間は次の 3 つのいずれかによって設定されます。

  • この align テーブル オペレーションの期間を設定するeveryテーブル オペレーション。

  • Aligner 機能の場合、アライメント期間はウィンドウの幅と同じである必要があります(delta を参照)。

  • 外部グラフィック インターフェースには、特定のアライメント期間が必要です。

アライメントされた時系列を生成する特定の方法は、Aligner 引数に指定されたアライメント関数で記述されています。

集計

集計テーブル オペレーションは、入力テーブルの行をグループに分割します。 入力行のグループごとに、グループの共通の時系列識別子と時刻列を計算し、入力行を集計して値出力列を作成し、結果の時系列識別子列、時刻列、値列を持つ 1 つの行を出力します。

集計には 3 つの種類があります。

  • 空間集計この集計形式は、各入力行の新しい時系列 ID 列を計算し、同じ新しい時系列 ID 列と終了時刻を持つすべての行をグループ化します。通常、このような集計では、異なる時系列の行がグループ化されるように配置された入力が必要です。

  • 時間集計。  この形式の集計は、アライメントされた有効な出力時間のセットを計算し、各行の新しい終了時間を計算して、行の元の終了時間より後の最も古い整列された終了時間を指定します。同じ時系列識別子と終了時刻を持つ行が、グループ化されます。

  • スライディング時間集計 この形式の集計は、時間集計と類似していますが、行を複数のグループに含めることが可能な点が異なります。これにより、それぞれ配置された有効な終了時刻に開始時刻があり、同じ固定幅を持つ一連の時間ウィンドウが計算されます。ある行に対して、行が存在する各ウィンドウの開始時刻に該当する終了時刻が割り当てられ、その行が、同じ時系列識別子および新しい終了時刻を持つ他の行とグループ化されます。ウィンドウが重複している場合は、1 つの行に複数の新しい終了時刻が設定され、その結果、複数のグループに含まれることがあります。

1 回のテーブル オペレーションで空間集計を 2 つの形式の時間集計のいずれかと組み合わせることができます。

スライディング時間集計と非スライディングの時間集計の重要な違いは、一部のアグリゲータ(sum など)では、スライディング時間集計のGauge 種類ではなく、非スライディング時間集計の Delta 時系列の種類を持つ値が生成されることです。その理由は、Delta 時系列内の 2 つのポイントの時間範囲を重複させることはできないためです。そのため、スライディング時間集計の重複する入力ウィンドウは、Delta 時系列の出力行の時刻列には表示できません。

行の新しい時系列識別子が計算される場合、新しい時系列識別子は map 引数によって計算されます。出力行の値列は、各値列を計算する集計式を含む map 引数によって計算されます。

group_by   マップされた時系列識別子とタイム ウィンドウによって行を集計します。


シグネチャ:   Table   | group_by   RowToTSID,   [ RowSetToVal ]
          Table   | group_by   RowToTSID,   lit-WindowDuration,   [ RowSetToVal ]
          Table   | group_by   lit-WindowDuration,   [ RowSetToVal ]

group_by テーブル オペレーションは、時系列識別子列、時刻列、またはその両方をマッピングすることによって、行をグループ化します。

  • RowToTSID 引数が指定されていて、WindowDuration 引数が指定されていない場合は、入力テーブルの各行のマップ引数によって生成された時系列識別子が計算され、同じ生成された時系列識別子と終了時刻を持つすべての行がグループ化されます。

    この場合、group_by には、異なった時系列に同じ終了時刻のポイントが存在するように、入力としてアライメントされたテーブルが必要です。 入力テーブルが整列されていない場合は、align テーブル オペレーションが自動的に挿入されてアライメントが行われます。

  • WindowDuration 引数が指定され、RowToTSID 引数が指定されていない場合は、各時系列識別子のアライメントされた期間のすべての出力ポイントに対して行のグループが生成されます。1 個のグループには、特定の時系列識別子を持ち、なおかつその終了時刻が出力時刻から WindowDuration 前までの時間範囲内にあるすべての行が含まれます。

    Duration 引数に sliding 関数呼び出し(sliding(1h) など)がある場合、ウィンドウはアライメント期間とは異なる場合があります。それ以外の場合、Duration 引数はアライメント期間と同じである必要があります。式 window() はアライメント期間と同じ時間の長さを表します。スライドしていない Duration が明示的に指定されている場合、その期間は強制的に、期間が明示的に指定されていない場合と同じになります。

  • RowToTSID 引数と WindowDuration 引数の両方が指定されている場合、新しいマッピングされた時系列識別子が各行に対して計算され、同じマッピングされた時系列識別子を持ち、なおかつその終了時刻が出力時刻から WindowDuration 前までの時間範囲内にあるすべての行に 1 つのグループが作成されます。

出力行はグループごとに生成され、グループ内の行に共通の時系列識別子と、グループの出力ポイント時刻であるタイムスタンプ(WindowDuration が指定されている場合)、またはグループの行に共通の終了時刻であるタイムスタンプ(WindowDuration が指定されていない場合)を持ちます。グループの値列は RowSetToVal 引数によって生成されます。各集計式がセット内の行に適用され、その結果が出力行の値列になります。

一部の集計式(sumなど)は、集計の種類に応じて、Delta 時系列または Gauge 時系列の種類の出力値列を生成します。これは、スライディング時間集計または非スライディング時間集計が行われているかどうかによって異なります。このため、集計は、時間集計と空間集計の両方を組み合わせた場合には、時間集計として扱われます。

group_by テーブル オペレーションは常に整列された出力テーブルを生成します。WindowDuration 引数が指定されていない場合、入力テーブルは整列されている必要があり、出力テーブルは同じアライメントを持ちます。WindowDuration 引数が指定されている場合、出力ポイントはアライメント時点でのみ生成され、出力テーブルは整列されます。

RowToTSID マップ引数の式に値列または時刻列が含まれている場合、入力テーブルの時系列が出力テーブルで複数の時系列に分割される可能性があります。

union_group_by   複数のテーブルの行を集計します。


シグネチャ:   Table   | union_group_by   RowToTSID,   [ RowSetToVal ]
          Table   | union_group_by   RowToTSID,   lit-WindowDuration,   [ RowSetToVal ]
          Table   | union_group_by   lit-WindowDuration,   [ RowSetToVal ]

union_group_by 関数は group_by 関数と同様に入力行を集計しますが、複数のテーブルから入力行を受け取る点が異なります。

union_group_by へのすべての入力テーブルの入力には、同じ列(同じ名前、同じタイプ、値列の場合は同じ時系列の種類)が必要です。アラインされた入力テーブルが「union_group_by」の引数で必要な場合(WindowDuration 引数が指定されていない場合)、すべての入力テーブルを同じ期間でアライメントする必要があります。

unaligned_group_by   マップされた時系列識別子によって行をアライメントなしで集計します。


シグネチャ:   Table   | unaligned_group_by   TSIDSel,   [ RowSetToVal ]

unaligned_group_by テーブル オペレーションは group_by テーブル オペレーションと同じことを行いますが、入力テーブルがアライメントされている必要はありません。

入力テーブルの各行に対して TSIDSel によって生成された時系列識別子が計算され、同じ生成された時系列識別子と終了時刻を持つすべての行がグループ化されます。グループ内のすべての行は同じ終了時刻を持ち、開始時刻も同じになります。グループ内の 2 個の行の開始時刻が異なる場合は動的エラーが発生し、どちらかの行が任意に選択されてグループから削除されます。

上記の行グループのグループごとに出力行を生成します。出力行には、TSIDSel マップ引数によって生成された時系列識別子があり、グループ内の入力行と同じ終了時刻と(存在する場合は)開始時刻があります。また、RowSetToVal マップ引数をグループ内のすべての行に適用して生成された値列を持ちます。

unaligned_group_by テーブル オペレーションでは、入力テーブルが整列されている必要はありません。これは、グループ内に集計する複数の行が存在する可能性がほとんどないことを意味します。1 個の出力時系列に収集される行(これらはすべて同じ時系列識別子を持ちます)の終了時刻の密度が 1 秒あたり 1 行を超えないようにする必要があります。

結合

join   複数のテーブルの自然結合。


シグネチャ:   Table++   | join

join テーブル オペレーションは、2 つ以上の入力テーブルを受け取り、入力テーブルの時系列識別子と終了時刻列に対して自然内部結合を行い、単一の出力テーブルの行にこれらのテーブルの行を結合します。

入力テーブルは単に整列されているだけでなく、すべてのテーブルが同じ期間に整列されている必要があり、すべてのテーブルの時系列の種類が Delta または Gauge である必要があります。

出力テーブルには次の要素があります。

  • 任意の入力テーブル内の一意の時系列識別子列ごとに 1 つの時系列識別子列。各列は、入力テーブルの対応する列と同じ型を持ちます。2 個のテーブルに名前が同じで型が異なる時系列識別子列がある場合はエラーになります。

  • 終了時刻列。いずれかの入力テーブルの時系列の種類が Delta である場合、出力テーブルも時系列の種類が Delta になり、開始時刻列を持ちます。

  • 入力テーブルの各値列に対応する値列。順序は、入力テーブルを生成した grouped_table_op での入力テーブルの順序になります。2 個の異なる入力テーブルに同じ名前の値列がある場合はエラーになります。

結合では、各入力テーブルから 1 行で構成されるすべてのタプルが評価されます。これらの条件を満たすタプルごとに出力行が作成されます。

  • いずれかの入力テーブルに含まれる各時系列識別子列名について、その列の値は、タプル内のその列を持つ各行の値と同じになります。

  • タプルのすべての行は同じ終了時刻を持ちます。

各出力行は次の列値を持ちます。

  • 各時系列列の値は、タプル内のその列を持つ各行と同じになります。

  • 各時刻列の値は、入力タプルの行と同じ値になります。

  • 各値列の値は、タプル内のその値列が由来する行と同じになります。

outer_join   2 つのテーブルの外部結合。


シグネチャ:   Table++   | outer_join   [ DefaultColumns ],   [ DefaultColumns ]

outer_join テーブル オペレーションは、2 つの入力テーブルを受け取り、入力テーブルの時系列識別子と終了時刻列に対して自然外部結合を行い、単一の出力テーブルの行にこれらのテーブルの行を結合します。

1 つまたは両方の DefaultColumns 引数を指定する必要があります。それぞれの引数は 1 つの入力テーブルに対応し、テーブルに指定されたとき、そのテーブルに他のテーブルの行と一致する行がない場合には、行が作成されます。DefaultColumns は、作成された行の値列を指定します。テーブルに DefaultColumns が指定されている場合、そのテーブルの時系列識別子列は、他のテーブルの時系列のサブセットである必要があり、他のテーブルに Delta 時系列の種類がある場合にのみ Delta 時系列の種類を持つことができます。

入力テーブルは単に整列されているだけでなく、すべてのテーブルが同じ期間に整列されている必要があり、すべてのテーブルの時系列の種類が Delta または Gauge である必要があります。

join と同様に、出力テーブルには次の要素があります。

  • 任意の入力テーブル内の一意の時系列識別子列ごとに 1 つの時系列識別子列。各列は、入力テーブルの対応する列と同じ型を持ちます。2 個のテーブルに名前が同じで型が異なる時系列識別子列がある場合はエラーになります。

  • 終了時刻列。いずれかの入力テーブルの時系列の種類が Delta である場合、出力テーブルも時系列の種類が Delta になり、開始時刻列を持ちます。

  • 入力テーブルの各値列に対応する値列。順序は、入力テーブルを生成した grouped_table_op での入力テーブルの順序になります。2 個の異なる入力テーブルに同じ名前の値列がある場合はエラーになります。

結合では、各入力テーブルから 1 行で構成されるすべてのペアが評価されます。これらの条件を満たすペアごとに出力行が作成されます。

  • いずれかの入力テーブルに含まれる各時系列識別子列名について、その列の値は、ペア内のその列を持つ各行の値と同じになります。

  • ペアのすべての行は同じ終了時刻を持ちます。

各出力行は次の列値を持ちます。

  • 各時系列列の値は、ペア内のその列を持つ各行と同じになります。

  • 各時刻列の値は、入力ペアの行と同じ値になります。

  • 各値列の値は、ペア内のその値列が由来する行と同じになります。

上記のペアに加えて、一方のテーブルの行がもう一方のテーブルの行とペアを形成できず、もう一方のテーブルに DefaultColumns が指定されている場合、最初のテーブルの行ともう一方のテーブルのデフォルト行とでペアが作成されます。デフォルト行は次のように作成されます。

  • 各時系列識別子の列と時刻列は、最初のテーブル行の対応する列と同じ値になります。

  • デフォルト行の値列は、DefaultColumns map によって作成されます。この map で、デフォルト テーブルの各値列に値を指定する必要があります。

union   複数のテーブルの結合。


シグネチャ:   Table++   | union

union テーブル オペレーションは 2 つ以上の入力テーブルを受け取り、すべての入力テーブルの行を含む単一の出力テーブルを生成します。

各入力テーブルには同じ列(同じ名前、同じタイプ、値列の場合は同じ時系列の種類)が必要です。生成された出力テーブルには、入力テーブルと同じ列が含まれます。出力テーブルは、すべての入力テーブルが共通の期間にアライメントされている場合にのみアライメントされます。

2 つ以上の異なるテーブルのストリームに同じ時系列識別子がある場合は、動的エラーになります。この場合、時系列識別子が重複するストリームの 1 つが任意に選択されて出力に含められ、残りのストリームは削除されます。

タイム ホライズンと期間

テーブル内の時系列をアライメントするときに使用する期間は、every コマンドによって設定されます。

クエリは、終了時刻がクエリ ウィンドウ内にあるポイントとしてすべての結果を生成します。クエリ ウィンドウの期間は within テーブル オペレーションによって設定され、開始時刻、終了時刻、または期間のいずれかを指定できます。

every   整列されたテーブル出力の期間を指定します。


シグネチャ:   Table   | every   lit-Duration

every テーブル オペレーションには、Duration 引数で指定された入力期間とアライメントされた入力テーブルが必要です。これは次のいずれかの方法で処理されます。

  • 入力テーブルがアライメントされていない場合は、適切な Aligner 関数を持つ align テーブル オペレーションが挿入されて、入力テーブルがアライメントされます。Aligner 関数の Duration 引数は、指定された期間のデフォルト値です。

  • 入力テーブルがアライメントされているが、特定の必須期間がない場合、every テーブル オペレーションに入力されるクエリは、その期間を生成するように調整されます。

  • 入力テーブルが特定の期間と整列されていて、その期間が Duration 引数で指定された期間と異なる場合は、エラーになります。

within   クエリ出力の時間範囲を指定します。


シグネチャ:   Table   | within   lit-DateOrDuration,   [ lit-DateOrDuration ]

within テーブル オペレーションは、クエリ出力の時間範囲を指定します。 これは、ウィンドウの最も古い(開始)時刻、ウィンドウの最も新しい(終了)時刻、ウィンドウの期間の 3 つのうち 1 つまたは 2 つの値を指定することで行います。

within の 2 つの引数のいずれかが正の Duration の場合、ウィンドウの幅を設定します。最大 1 つの引数に正の Duration を指定できます。

最初の引数が Date の場合は、開始時刻を指定します。 2 番目の引数が Date の場合は、終了時刻を指定します。両方が Date 値である場合、2 番目の値は最初の値よりも新しい必要があります。Date 引数は、Date リテラルまたは負の Duration リテラルで指定できます。後のケースでは、時刻はクエリが発行された時刻(現在)より前の指定された Duration です。

引数を 1 つだけ指定した場合、2 番目の引数はデフォルトでクエリが発行された時刻(現在)になります。この場合、最初の引数は、クエリが発行された時刻よりも前の正の Duration または Date でなければなりません。

graph_period   時系列グラフの描画に推奨される出力期間を指定します。


シグネチャ:   Table   | graph_period   lit-Duration

graph_period テーブル オペレーションは、その入力テーブルを変換して,グラフとして表示するのに適したものにします。Duration 引数は、グラフに適したポイント間の期間を示します

このオペレーションは、ユーザーが明示的に Metrics Explorer に与えられたクエリに追加しなかった場合、自動的にそのクエリに挿入されます。いずれの場合も、Metrics Explorer は Duration 引数の値をチャートの実際の時間枠に適切なものに設定します。クエリの一部として graph_period を明示的に付与することは、クエリが API に提供されている場合にのみ意味を持ちます。

graph_period オペレーションでは、Duration 引数と入力テーブルの期間とを比較し、次の処理を行います

  • 入力テーブルの期間が Duration 引数の半分未満である場合、graph_period オペレーションは、一時的な削減指定子として機能し、そのウィンドウと出力期間は Duration で指定されます。入力テーブルの各値列は、型に従って集計されます。

    • 数値型の値列の場合、3 つの列が出力テーブルに配置されます。各列は、入力列を minmeanmax のアグリゲータで集約して生成されます。出力列名は、入力列名にそれぞれ .min.mean.max が付加されたものになります。

    • Bool 型の値列の場合、3 つの列が出力テーブルに配置されます。各列は、入力列を minmeanmax のアグリゲータで集約して生成されます。出力列名は、入力列名にそれぞれ .all_true.mean.any_true が付加されたものになります。

    • Distribution 型の列の場合、distribution 集約を使用して、同じ名前の単一の列が作成されます。これは、各グラフ期間枠内に該当するすべての分布入力値の母集団を結合するためです。

  • 入力テーブル期間が Duration 引数の 2 倍を超える場合、入力テーブルの各ポイントについて、出力期間によって必要とされる時間点のコピーが作成されます

  • 入力テーブルの期間が Duration 引数の 2 倍未満であり、Duration 引数の半分以上である場合、単純に入力テーブルが出力にコピーされます

入力テーブルに複数の値列が含まれている場合、または String 値列がある場合、その動作は未定義であることに注意してください。Metrics Explorer は表示可能な列がない場合、単一の列のみを表示するか、エラーを表示することがあります。

window   アライメント操作のウィンドウを指定します。


シグネチャ:   Table   | window   lit-Duration

window テーブル オペレーションには、ウィンドウの Duration 引数が window テーブル オペレーションで指定された Duration 引数と同じ Aligner 関数でアライメントされた入力テーブルが必要です。これは次のいずれかの方法で処理されます。

  • 入力テーブルがアライメントされていない場合は、適切な Aligner 関数を持つ align テーブル オペレーションが挿入されて、入力テーブルがアライメントされます。Aligner 関数の Duration 引数は、この window テーブル オペレーションの Duration 引数で指定します。

  • テーブルがアライメントされているが、それをアライメントしたテーブル オペレーションに特定のアライメント ウィンドウがない場合、この window 引数の Duration が Aligner ウィンドウ引数として使用されます。

  • 入力テーブルがアライメントされており、アライメントされたテーブル オペレーションが、この window テーブル オペレーションの Duration 引数と異なるウィンドウ Duration を指定している場合、エラーになります。

アラート

アラート オペレーションは、アラート ポリシーの定義に使用されます。これらのオペレーションは、クエリの一部としては使わず、アラートをインストールする場合にのみ使用してください。

抽象的に、これらのオペレーションでは 2 つの値の列を持つテーブルを出力できるクエリを作成できます。この列には、アラートが起動状態であるかどうかを示すブール値と、入力の最新の値を提供する入力と同じタイプの値があります。

condition   入力テーブルにブール条件列を追加します。


シグネチャ:   Table   | condition   Bool

condition テーブル オペレーションは、各入力テーブル行にブール値列を追加して出力テーブルを作成します。この列の値は、行に適用される Bool 引数の値です。

これは、アラートクエリの作成に使用できます。出力テーブルには、アラートの条件が満たされたことを示すブール値列があります。アラート施設は、このメソッドを使用して、アラートの開始または停止の条件とタイミングを判断します。

condition オペレーションでは、入力テーブルをアライメントし、明示的なアライメント ウィンドウを使用したクエリによって生成する必要があります。これは、アライメント オペレーション(| align rate(10m) など)に対するウィンドウ引数、または window テーブル オペレーションによって指定されます。

例:

  fetch gce_instance :: compute.googleapis.com/instance/cpu/usage_time
  | window 5m
  | condition val() < .5

2 つの値の列を含むテーブルが生成されます。最初の列は Bool 列で、入力テーブルの usage_time 値列が .5 より小さい場合に true になります。2 番目の列は、入力からの usage_time の値列のコピーです。

absent_for   入力がない場合の条件を作成します。


シグネチャ:   Table   | absent_for   lit-Duration

absent_for テーブル オペレーションでは、activesignal の 2 つの値列を持つテーブルが生成されます。active 列は、テーブル入力からデータが欠落している場合は true、それ以外の場合は false です。これは、入力がない場合にアラートで使用する条件クエリを作成する場合に有用です。

absent_for は入力時系列ごとに、入力と同じ時系列識別子がアライメントされた出力時系列を作成します。アライメント期間は、次の every で指定されるか、デフォルトの期間です。

Duration 引数には時間制限を指定します。この時間制限内の出力ポイントの前の時点よりも入力時系列にポイントがある場合、出力ポイントの active 列の値は false になります 該当する入力ポイントがない場合、active 列は true になり、制限時間内に入力がないことを示します。

入力テーブルに値列がある場合、signal 列には、入力時系列の直近の入力ポイント(制限範囲内のもの)の最初の値列の値が格納されます。入力テーブルに値列がない場合、出力ポイントの signal 列は、最後の入力ポイントからの分数を表す整数になります。

各出力ポイントについて、absent_for テーブル オペレーションは、入力ポイントの 24 時間前までにさかのぼります。過去 24 時間に入力ポイントがない場合、その時間の出力は出力されません。

例:

  fetch  gce_instance :: compute.googleapis.com/instance/cpu/usage_time
  | absent_for 8h

過去 24 時間に入力ポイントがあり、かつ過去 8 時間(8h)内にポイントがない場合、仮想マシン(gce_instance)の usage_time 時系列ごとに、absent_for は true の active 列の出力ポイントが含まれるアライメントされた時系列を生成します。これは適切なアラートクエリです。

  fetch  gce_instance :: compute.googleapis.com/instance/cpu/usage_time
  | value [] | absent_for 8h

これは前の例と似ていますが、| value []absent_for オペレーションへの入力から値列を削除するため、signal 列は最後の入力ポイントからの時間(分)に設定されます。

その他

ident   アイデンティティ テーブル オペレーション。入力テーブルは変更されません。


シグネチャ:   Table   | ident

ident テーブル オペレーションは入力テーブルに変更を加えず、そのまま出力します。

例:

  fetch  gce_instance :: compute.googleapis.com/instance/cpu/usage_time |
    { ident ; group_by [zone] } |
    join | value [zone_fraction: val(0) / val(1)]

指定されたテーブルの行ごとに、インスタンスが属するゾーン内の全インスタンスの合計値に対するインスタンスの値の比率を計算します。

ratio   2 つのアライメントされた入力テーブルの値列の比率を計算します。


シグネチャ:   Table++   | ratio

ratio テーブル オペレーションは、2 つのアライメントされた入力テーブル(分子テーブル入力と分母テーブル入力)をそれぞれ受け取ります。両方のテーブル入力には、数値型の値列が 1 つのみ必要です。

分母テーブルの時系列識別子列は、分子テーブルの時系列識別子列のサブセットである必要があります。両方のテーブルに同じ時系列識別子列(名前と型)がある場合、比率の計算時にデフォルト値のゼロが分子として使用されます。

filter_ratio   入力値列の 2 つのフィルタリングされた合計の比率を計算します。


シグネチャ:   Table   | filter_ratio   Bool,   [ Bool ]

filter_ratio テーブル オペレーションは、数値型の値列を 1 つだけ持つ入力テーブルを 1 つ受け取ります。入力テーブルが整列されていない場合は、align テーブル オペレーションが自動的に挿入されてアライメントが行われます。

filter_ratio オペレーションは、指定されたタイムスタンプですべての入力行を集計し、分子と分母の合計を計算し、各タイムスタンプでの合計の比率を時系列で生成します。最初の Bool 引数は分子の合計値を制御し、2 番目の Bool 引数は分母の合計値を制御します。2 番目の引数はオプションで、指定しない場合はデフォルトの true になります。

Bool 引数は行ごとに評価され、true の場合、その行の値列は、分子(最初の Bool)または分母(2 番目の Bool)の合計に含まれます。

filter_ratio_by   入力値列の 2 つのフィルタされた合計のグループ化された比率を計算します。


シグネチャ:   Table   | filter_ratio_by   RowToTSID,   Bool,   [ Bool ]

filter_ratio_by テーブル オペレーションは、数値型の値列を 1 つだけ持つ入力テーブルを 1 つ受け取ります。入力テーブルが整列されていない場合は、align テーブル オペレーションが自動的に挿入されてアライメントが行われます。

filter_ratio_by オペレーションは、RowToTSID 引数によって計算された同じ時系列識別子を持つ行をグループ化します。各グループについて、分子と分母の合計を計算し、各タイムスタンプでの合計の比率を使用して時系列を生成します。最初の Bool 引数は分子の合計値を制御し、2 番目の Bool 引数は分母の合計値を制御します。2 番目の引数はオプションで、指定しない場合はデフォルトの true になります。

Bool 引数は行ごとに評価され、true の場合、その行の値列は、分子(最初の Bool)または分母(2 番目の Bool)の合計に含まれます。

RowToTSID 引数によって計算された時系列識別子を使用して、各グループについて 1 つの時系列が計算されます。

関数

このセクションでは、Monitoring クエリ言語の式(expr)で使用できる各関数について説明します。

  • 入力行の列
    • val   入力ポイント(行)の値列の値。
    • end   入力ポイント(行)の終了時刻。
    • start   入力ポイント(行)の開始時刻。
    • older   時系列内の 1 個前のポイント(行)の値。
    • adjacent_delta   入力ポイントと 1 個前のポイントの間の値の変化。
    • adjacent_rate   入力ポイントと 1 個前のポイント(行)との間の変化率。
    • hash_tsid   時系列識別子列のハッシュを返します。
  • 論理
    • not   ブール値の論理否定。
    • and   2 個のブール値の論理積。
    • or   2 個のブール値の論理和。
    • true   ブール値の true。
    • false   ブール値の false。
    • has   set 引数に特定の値が含まれている場合は true。
    • has_value   引数の式が値を計算する場合は true。
    • if   2 個の値から条件によって選択された値。
    • or_else   ある値、または、ある値でない場合は別の値。
  • 比較
    • eq   等しい。
    • ne   等しくない。
    • ge   以上。
    • gt   より大きい。
    • le   以下。
    • lt   より小さい。
  • 算術
    • add   2 つの数値の合計。
    • sub   2 つの数値の差。
    • mul   2 つの数値の積。
    • div   2 つの数値の比率。
    • int_div   2 個の整数の除算の商。
    • abs   絶対値。
    • neg   数値の負数。
    • pos   数値入力のアイデンティティ。
    • rem   2 個の整数の除算の剰余。
  • 数学
  • 文字列
  • 正規表現
    • re_full_match   正規表現が文字列値全体と一致する場合は true。
    • re_partial_match   正規表現が文字列値の一部と一致する場合は true。
    • re_extract   正規表現に一致した値を別の文字列に抽出します。
    • re_replace   正規表現の最初の一致を別の文字列に置換します。
    • re_global_replace   正規表現のすべての一致を別の文字列に置換します。
  • 集計
    • sum   数値のグループの合計。
    • distribution   数値または分布値のグループからの分布。
    • count   値のグループ内での値の数のカウント。
    • row_count   入力行の数。
    • count_true   ブール値のグループ内の true 値の数。
    • min   数値のグループの最小値。
    • max   数値のグループの最大値。
    • diameter   数値のグループの最大値と最小値の差。
    • mean   数値のグループの平均値。
    • stddev   値のグループの標準偏差。
    • variance   数値のグループの分散。
    • covariance   値ペアのグループの共分散。
    • median   数値または分布値のグループの中央値。
    • percentile   数値または分布値のグループのパーセンタイル。
    • fraction_less_than   固定値より小さい値のグループの割合。
    • fraction_true   ブール値のグループの、true である値の割合。
    • any_true   ブール値のグループの論理和。
    • all_true   ブール値のグループの論理積
    • pick_any   値のグループの任意に選択された要素の値。
    • singleton   要素が 1 個しかない値のグループの要素の値。
    • unique   値のグループの共通の値(すべての値が同じである必要があります)。
    • aggregate   任意の型の値のグループからのデフォルト集約値。
    • weighted_distribution   加重値のグループからの分布。
  • アライメント
    • rate   アライメントされた時点での変化率を計算します。
    • delta   アライメントされた時点での値の変化を計算します。
    • any_true_aligner    ウィンドウ内の true 値を見つけて Bool 時系列をアライメントします。
    • count_true_aligner    ウィンドウ内の true 値をカウントして、Bool 時系列をアライメントします。
    • delta_gauge   Gauge 時系列としてアライメントされた時点での値の変化を計算します。
    • fraction_true_aligner    Bool 時系列をウィンドウ内の true 値の割合でアライメントします。
    • int_mean_aligner    ウィンドウ内で Int 値の平均を求めることにより、アライメントします。
    • interpolate   アライメントされた時点での補完値を計算します。
    • mean_aligner    ウィンドウ内の値の平均を求めることで、アライメントします。
    • next_older 前の時刻から後の時刻に移動することによりアライメントされたポイント。
    • next_younger    後の時刻から前の時刻に移動することによりアライメントされたポイント。
  • 単位の操作
    • scale    値を別の測定単位にスケーリングします。
    • cast_units    値の測定単位を設定します。
  • 期間ウィンドウ
    • window   アライメント期間と同じウィンドウを示します。
    • sliding   切り離すのではなくスライドされた(重なった)ウィンドウを示します。
  • Distribution
  • バケット指定子
    • powers_of   バケット境界が指数関数的に増加するバケット指定。
    • fixed_width   同じサイズのバケットを含むバケット指定。
    • custom   バケット境界のリストからのバケット指定。
    • num_buckets   バケット指定のバケットの数を設定します。
    • bounds   最初のバケットの下限と最後のバケットの上限を設定します。
    • lower   バケット指定の最初のバケットの下限を設定します。
  • その他
    • cast_double   Int 値を Double に変換します。
    • cast_gauge   Cumulative または Delta の時系列値を Gauge にキャストします。
    • within   並べ替え値の計算のウィンドウを指定します。

入力行の列

クエリ内の式は、入力行の列に作用します。列は通常、名前を指定することでアクセスできます。このセクションの関数は、列にアクセスするための代替手段を提供します。

時刻列には列名がなく、start 関数と end 関数によってアクセスされます。

値列には、val 関数を使用して名前または位置でアクセスできます。

older 関数では、時系列の 1 個前の行の列にアクセスできます。

val   入力ポイント(行)の値列の値。


シグネチャ:   ImplicitRowInput   val([ lit-Int ] )   →   InputType     (implicit row input)

val 関数は、入力行の値列にアクセスするときに列名を使用する代わりの手段を提供します。Int 引数(デフォルト値 0)は、値列の順序付きセット(最初の値列の 0 から始まる)にインデックスを付け、インデックス付きの値列の値を返します。これは、値列名を使用した場合の結果と同じ値です。

val 関数が、負の値または値列の数以上のインデックスを示している場合、静的エラーになります。

end   入力ポイント(行)の終了時刻。


シグネチャ:   ImplicitRowInput   end( )   →   Date.Gauge     (implicit row input)

end 関数は、現在の入力行の終了時刻列の日付値を返します。

start   入力ポイント(行)の開始時刻。


シグネチャ:   ImplicitRowInput   start( )   →   Date.Gauge     (implicit row input)

start 関数は、現在の入力行の開始時刻列の日付値を返します。行に開始時刻が設定されていない場合(Gauge データのみが含まれているため)、開始時刻は no-value を返します。

older   時系列内の 1 個前のポイント(行)の値。


シグネチャ:   older(ColumnValue.CumulativeOK )   →   FirstArgType.FirstArgKind
          older(Date )   →   Date.FirstArgKind

older の引数は、列名または列の値を指定する関数(valendstart)にする必要があります。返される値は、同じ時系列の入力行の1 個前の行のその列の値です。同じ時系列に前の行がない場合、olderno-valueを返します。

参照される列は、値列、時刻列、または時系列識別子列です。時系列識別子列の場合、olderは同じ時系列に前の行がなくても引数式と同じ値を返します。

adjacent_delta   入力ポイントと1 個前のポイントの間の値の変化。


シグネチャ:   ImplicitRowInput   adjacent_delta( )   →   InputType     (implicit row input)

adjacent_delta 関数は、単一の数値(Int または Double)列または分布値列を持つテーブルに対して動作します。

Gauge 時系列に適用された場合、adjacent_delta は、現在の入力行の値列の値と、同じ時系列における1 個前の行の値列の値との差を返します。 同じ時系列に1 個前の行がない場合、adjacent_deltano-valueを返します。結果には Gaige 時系列の種類があります。

Delta 時系列に適用すると、adjacent_deltaDelta 時系列の種類を保持する値列の値を返します。各出力ポイントは、生成元である入力ポイントと同じ値、開始時刻、終了時刻を持ちます。

Cumulative 時系列がクエリで使用されることはほとんどありませんが、Cumulative 時系列に適用すると、adjacent_delta は次のいずれかの値を返します。

  • 入力ポイントの開始時刻が前のポイントの終了時刻よりも前である場合、adjacent_deltaは入力ポイントの値から1 個前のポイントの値を引いた値を返します。

  • 入力ポイントの開始時刻が1 個前のポイントの終了時刻よりも後である場合、adjacent_delta は入力ポイントの値を返します(開始時点で 0 の値を差し引きます)。

結果の時系列には Delta 時系列の種類があり、各ポイントは元の開始時刻または次の前の入力ポイントの終了時刻のいずれか後の方です。

adjacent_rate   入力ポイントと 1 個前のポイント(行)との間の変化率。


シグネチャ:   ImplicitRowInput   adjacent_rate( )   →   Double.Gauge     (implicit row input)

adjacent_rate 関数は、単一の数値(Int または Double)列または分布値列を持つテーブルに対して動作します。

Gauge 時系列または Cumulative 時系列に適用された場合、adjacent_rate は、現在の入力行の値列の値と、同じ時系列における1個前の行の値列の値との変化率を返します。 これは、値の差を 2 つの行の終了時刻の差で割った値です。同じ時系列に1 個前の行がない場合、adjacent_rateno-valueを返します。結果には Gaige 時系列の種類があります。

Delta 時系列に適用すると、adjacent_rate は現在の入力行の値列をその行の開始時刻と終了時刻の差で割った値を返します。

hash_tsid   時系列識別子列のハッシュを返します。


シグネチャ:   ImplicitRowInput   hash_tsid([ lit-Int ] )   →   Int     (implicit row input)

hash_tsid 関数は、現在の入力行の時系列識別子のフィールドの値のハッシュを返します。引数を指定すると、ハッシュのシードとして使用されます。

論理

not   ブール値の論理否定。


シグネチャ:   not(Bool )   →   Bool

not 関数はブール値を受け取り、引数が false の場合は true を返し、true の場合は false を返します。入力引数が no-value の場合、それが結果です。

and   2 個のブール値の論理積。


シグネチャ:   and(Bool,   Bool )   →   Bool

and 関数は、両方の入力が true の場合は true を返し、それ以外の場合は false を返します。いずれかの入力が no-value の場合、and は常に no-value を返します。

or   2 個のブール値の論理和。


シグネチャ:   or(Bool,   Bool )   →   Bool

or 関数は、いずれかの入力が true の場合は true を返し、それ以外の場合は false を返します。いずれかの入力が no-value の場合、or は常に no-value を返します。

true   ブール値の true。


シグネチャ:   ImplicitRowInput   true( )   →   lit-Bool     (implicit row input)

この関数は、リテラル Booltrue を返します。

false   ブール値の false。


シグネチャ:   ImplicitRowInput   false( )   →   lit-Bool     (implicit row input)

この関数は、リテラル Boolfalse を返します。

has   set 引数に特定の値が含まれている場合は true。


シグネチャ:   has(Set,   lit-ColumnValue )   →   Bool

has 関数は、最初の引数セットが要素として 2 番目の引数を持つ場合に true を返します。

has_value   引数の式が値を計算する場合は true。


シグネチャ:   has_value(ColumnValue )   →   Bool

has_value 関数は、引数が値に評価される場合は true を返し、no-value に評価される場合は false を返します。

if   2 個の値から条件によって選択された値。


シグネチャ:   if(Bool,   ColumnValue.Delta,   ColumnValue.Delta(same) )   →   LastArgType.Delta
          if(Bool,   ColumnValue,   ColumnValue(same) )   →   LastArgType

if 関数は、最初の引数の値(true または false)に応じて、2 番目または 3 番目の引数を返します。

if は最初の Bool 引数を評価します。no-value の場合は、no-value が結果です。最初の引数が true の場合は、2 番目の引数が返されます。最初の引数が false の場合は、3 番目の引数が返されます。

2 番目または 3 番目の引数は no-value でもかまいませんが、if の結果は、Bool 引数が no-value、または返された引数が no-value の場合にのみ no-value となります。選択されていない引数は、結果が no-value でなくても、no-value の場合があります。

if の 2 番目と 3 番目の引数が数値であり、どちらかの引数に単位がある場合は、両方の引数に単位が必要です。引数に単位がある場合は、それらは同等でなければならないか、ここで与えられたルールは、単位が同等になるように if を適用する前に引数の一方をスケーリングすることを許可しなければなりません。1 つの引数だけに単位がある場合、または両方の引数に同等にできない単位がある場合は、エラーとなります。

if の結果は、2つ目の引数の単位であり、場合によってはスケールされます。

or_else   ある値、または、ある値でない場合は別の値。


シグネチャ:   or_else(ColumnValue,   ColumnValue(same) )   →   LastArgType

or_else 関数は、最初の引数の値を返します。ただし、no-value の場合は 2 番目の引数の値を返します。

or_else 関数は、両方の引数が no-value の場合にのみ no-value を返します。

or_else の引数が数値であり、どちらかの引数に単位がある場合、両方の引数に単位が必要です。引数に単位がある場合は、それらは同等でなければならないか、ここで与えられたルールは、単位が同等になるように or_else を適用する前に引数の一方をスケーリングすることを許可しなければなりません。1 つの引数だけに単位がある場合、または両方の引数に同等にできない単位がある場合は、エラーとなります。

or_else の結果は、最初の引数の単位を持ち、場合によってはスケールされます。

比較

比較演算子は、同じ型の 2 つの値または 2 つの数値(Int または *Double)を比較し、Bool 値を返します。ほとんどの関数とは異なり、比較演算子は no-value を返しません。入力が no-value の場合、他のどの値よりも大きい特定の値と見なされます。

eq   等しい。


シグネチャ:   eq(Num,   Num )   →   Bool
          eq(Comparable,   Comparable(same) )   →   Bool

最初の Comparable 引数が 2 番目の Comparable 引数と比較され、同じ場合は true、同じでない場合は false が返されます。一方の引数が Int で、もう一方の引数が Double の場合、Int 引数は Double 値に変換されてから比較されます。

いずれかの入力が no-value の場合は、比較が行われ、Bool 引数が返されます。両方の値が no-value の場合は true が、それ以外の場合は false が返されます(これにより、no-value がそれ自体と等しいものとして扱われます)。

数値引数の比較の場合、引数のいずれかに 単位 が含まれている場合は、両方の引数に単位を含め、単位を同じにする必要があります。結果(タイプが Bool)では、単位はありません。eq の引数に同じディメンションを持つ同等でない単位がある場合、その 1 つの引数で単位が自動的にスケーリング にされ、両方の引数の単位が同等になります。

eq の引数が数値であり、どちらかの引数に単位がある場合、両方の引数に単位が必要です。引数に単位がある場合は、それらは同等でなければならないか、ここで与えられたルールは、単位が同等になるように eq を適用する前に引数の一方をスケーリングすることを許可しなければなりません。1 つの引数だけに単位がある場合、または両方の引数に同等にできない単位がある場合は、エラーとなります。

「eq」の結果(タイプが Bool)では、単位はありません。

resource.project_id 列とリテラル文字列の比較については、resource.project_id の照合で説明されているように、プロジェクト番号とプロジェクト名の違いに対処するための特別な扱いがあります。

ne   等しくない。


シグネチャ:   ne(Num,   Num )   →   Bool
          ne(Comparable,   Comparable(same) )   →   Bool

最初の Comparable 引数が 2 番目の Comparable 引数と比較され、同じ場合は false、同じでない場合は true が返されます。一方の引数が Int で、もう一方の引数が Double の場合、Int 引数は Double 値に変換されてから比較されます。

いずれかの入力が no-value の場合は比較が行われ、Bool 引数が返されます。両方の値が no-value の場合は false が、それ以外の場合は false が返されます。(これにより、no-value がそれ自体と等しいものとして扱われます)。

ne の引数が数値であり、どちらかの引数に単位がある場合、両方の引数に単位が必要です。引数に単位がある場合は、それらは同等でなければならないか、ここで与えられたルールは、単位が同等になるように ne を適用する前に引数の一方をスケーリングすることを許可しなければなりません。1 つの引数だけに単位がある場合、または両方の引数に同等にできない単位がある場合は、エラーとなります。

「ne」の結果(タイプが Bool)では、単位はありません。

resource.project_id 列とリテラル文字列の比較については、resource.project_id の照合で説明されているように、プロジェクト番号とプロジェクト名の違いに対処するための特別な扱いがあります。

ge   以上。


シグネチャ:   ge(Num,   Num )   →   Bool
          ge(Comparable,   Comparable(same) )   →   Bool

最初の Comparable 引数が 2 番目の Comparable 引数と比較され、最初の引数が 2 番目以上の場合は true、それ以外の場合は false が返されます。一方の引数が Int で、もう一方の引数が Double の場合、Int 引数は Double 値に変換されてから比較されます。

いずれかの入力が no-value の場合、比較が行われ、Bool 引数が返されます。最初の値が no-value の場合 true、それ以外の場合は false が返されます。(これにより、no-value が他の値よりも大きくなります)。

ge の引数が数値の場合、どちらかの引数に単位がある場合は、両方の引数に単位が必要です。引数に単位がある場合は、単位を同等にする必要があります。単位が同等ではないが同じディメンションを持つ場合、ここで説明したように、引数の一方が他方と同じ単位を持つように自動的にスケーリングされる場合があります。1 つの引数だけに単位がある場合、または引数が同等でない単位を持ち、スケーリング行われていない場合は、エラーとなります。

「ge」の結果(タイプが Bool)では、単位はありません。

gt   より大きい。


シグネチャ:   gt(Num,   Num )   →   Bool
          gt(Comparable,   Comparable(same) )   →   Bool

最初の Comparable 引数が 2 番目の Comparable 引数と比較され、最初の引数が 2 番目の引数よりも大きい場合は true、それ以外の場合は false が返されます。一方の引数が Int で、もう一方の引数が Double の場合、Int 引数は Double 値に変換されてから比較されます。

いずれかの入力が no-value の場合、比較が行われ、Bool 引数が返されます。2 番目の値が no-value の場合は false、それ以外の場合は true が返されます。(これにより、no-value が他の値よりも大きくなります)。

gt の引数が数値であり、どちらかの引数に単位がある場合、両方の引数に単位が必要です。引数に単位がある場合は、それらは同等でなければならないか、ここで与えられたルールは、単位が同等になるように gt を適用する前に引数の一方をスケーリングすることを許可しなければなりません。1 つの引数だけに単位がある場合、または両方の引数に同等にできない単位がある場合は、エラーとなります。

「gt」の結果(タイプが Bool)では、単位はありません。

le   以下。


シグネチャ:   le(Num,   Num )   →   Bool
          le(Comparable,   Comparable(same) )   →   Bool

最初の Comparable 引数が 2 番目の Comparable 引数と比較され、最初の引数が 2 番目以下の場合は true、それ以外の場合は false が返されます。一方の引数が Int で、もう一方の引数が Double の場合、Int 引数は Double 値に変換されてから比較されます。

いずれかの入力が no-value の場合、比較が行われ、Bool 引数が返されます。2 番目の値が no-value の場合は true、それ以外の場合は false が返されます。(これにより、no-value が他の値よりも大きくなります)。

le の引数が数値であり、どちらかの引数に単位がある場合、両方の引数に単位が必要です。引数に単位がある場合は、それらは同等でなければならないか、ここで与えられたルールは、単位が同等になるように le を適用する前に引数の一方をスケーリングすることを許可しなければなりません。1 つの引数だけに単位がある場合、または両方の引数に同等にできない単位がある場合は、エラーとなります。

「le」の結果(タイプが Bool)では、単位はありません。

lt   より小さい。


シグネチャ:   lt(Num,   Num )   →   Bool
          lt(Comparable,   Comparable(same) )   →   Bool

最初の Comparable 引数が 2 番目の Comparable 引数と比較され、最初の引数が 2 番目の引数よりも小さい場合は true、それ以外の場合は false が返されます。一方の引数が Int で、もう一方の引数が Double の場合、Int 引数は Double 値に変換されてから比較されます。

いずれかの入力が no-value の場合、比較が行われ、Bool 引数が返されます。最初の値が no-value の場合 false、それ以外の場合は true が返されます。(これにより、no-value が他の値よりも大きくなります)。

lt の引数が数値であり、どちらかの引数に単位がある場合、両方の引数に単位が必要です。引数に単位がある場合は、それらは同等でなければならないか、ここで与えられたルールは、単位が同等になるように lt を適用する前に引数の一方をスケーリングすることを許可しなければなりません。1 つの引数だけに単位がある場合、または両方の引数に同等にできない単位がある場合は、エラーとなります。

「It」の結果(タイプが Bool)では、単位はありません。

算術

算術演算子を実装する関数。

add   2 つの数値の合計。


シグネチャ:   add(Num.Delta,   Num.Delta )   →   Num.Delta
          add(Num,   Num )   →   Num
          add(Duration,   Duration )   →   Duration
          add(Date,   Duration )   →   Date
          add(Duration,   Date )   →   Date

2 つの Num 引数に対する add 関数は、いずれかの入力が Double 値の場合は Double 値として、それ以外の場合は Int 値として、その引数の合計を返します。両方の入力が Delta 時系列の種類の場合、出力は Delta 時系列の種類になります。それ以外の場合、出力は Gauge 時系列の種類です。

2 つの Duration 引数の add 関数は、それらの合計である Duration を返します。

Date 引数と Duration 引数の add 関数は、Date よりも後の Duration である日付を返します。Duration が負の場合、結果は入力された Date よりも前になります(以前に戻ります)。

add の引数が数値であり、どちらかの引数に単位がある場合、両方の引数に単位が必要です。引数に単位がある場合は、それらは同等でなければならないか、ここで与えられたルールは、単位が同等になるように add を適用する前に引数の一方をスケーリングすることを許可しなければなりません。1 つの引数だけに単位がある場合、または両方の引数に同等にできない単位がある場合は、エラーとなります。

add の結果は、最初の引数の単位を持ち、場合によってはスケールされます。

sub   2 つの数値の差。


シグネチャ:   sub(Num.Delta,   Num.Delta )   →   Num.Delta
          sub(Num,   Num )   →   Num
          sub(Duration,   Duration )   →   Duration
          sub(Date,   Duration )   →   Date
          sub(Date,   Date )   →   Duration

2 つの Num 引数に対する sub 関数は、いずれかの入力が Double 値の場合は Double 値として、それ以外の場合は Int 値として、最初の引数から 2 番目の引数を引いた値を返します。両方の入力が Delta 時系列の種類の場合、出力は Delta 時系列の種類になります。それ以外の場合、出力は Gauge 時系列の種類です。

sub 関数の 2 つの Duration 引数は、それらの数値の差である Duration を返します。

Date 引数と Duration 引数の sub 関数は、Date よりも前の Duration である日付を返します。Duration 引数が負の場合、結果は Date 引数の後になります。

sub の引数が数値であり、どちらかの引数に単位がある場合、両方の引数に単位が必要です。引数に単位がある場合は、それらは同等でなければならないか、ここで与えられたルールは、単位が同等になるように sub を適用する前に引数の一方をスケーリングすることを許可しなければなりません。1 つの引数だけに単位がある場合、または両方の引数に同等にできない単位がある場合は、エラーとなります。

sub の結果は、最初の引数の単位を持ち、場合によってはスケールされます。

mul   2 つの数値の積。


シグネチャ:   mul(Num.Delta,   lit-Num )   →   Num.Delta
          mul(lit-Num,   Num.Delta )   →   Num.Delta
          mul(Num,   Num )   →   Num
          mul(Duration,   Num )   →   Duration
          mul(Num,   Duration )   →   Duration

2 つの Num 引数に対する mul 関数は、いずれかの入力が Double 値の場合は Double 値として、それ以外の場合は Int 値として、その 2 つの引数の積を返します。一方の入力が Delta 時系列の種類で、もう一方の入力がリテラルの場合、出力は Delta 時系列の種類になります。それ以外の場合、出力は Gauge 時系列の種類です。

NumDuration に対する mul 関数は、DurationDuration タイプとしての Num を掛けます。

数値引数のいずれかに 単位 が含まれている場合は、両方の引数に単位を含め、単位を同じにする必要があります。結果の単位は、引数に単位がある場合、2 つの引数の単位の積になります。1 つの例外はリテラルでの乗算です。リテラルが明示的に指定された測定単位を持たない場合があります。そのため、もう一方の引数に測定単位がある場合は、単位 1 がリテラルに付与されます。その結果、もう一方の引数の単位が指定されます。

div   2 つの数値の比率。


シグネチャ:   div(Num.Delta,   lit-Num )   →   Double.Delta
          div(Num,   Num )   →   Double
          div(Duration,   Num )   →   Duration
          div(Duration,   Duration )   →   Double
          div(Date,   Duration )   →   Double

div 関数は、最初の Num 引数を 2 番目の Num 引数で割り、比率を Double 値として返します。

2 番目の Num 引数が 0 の場合、結果は生成されません。

div 関数は、最初の引数を 2 番目の引数で割り、比率を Double 値として返します。引数が Date または Duration の場合、値は double 型で表されます。つまり、倍精度浮動小数点値で表現したDate または Duration となります。結果が Date または Duration の場合、比率は、Date または Duration が表すことができる最も近い値に丸められた同じ単位の値として解釈されます。

Duration 値で割られた Date の場合、結果は Duration 値で、Unix エポック(d'1970/01/01-00:00:00+00:00')からの Duration 期間の数です。したがって、d'2020/06/01-01:20:03' / 1sd'2020/06/01-01:20:03'時点の d'1970/01/01-00:00:00+00:00' からの秒数となります。

2 番目の引数が 0 の場合、div 関数は結果を生成しません。

数値引数のいずれかに 単位 が含まれている場合は、両方の引数に単位を含めます。結果の単位は、引数に単位がある場合には、1 番目の引数の単位を2番目の単位で割った値です。1 つの例外はリテラルでの除算です。リテラルが明示的に指定された測定単位を持たない場合があります。そのため、もう一方の引数に測定単位がある場合は、単位 1 がリテラルに付与されます。その結果、もう一方の引数の単位が指定されます。

int_div   2 個の整数の除算の商。


シグネチャ:   int_div(Int,   Int )   →   Int
          int_div(Duration,   Int )   →   Duration
          int_div(Duration,   Duration )   →   Int
          int_div(Date,   Duration )   →   Int

int_div 関数は、最初の引数を 2 番目の引数で割り、商を Int 値として返します。引数が Date または Duration の場合、値は整数で表されます。つまり、倍精度浮動小数点値で表現したDate または Duration となります。結果が Date または Duration の場合、数値商は同じ単位の値として解釈されます。

Duration 値で割られた Date の場合、結果は Int 値で、Unix エポック(d'1970/01/01-00:00:00+00:00')からの Duration 期間の数です。したがって、d'2020/06/01-01:20:03' / 1sd'2020/06/01-01:20:03'時点の d'1970/01/01-00:00:00+00:00' からの秒数となります。

2 番目の引数が 0 の場合、int_div 関数は結果を生成しません。

数値引数のいずれかに 単位 が含まれている場合は、両方の引数に単位を含めます。結果の単位は、引数に単位がある場合には、1 番目の引数の単位を2番目の単位で割った値です。1 つの例外はリテラルでの除算です。リテラルが明示的に指定された測定単位を持たない場合があります。そのため、もう一方の引数に測定単位がある場合は、単位 1 がリテラルに付与されます。その結果、もう一方の引数の単位が指定されます。

abs   絶対値。


シグネチャ:   abs(Num )   →   Num

abs 関数は数値(Int または *Double)入力を受け取り、入力と同じ大きさで負でない同じ型の値を返します。

abs の結果では、測定単位は同じです。

neg   数値の負数。


シグネチャ:   neg(Num )   →   Num
          neg(Duration )   →   Duration

neg 関数は、引数の負数を返します。

pos   数値入力のアイデンティティ。


シグネチャ:   pos(Num )   →   Num
          pos(Duration )   →   Duration

pos 関数は 1 つの引数を返します。

rem   2 個の整数の除算の剰余。


シグネチャ:   rem(Int,   Int )   →   Int
          rem(Duration,   Duration )   →   Duration

rem 関数は、最初の Int 引数を 2 番目の Int 引数で割り、剰余を Int 値として返します。

2 番目の Num 引数が 0 の場合、結果は生成されません。

Rem の結果に添付される測定単位は、最初の引数の単位(ある場合)と同じです。

数学

一部の数学関数。

sqrt   平方根。


シグネチャ:   sqrt(Num )   →   Double

sqrt 関数は、Num 引数の平方根を Double 値として返します。

sqrt は、Num 引数が 0 に満たない場合、結果を生成しません。

sqrt の結果には測定の単位がありません。

log   自然対数。


シグネチャ:   log(Num )   →   Double

log 関数は、Num 引数の自然対数を Double 値として返します。

Num 引数が 0 以下の場合、log は結果を生成しません。

log の結果には測定の単位がありません。

exp   e の x 乗。


シグネチャ:   exp(Num )   →   Double

exp 関数は、e(自然対数の底)を Num 引数でべき乗した値を Double 値として返します。

exp 関数は、オーバーフロー時に Double 値の無限大を返します。

exp の結果には測定の単位がありません。

power   数値の x 乗。


シグネチャ:   power(Num,   Num )   →   Double

これは、最初の Num 引数の値を 2 番目の Num 引数でべき乗した値を Double 値として返します。いずれかの引数が Int の場合は、オペレーションの前に Double に変換されます。

power の結果には測定の単位がありません。

int_round   最も近い整数。


シグネチャ:   int_round(Double )   →   Int

int_round 関数は Double 値を受け取り、最も近い整数値に丸めて Int 値として返します。入力が値でない場合、または結果が Int 値として表現できない場合、結果は no-value になります。

int_round の結果は、その入力と同じ測定単位になります。

int_floor   下限の整数。


シグネチャ:   int_floor(Double )   →   Int

int_floor 関数は Double 値を受け取り、最も近い整数値に負の無限大に丸めて、Int 値として返します。入力が値でない場合、または結果が Int 値として表現できない場合、結果は no-value になります。

int_floor の結果は、その入力と同じ測定単位になります。

int_ceil   上限の整数。


シグネチャ:   int_ceil(Double )   →   Int

int_ceil 関数は Double 値を受け取り、最も近い整数値に無限大に丸めて Int 値として返します。入力が no-value の場合、または結果が Int 値として表現できない場合、結果は no-value です。

int_ceil の結果には測定の単位がありません。

文字列

String 値を処理する関数。

concatenate   文字列の連結。


シグネチャ:   concatenate(String,   String )   →   String

concatenate 関数は、2 つの String 引数の連結した値を返します。

string_to_double   StringDouble に変換します。


シグネチャ:   string_to_double(String )   →   Double

string_to_double 関数は、入力された String 引数を浮動小数点数として解析し、結果を Double 値として返します。 文字列が有効な浮動小数点値でない場合、結果は no-value になります。

string_to_double の結果には測定の単位がありません。

string_to_int64   StringInt に変換します。


シグネチャ:   string_to_int64(String )   →   Int

string_to_int64 関数は、入力された String 引数を整数として解析し、結果を Int 値として返します。文字列が有効な整数値でない場合、または Int 値として表現できない場合、結果は no-value になります。

string_to_int64 の結果には測定の単位がありません。

ascii_to_lower   ASCII の大文字を小文字に変更します。


シグネチャ:   ascii_to_lower(String )   →   String

ascii_to_upper 関数は String 引数を受け取り、各大文字の ASCII 文字が対応する小文字の ASCII 文字に変換されていることを除いて同じ String 値を返します。他のすべての文字は変更されません。

ascii_to_upper   ASCII の小文字を大文字に変更します。


シグネチャ:   ascii_to_upper(String )   →   String

ascii_to_upper 関数は String 引数を受け取り、各小文字の ASCII 文字が対応する大文字の ASCII 文字に変換されていることを除いて同じ値である String 値を返します。他のすべての文字は変更されません。

utf8_normalize   大文字と小文字の比較に適した Unicode 文字列。


シグネチャ:   utf8_normalize(String )   →   String

utf8_normalize 関数は String 引数を受け取り、入力が有効な utf8 エンコード文字列であるとの仮定のもと、入力値の大文字と小文字の比較に適した String 値を返します。

正規表現

RE2 正規表現を使用して照合、抽出、および変更を行う関数。

re_full_match   正規表現が文字列値全体と一致する場合は true。


シグネチャ:   re_full_match(String,   lit-String )   →   Bool

re_partial_match 関数は、文字列の入力とリテラル文字列の正規表現を受け取り、入力文字列全体が正規表現と一致する場合に、true を返します。それ以外の場合は、入力文字列引数が no-value であっても false を返します。

resource.project_id 列の正規表現一致は、resource.project_id の照合で説明されているように、プロジェクト番号とプロジェクト名の違いに対処するための特別な扱いがあります。

re_partial_match   正規表現が文字列値の一部と一致する場合は true。


シグネチャ:   re_partial_match(String,   lit-String )   →   Bool

re_partial_match 関数は、文字列の入力とリテラル文字列の正規表現を受け取り、入力文字列の一部が正規表現と一致する場合に、true を返します。それ以外の場合は、文字列引数が no-value であっても false を返します。

re_extract   正規表現に一致した値を別の文字列に抽出します。


シグネチャ:   re_extract(String,   [ lit-String ],   [ lit-String ] )   →   String

re_extract 関数は、入力 String 引数と 2 つのリテラル String 引数(正規表現と置換文字列)を受け取ります。結果は、入力文字列を正規表現と照合し、置換文字列内の表現でキャプチャ グループを置き換えることによって形成されます。 キャプチャ グループが置き換えられた置換文字列が結果になります。

正規表現の引数が指定されていない場合は、デフォルトで「(.*)」になり、最初の引数文字列全体が 1 つのキャプチャ グループに含まれます。

置換文字列の引数が指定されていない場合は、デフォルトで「R"\ 1"」になり、最初の置換グループが出力文字列になります。

入力文字列が no-value の場合、正規表現が一致しなかった場合、またはキャプチャ グループの置き換えが機能しなかった場合は、no-value が返されます。

re_replace   正規表現の最初の一致を別の文字列に置換します。


シグネチャ:   re_replace(String,   lit-String,   lit-String )   →   String

re_replace 関数は、入力 String 引数と 2 つのリテラル String 引数(正規表現と置換値)を受け取ります。正規表現が入力文字列のいずれかの部分と一致する場合、入力文字列内の最初の一致を置換文字列に置き換えることで、戻り値が生成されます。

入力文字列が no-value の場合、または一致しない場合は、入力文字列が戻り値になります。

re_global_replace   正規表現のすべての一致を別の文字列に置換します。


シグネチャ:   re_global_replace(String,   lit-String,   lit-String )   →   String

re_global_replace 関数は、入力 String 引数と 2 つのリテラル String 引数(正規表現と置換値)を受け取ります。正規表現の一致しない部分を置換文字列と置き換える(左から右へ)ことで、入力文字列から結果が生成されます。

入力文字列が no-value の場合、または一致しない場合は、入力文字列が戻り値になります。

集計

集計関数は、一連の入力値を最終出力値にまとめます。複数の入力行をグループ化し、1 つの出力行に集約する場合に使用します。

集計関数は、内部の集計状態を保持します。集計関数の引数式は、グループ化された入力行ごとに 1 回評価され、結果の値(存在する場合)が集計関数に渡されて、関数の内部状態に累積されます。グループ内のすべての行に対してこの処理が完了すると、集計関数が単一出力行の値列の作成に使用される出力値を生成します。

たとえば、mean(memory_usage)memory_usage 列を持つ行のセットに適用し、各行の引数式 memory_usage を評価して、結果の値(生成される場合)を mean 集計関数の内部状態に組み込みます(たとえば、値の合計と値の数となります)。 すべての行が処理されると、meanレデューサにより、内部状態から値(合計をカウントで割った値)が生成されます。

数値または Distribution 値を操作するほとんどの集計関数は、入力の測定単位を出力に渡します。例外は次のとおりです。

  • 出力の単位が 1 である countrow_count

  • 出力が入力の平方であるvariance

  • 出力が 2 つの入力の単位の積であるcovariance

  • fraction_less_thanfraction_true の出力の単位は 10^2.% です。

sum   数値のグループの合計。


シグネチャ   sum(Num )   →   Num.Delta     (temporal only)
          sum(Distribution )   →   Double.Delta     (temporal only)
          sum(Num )   →   Num.Gauge     (sliding temporal only)
          sum(Distribution )   →   Double.Gauge     (sliding temporal only)
          sum(Num )   →   Num.FirstArgKind
          sum(Distribution )   →   Double.FirstArgKind

引数の式が数値(Int または *Double)の場合は、渡された値の合計を返します。

引数の式が Distribution 値の場合は、渡されたすべての Distribution 値に含まれる母集団値の合計を返します。

一部の入力行について、引数式が値に評価されない場合や、Double の非定型値に評価される場合、その入力行は合計に影響しません。

数値(Int または Double)入力の場合、結果は入力式と同じ型(Int* または Double)になります。Distribution 入力値の場合、結果の型は Double になります。

非スライディング時間集計が行われる場合、または空間集計のみが行われ、入力時系列の種類も Delta である場合、出力には Delta 時系列の種類が含まれます。

sum の結果に添付された測定単位は、入力の単位と同じです。

distribution   数値または分布値のグループからの分布。


シグネチャ:   distribution(Num,   lit-BucketSpecification )   →   Distribution.Delta     (temporal only)
          distribution(Num,   lit-BucketSpecification )   →   Distribution.Gauge
          distribution(Distribution )   →   Distribution.Delta     (temporal only)
          distribution(Distribution )   →   Distribution.Gauge     (sliding temporal only)
          distribution(Distribution )   →   Distribution.FirstArgKind

最初の引数が Num 値の場合、入力値は、バケット指定が lit-Bucketer 引数で指定されている分布結果に収集されます。

最初の引数が Distribution 値の場合、分布は、すべての入力分布の母集団を含む分布結果に結合されます。結果の分布バケット指定は、入力された分布バケット指定から決定されます。バケット指定がすべて同じ場合は、そのバケット指定が使用されます。異なるバケット指定がある場合は、新たにマージされたバケット指定が使用されます。このマージされた指定は通常、最も精度の低い入力バケット指定です。

一部の入力行について、最初の引数式が値に評価されない場合や、Double の非定型値に評価される場合、その入力行はパーセンテージに影響しません。

distribution の結果に添付された測定単位は、入力の単位と同じです。

count   値のグループ内での値の数のカウント。


シグネチャ:   count(ColumnValue )   →   Int.Delta     (temporal only)
          count(ColumnValue )   →   Int.Gauge

渡された値の数のカウントを返します。引数の式が一部の入力行の値として評価されない場合や、Double 非定型値として評価される場合は、カウントされません。

非スライディング時間集計が行われる場合、出力には Delta 時系列の種類が含まれます。

count の結果に添付されている測定単位1 です。

row_count   入力行の数。


シグネチャ:   ImplicitRowSetInput   row_count( )   →   Int.Delta     (temporal only)
          ImplicitRowSetInput   row_count( )   →   Int.Gauge

row_count 集計関数は、集計対象の行数のカウントを返します。count とは異なり、row_count は引数を受け取らず、行から値を計算できるかどうかは考慮しません。

非スライディング時間集計が行われる場合、出力には Delta 時系列の種類が含まれます。

count の結果に添付されている測定単位1 です。

count_true   ブール値のグループ内の true 値の数。


シグネチャ:   count_true(Bool )   →   Int.Delta     (temporal only)
          count_true(Bool )   →   Int

入力ブール値は収集され、true である入力値の数が結果になります。

一部の入力行で、引数の式が値に評価されない場合、その入力行は結果に影響しません。

非スライディング時間集計が行われる場合、出力には Delta 時系列の種類が含まれます。

count_true の結果に添付されている測定単位1 です。

min   数値のグループの最小値。


シグネチャ:   min(Num )   →   Num

これにより、渡された数値が収集され、最小値が返されます。結果の型が入力の型と同じ場合。

一部の入力行で、引数の式が値に評価されない場合、その入力行は結果に影響しません。

min の結果に添付された測定単位は、入力の単位と同じです。

max   数値のグループの最大値。


シグネチャ:   max(Num )   →   Num

これにより、渡された数値が収集され、最大値が返されます。結果の型が入力の型と同じ場合。

一部の入力行で、引数の式が値に評価されない場合、その入力行は結果に影響しません。

max の結果に添付された測定単位は、入力の単位と同じです。

diameter   数値のグループの最大値と最小値の差。


シグネチャ:   diameter(Num )   →   Num

渡された数値が収集され、値の最大値と最小値の差が返されます。 結果の型が入力の型(Int または Double)と同じ場合。

一部の入力行で、引数の式が値に評価されない場合、その入力行は結果に影響しません。

diameter の結果に添付された測定単位は、入力の単位と同じです。

mean   数値のグループの平均値。


シグネチャ:   mean(Summable )   →   Double

引数の式が数値(Int または *Double)の場合は、渡された値の平均を返します。

引数の式の型が Distribution の場合、すべての分布のすべての値の平均が返されます。

一部の入力行について、引数式が値に評価されない場合や、Double の非定型値に評価される場合、その入力行は平均に影響しません。

mean の結果に添付された測定単位は、入力の単位と同じです。

stddev   値のグループの標準偏差。


シグネチャ:   stddev(Summable )   →   Double

引数の式が数値(Int または *Double)の場合は、渡された値の標準偏差を返します。

引数の式が Distribution 値の場合、すべての分布のすべての値の標準偏差を返します。

一部の入力行について、引数式が値に評価されない場合や、Double の非定型値に評価される場合、その入力行は標準偏差に影響しません。

stddev の結果に添付された測定単位は、入力の単位と同じです。

variance   数値のグループの分散。


シグネチャ:   variance(Summable )   →   Double

引数の式が数値(Int または *Double)の場合は、渡された値の分散を返します。

引数の式の型が Distribution の場合、すべての分布のすべての値の分散が返されます。

一部の入力行について、引数式が値に評価されない場合や、Double の非定型値に評価される場合、その入力行は分散に影響しません。

variance 関数の結果には測定単位は付いていません。

covariance   値ペアのグループの共分散。


シグネチャ:   covariance(Num,   Num )   →   Double

渡された数値(Int または *Double)のペアの共分散を返します。

一部の入力行について、引数式が値に評価されない場合や、Double の非定型値に評価される場合、その入力行は共分散に影響しません。

covariance 関数の結果には測定単位が付いていません。

median   数値または分布値のグループの中央値。


シグネチャ:   median(Summable )   →   Double

引数の式が数値(Int または *Double)の場合、渡された値の母集団の中央値の推定を返します。 中央値は、10%(その分だけ推定値のエラーを制限する)離れたバケット境界を持つ母集団の値から分布値を作成することによって計算されます。

数値入力から分布値を集計して中央値を計算するために使用するバケット指定は powers_of(1.05).num_buckets(500).lower(.01) です。これには、.01 から約 4e+8 までの範囲の値が含まれます。多くのユースケースを処理できますが、scale 関数を使用して入力を調整する必要がある場合があります。たとえばバイト数の範囲がギガバイトまたはテラバイトの場合、By から MiBy または「MBy」に調整する必要があります。

引数式が Distribution 値の場合、すべての分布から結合された値の母集団の中央値を返します。中央値は、すべての入力分布を 1 つの分布に結合して中央値を推定することで計算されます。中央値の精度は、入力分布のバケット境界によって異なります。

一部の入力行について、引数式が値に評価されない場合や、Double の非定型値に評価される場合、その入力行は標準偏差に影響しません。

median の結果に添付された測定単位は、入力の単位と同じです。

percentile   数値または分布値のグループのパーセンタイル。


シグネチャ:   percentile(Summable,   lit-Num )   →   Double

lit-Num 引数は、パーセンタイル(0〜100 の範囲)を示します。

最初の引数式が数値(Int または Double)の場合、渡された値の母集団のパーセンタイルの推定値を返します。パーセンタイルは、10%(その分だけ推定値のエラーを制限する)離れたバケット境界を持つ母集団の値から分布値を作成することによって計算されます。

数値入力から分布値を集計してパーセンタイルを算出するために使用するバケット指定は powers_of(1.05).num_buckets(500).lower(.01) です。これには、.01 から約 4e+8 までの範囲の値が含まれます。多くのユースケースを処理できますが、scale 関数を使用して入力を調整する必要がある場合があります。たとえばバイト数の範囲がギガバイトまたはテラバイトの場合、By から MiBy または「MBy」に調整する必要があります。

引数式が Distribution の場合は、すべての分布から集まった値の母集団のパーセンタイルを推定した値を返します。パーセンタイルは、すべての入力分布を統合してパーセンタイルを推定することで計算されます。パーセンタイルの精度は、入力分布のバケット境界によって異なります。

一部の入力行について、最初の引数式が値に評価されない場合や、Double の非定型値に評価される場合、その入力行はパーセンテージに影響しません。

percentile の結果に添付された測定単位は、入力の単位と同じです。

fraction_less_than   固定値より小さい値のグループの割合。


シグネチャ:   fraction_less_than(Summable,   lit-Num )   →   Double

最初の引数が数値(Int または *Double)の場合は、最初の引数に渡された値のコレクションの中で lit-Num 引数よりも小さい値の割合を返します。この割合を計算する際、非有限の Double 値と値でない Int 値および Double 値は無視されます。

最初の引数が Distribution 値の場合、渡されたすべての分布の母集団を結合し、その母集団中で lit-Num 引数の値よりも小さい集計された分布の値の割合を推定します。

fraction_less_than の結果に添付されている測定単位10^2.% です。

fraction_true   ブール値のグループの、true である値の割合。


シグネチャ:   fraction_true(Bool )   →   Double

入力されたブール値が収集され、結果は、true である入力値の割合である 0〜1 の範囲の Double になります。

一部の入力行で、引数の式が値に評価されない場合、その入力行は結果に影響しません。

fraction_true の結果に添付されている測定単位10^2.% です。

any_true   ブール値のグループの論理和。


シグネチャ:   any_true(Bool )   →   Bool

any_true 関数は、すべての入力値が true の場合に値 true を計算し、それ以外の場合はfalse を返します。

一部の入力行で、引数の式が値に評価されない場合、その入力行は結果に影響しません。

all_true   ブール値のグループの論理積


シグネチャ:   all_true(Bool )   →   Bool

all_true 関数は、すべての入力値が true の場合に値 true を計算し、それ以外の場合はfalse を返します。

一部の入力行で、引数の式が値に評価されない場合、その入力行は結果に影響しません。

pick_any   値のグループの任意に選択された要素の値。


シグネチャ:   pick_any(ColumnValue )   →   FirstArgType

この関数は、渡された値の中から 1 個を任意に選択して返します。

一部の入力行で、引数の式が値に評価されない場合、その入力行は結果に影響しません。

pick_any の結果に添付された測定単位は、入力の単位と同じです。

singleton   要素が 1 個しかない値のグループの要素の値。


シグネチャ:   singleton(ColumnValue )   →   FirstArgType

この関数は、1 つの行で評価された引数式の値を返します。引数式が評価され、複数の行の値が生成された場合は、以前に生成された値と評価されても、エラーになります。

一部の入力行で、引数の式が値に評価されない場合、その入力行は結果に影響しません。

singleton の結果に添付された測定単位は、入力の単位と同じです。

unique   値のグループの共通の値(すべての値が同じである必要があります)。


シグネチャ:   unique(Comparable )   →   FirstArgType

unique 関数は、指定されたすべての値と同じ値を返します。そのような値がない場合(少なくとも 2 個の異なる値が渡された場合)はエラーが発生し、渡された値の 1 個を返します。

一部の入力行で、引数の式が値に評価されない場合、その入力行は結果に影響しません。

unique の結果に添付された測定単位は、入力の単位と同じです。

aggregate   任意の型の値のグループからのデフォルト集約値。


シグネチャ:   aggregate(Num )   →   Num.Delta     (temporal only)
          aggregate(Distribution )   →   Distribution.Delta     (temporal only)
          aggregate(Num )   →   Num.Gauge     (sliding temporal only)
          aggregate(Distribution )   →   Distribution.Gauge     (sliding temporal only)
          aggregate(Num )   →   Num.FirstArgKind
          aggregate(Distribution )   →   Distribution.FirstArgKind
          aggregate(Bool )   →   Bool
          aggregate(String )   →   String

aggregate 関数は、入力のタイプに応じて集計を行います。

  • Int および Double 入力の場合、sum アグリゲータと同じです。

  • Distribution 入力の場合、distribution アグリゲータと同じです。

  • Bool 入力の場合、any_true アグリゲータと同じです。

  • String 入力の場合、pick_any アグリゲータと同じです。

weighted_distribution   加重値のグループからの分布。


シグネチャ:   weighted_distribution(Num,   Int,   lit-BucketSpecification )   →   Distribution.Delta     (temporal only)
          weighted_distribution(Num,   Int,   lit-BucketSpecification )   →   Distribution.Gauge

入力値は、バケット指定が lit-Bucketer 引数で指定される分布結果に収集されます。最初の引数は分布に追加する値で、2 番目の引数はその値の重みです。重みが M の値 N は、分布内で値 NM インスタンスと表されます。

一部の入力行について、最初または 2 番目の引数式が値に評価されない場合や、Double の非定型値に評価される場合、その入力行はパーセンテージに影響しません。

weighted_distribution の結果に添付された測定単位は、入力の単位と同じです。

アライメント

アライメント関数は、align テーブル オペレーションで使用され、時系列に一定の間隔でタイムスタンプを持つアライメントされたテーブルが作成されます。

明示的な Duration 引数に加えて、Aligner 関数は入力時系列と特定の時点を受け取り、その特定の時点の出力ポイントを生成します。

interpolate アライメント関数は、タイムスタンプが出力タイムスタンプをまたいでいる 2 つの隣接する入力ポイントの値を補完することによって、特定の時刻の値を生成します。

next_older および next_younger のアライメント関数は、タイムスタンプが前の、または後の入力時系列の 1 つのポイントから出力タイムスタンプに値を生成します。

deltaratedelta_gauge のAligner関数は、出力ポイントの終了時刻と以前のDuration引数の間の時間枠における入力時系列の値の変化に基づいて出力を計算します。値に関する前述の変化は次のように計算されます。

  • したがって、ある特定の時点での入力時系列の値は、出力時刻前後の最も近いポイント間の線形補完によって計算できます。特定のウィンドウにおける値の変化は、ウィンドウの開始時刻での補完値と終了時刻での補完値の間の差分です。

  • ウィンドウ内の変化量は、範囲 が完全にウィンドウ内にあるすべてのポイントの値と、範囲がウィンドウと部分的に重複するポイントの値の比例配分との合計です。

  • Cumulative 時系列の場合、同じ開始時刻を持つ 2 つの隣接するポイント間の値の補完は、2 つの値間の線形補完によって行われます。開始位置が異なる 2 つの隣接点間の補完(後のポイントの開始時点が 2 つのポイントの終了時刻の間)は、次のように処理されます。

    • 出力時間が前のポイントの開始時刻と後のポイントの開始時刻の間にある場合、結果は前のポイントの値になります。(前のポイントとリセット時間の間の変更はありません)。

    • 出力時間が後のポイントの開始時刻と終了時刻の間にある場合、値はゼロ(開始時刻)とポイントの値との線形補間です。

    Cumulative 時系列の場合、特定のウィンドウにおける値の変化は、ウィンドウの開始時刻での補完値と終了時刻での補完値との間の差分と、リセット用の補正値です。 ウィンドウ内でのリセット時刻ごとに、リセット時刻の前のポイントの値が変更値に追加され、その時点で 0 にリセットされる時系列値が考慮されます。

    集計 Aligner 関数(mean_alignerint_mean_aligner)は、Duration 引数で幅が指定され、開始時刻が出力ポイントのタイムスタンプである時間枠の出力ポイントに集計関数を適用します。この集計の結果が出力ポイントの値になります。

    通常、Aligner関数の出力の測定単位は入力のものと同じです。例外は次のとおりです。

    • rate の出力は、入力の単位を単位「s」で割った数になります。

    • count_true_aligner の出力は単位 1 になります。

    • fraction_true_aligner の出力は単位 10^2.% になります。

rate   アライメントされた時点での変化率を計算します。


シグネチャ:   ImplicitRowInput   rate([ lit-Duration ] )   →   Double.Gauge     (implicit row input)

rate 整列指定子は、数値(Int または *Double)型の単一値列を持つ入力時系列に対して動作します。常に Double 型と Gaige 時系列の種類の単一の値列を持つ出力テーブルが生成されます。

rate 整列指定子は、ウィンドウにおける時系列の値の変化を計算し(こちらを参照)、ウィンドウの幅(秒単位)で割ります。このウィンドウは、出力ポイント時間から前の Duration パラメータ時間までにわたります。

Duration 引数のデフォルト値はアライメント期間です。 「delta」Aligner 関数とは異なり、アライメント期間とウィンドウ幅が一致する必要はありません。

delta   アライメントされた時点での値の変化を計算します。


シグネチャ:   ImplicitRowInput   delta([ lit-Duration ] )   →   InputType.Delta     (implicit row input)

delta 整列指定子は、Summable 型(IntDoubleDistribution)の単一の値列を持つ入力時系列に動作アします。出力は、値列は同じ型ですが、種類が Delta である時系列です。

「delta_gauge」整列指定子は、出力時間と前のDuration引数の間の時間枠における入力時系列の値の変化を計算します。出力ポイントの開始時刻は、出力時間(ポイントの終了時刻)より前の Duration 引数です。

delta 整列指定子には、アラインメントに使用されるアラインメント期間と同じ Duration 引数が必要です。Duration 引数のデフォルト値はそのアライメント期間です。

any_true_aligner   ウィンドウ内の true 値を見つけることで、Bool 時系列をアライメントします。


シグネチャ:   ImplicitRowInput   any_true_aligner([ lit-Duration ] )   →   Bool.Gauge     (implicit row input)

any_true_aligner 関数は、Bool 型の 1 つの値列を持つ入力テーブルに対して動作し、Bool 型であり Gauge の時系列の種類に該当する 1 つの値列を持つ出力テーブルを生成します。

Duration 引数は、出力ポイントの時刻に終了する各出力ポイントの時間ウィンドウの幅を指定します。Duration 引数が指定されていない場合、デフォルトはアライメント期間になります。出力ポイントの値は、ウィンドウの任意の入力ポイントが true の場合は true、それ以外の場合は false になります。

count_true_aligner   ウィンドウ内の true 値をカウントして、Bool 時系列をアライメントします。


シグネチャ:   ImplicitRowInput   count_true_aligner([ lit-Duration ] )   →   Int.Gauge     (implicit row input)

count_true_aligner 関数は、Bool 型の 1 つの値列を持つ入力テーブルに対して動作し、Int 型であり Gauge の時系列の種類に該当する 1 つの値列を持つ出力テーブルを生成します。

Duration 引数は、出力ポイントの時刻に終了する各出力ポイントの時間ウィンドウの幅を指定します。Duration 引数が指定されていない場合、デフォルトはアライメント期間になります。出力ポイントの値は、値が true であるウィンドウ内の入力ポイントの数です。

delta_gauge   Gauge 時系列としてアライメントされた時点での値の変化を計算します。


シグネチャ:   ImplicitRowInput   delta_gauge([ lit-Duration ] )   →   InputType.Gauge     (implicit row input)

delta_gauge 整列指定子は、Summable 型(IntDoubleDistribution)の単一の値列を持つ入力時系列に動作アします。出力は、値列は同じ型ですが、種類が Gauge である時系列です。

delta_gauge 整列指定子は、ウィンドウにおける入力時系列の値の変化を計算します(こちらをご覧ください)。このウィンドウは、出力ポイント時間から前の Duration パラメータ時間までにわたります。

Duration 引数のデフォルト値はアライメント期間です。 「delta」Aligner 関数とは異なり、アライメント期間とウィンドウ幅が一致する必要はありません。

fraction_true_aligner   Bool 時系列をウィンドウの true 値の割合でアライメントします。


シグネチャ:   ImplicitRowInput   fraction_true_aligner([ lit-Duration ] )   →   Double.Gauge     (implicit row input)

fraction_true_aligner 関数は、Bool 型の 1 つの値列を持つ入力テーブルに対して動作し、Double 型であり Gauge 時系列の種類の 1 つの値列を持つ出力テーブルを生成します。

Duration 引数は、出力ポイントの時刻に終了する各出力ポイントの時間ウィンドウの幅を指定します。Duration 引数が指定されていない場合、デフォルトはアライメント期間になります。出力ポイントの値は、値が true であるウィンドウ内のすべての入力ポイントの割合です。

int_mean_aligner   ウィンドウ内で Int 値の平均を求めることにより、アライメントします。


シグネチャ:   ImplicitRowInput   int_mean_aligner([ lit-Duration ] )   →   Int.Gauge     (implicit row input)

int_mean_aligner 関数は、Int 型であり Gauge または Delta の時系列の種類に該当する 1 つの値列を持つ入力テーブルに対して動作します。Int 型であり Gauge 時系列の種類の 1 つの値列を持つ出力テーブルを生成します。

Duration 引数は、出力ポイントの時刻に終了する各出力ポイントの時間ウィンドウの幅を指定します。Duration 引数が指定されていない場合、デフォルトはアライメント期間になります。出力ポイントの値は、上記の時間枠内にあり、最も近い整数値に丸められた入力テーブルの値ポイントの平均です。

interpolate   アライメントされた時点での補完値を計算します。


シグネチャ:   ImplicitRowInput   interpolate([ lit-Duration ] )   →   InputType.Gauge     (implicit row input)

interpolate 整列指定子は、数値(Int または *Double)型であり、時系列の種類が Gauge である単一の値列を持つ入力テーブルに対して動作します。 同じタイプと時系列の種類の単一の値列を持つ出力テーブルが生成されます。

interpolate Aligner 関数の出力時間は、出力ポイントに使用される入力時系列のポイントの終了時刻と同じです。それ以外の場合、interpolate整列指定子は、終了時刻が出力時刻に最も近い前後のポイントである入力ポイントを考慮します。これらのポイントが Duration 引数内にある場合、出力値は出力時のポイント間の線形補完になります。出力時刻より前の入力ポイントがないか、出力時刻より後の入力ポイントがない場合、または 2 つの入力ポイントが互いに Duration 引数内にない場合、出力値は生成されません。

Duration 引数のデフォルト値は、アライメント期間の 2 倍です。

mean_aligner ウィンドウ内で値の平均を求めることにより、アライメントします。


シグネチャ:   ImplicitRowInput   mean_aligner([ lit-Duration ] )   →   Double.Gauge     (implicit row input)

mean_aligner 関数は、数値型の単一の値列を持つ入力テーブルに対して動作します。(Int または Double)と Gauge または Delta の時系列の種類。Double 型と Gauge 時系列の種類の 1 つの値列を持つ出力テーブルを生成します。

Duration 引数は、出力ポイントの時刻に終了する各出力ポイントの時間ウィンドウの幅を指定します。Duration 引数が指定されていない場合、デフォルトはアライメント期間になります。出力ポイントの値は、上記のウィンドウ内にある入力テーブルの値ポイントの平均です。

next_older   前の時刻から後の時刻に移動することによりアライメントされたポイント。


シグネチャ:   ImplicitRowInput   next_older([ lit-Duration ] )   →   InputType.Gauge     (implicit row input)

next_older 整列指定子は、任意の型の任意の数の値列を持つ時系列に対して動作しますが、対象列の時系列の種類はすべて Gauge です。型と時系列の種類が同じ出力列を生成します。

next_older 整列指定子は、終了時刻が出力時刻よりも後に位置し、Duration 引数よりも出力時刻から乖離していない最も前の入力ポイントを見つけることにより出力ポイントを作成します。そのような入力ポイントが存在しない場合、出力ポイントは作成されません。

Duration 引数のデフォルト値は、アライメント期間の 2 倍です。

next_younger   後の時刻から前の時刻に移動することによりアライメントされたポイント。


シグネチャ:   ImplicitRowInput   next_younger([ lit-Duration ] )   →   InputType.Gauge     (implicit row input)

next_younger 整列指定子は、任意の型の任意の数の値列を持つ時系列に対して動作しますが、対象列の時系列の種類はすべて Gauge です。型と時系列の種類が同じ出力列を生成します。

next_younger 整列指定子は、終了時刻が出力時刻よりも後に位置し、Duration 引数よりも出力時刻から乖離していない最も前の入力ポイントを見つけることにより出力ポイントを作成します。そのような入力ポイントが存在しない場合、出力ポイントは作成されません。

Duration 引数のデフォルト値は、アライメント期間の 2 倍です。

単位の操作

これらの関数は、適用される式の単位を変更します。

scale   値を別の測定単位にスケーリングします。


シグネチャ:   scale(Num,   [ lit-String ] )   →   Double
          scale(Duration,   [ lit-String ] )   →   Double
          scale(Date,   [ lit-String ] )   →   Double

scale 関数は、最初の引数の値を返します。必要に応じて、double に変換され、2 番目の引数によって指定される単位を持つようにスケールされます。

2番目の引数が指定されていない場合、scale関数は、こちらで説明するように自動スケーリングが呼び出される場合を除いて、単位を変更せずに最初の引数をdoubleに変換するだけです。その場合、2 番目の引数は暗黙的に指定され、scale は2 つの引数と通常通り動作します。

2 番目の引数を指定する場合は、最初の引数のスケーリング先の単位には有効な UCUM コード文字列を使用します。 この場合、戻り値は入力値と同じ物理量となり、2 番目の引数で指定された単位が設定されます。これを行うには、引数を適切なスケーリング係数で乗算します。

たとえば、式scale(3 "min", "s")は、分単位(min)の値3を秒単位(s)の値180に変換します。同じ時間で、異なる単位で表されます。

最初の引数に単位がない場合、または最初の引数の単位が 2 番目の引数で指定された単位コードと同じディメンションでない場合(2 番目の引数が指定されている場合)、エラーが発生します。同じディメンションでない場合、最初の引数を 2 番目の引数によって指定されたディメンションにスケーリングすることはできません。

たとえば、scale(3 "km", "m/s") というのは誤りです。これは、3 キロメートルをメートル/秒の数にスケーリングするように要求するもので、キロメートルのディメンションが「distance(距離)」で、メートル/秒のディメンションは「distance per time(時間ごとの距離)」(速度)であるためです。距離を速度に変換できるスケーリング係数はありません。これには、距離を時間の単位の値で割る必要があります。たとえば、scale(3 "km" / 10 "min", "m/s").3 "km/min"5 "m/s" にスケーリングします。

1 つ目の引数が Date 引数または Duration 引数である場合、2 番目の引数は時間単位("s""h""wk"など)を指定する必要があります。戻り値は Double 値となり、2 番目の引数で指定された単位で最初の引数の時間を指定します。Date 値の場合、これは Unix エポックからの経過時間になります。

たとえば、scale(1m, "s")は単位s60.0の値になり、scale(d'1970/01/01-01:00:00+00', "h")は値1.0になります。単位は「h」(Unixエポックまで1時間)です。

cast_units   値の測定単位を設定します。


シグネチャ:   cast_units(Summable,   lit-String )   →   FirstArgType

cast_units 関数は最初の引数の変更されていない値を返しますが、その値の測定単位を 2 番目の引数文字列で指定されたものに設定します。

目的の単位の文字列は、UCUM コード文字列である必要があります。この関数を適用する前に最初の引数で指定されていた単位は無視されます。

期間ウィンドウ

periodic window 関数は、時間計算への入力ポイントを選択するために使用されるウィンドウ幅を指定する WindowDuration 引数に渡される Duration 実引数にアノテーションを付けてるために使用されます。このような引数は、アライメントされた時系列を出力する group_by テーブル オペレーションに渡されます。window 関数と sliding 関数は、出力アライメント期間に従って入力ウィンドウの幅を制限します。

window 関数では、アライメント期間とウィンドウ幅が同じになるように指示され、入力ポイント ウィンドウが重ならないようにします。

sliding 関数では、アライメント期間がウィンドウ幅よりも短くできることが指定され、入力ウィンドウが重複する場合があります。

window   アライメント期間と同じウィンドウを示します。


シグネチャ:   window([ lit-Duration ] )   →   lit-WindowDuration

window 関数は、アライメントされた時系列を生成する計算で使用されるウィンドウ幅を指定する WindowDuration引数に渡される Duration 実引数にアノテーションを付けます。ウィンドウ幅と出力アライメント期間は、どちらも Duration 引数と同じである必要があります。 Duration 引数が指定されていない場合は、ウィンドウ幅が出力アライメント期間として指定されるように定義されています。

たとえば、テーブル オペレーション | group_bywindow(5m), .mean は、出力終了時刻の 5 分以内の入力ポイントの平均値である出力ポイントを生成します。window 関数は、5m ウィンドウの幅にアノテーションを付けて、group_by のアラインメント期間も 5 分にする必要があります。テーブルオ ペレーション | group_by window(), .meanでも、ウィンドウの幅を出力のアライメント期間と同じにする必要がありますが、その値は指定しません。

sliding   切り離すのではなくスライドされた(重なった)ウィンドウを示します。


シグネチャ:   sliding(lit-Duration )   →   lit-SlidingDuration

sliding 関数は、アライメントされた時系列を生成する計算で使用されるウィンドウ幅を指定する WindowDuration引数に渡される Duration 実引数にアノテーションを付けます。ウィンドウ幅は Duration 引数である必要があり、アライメント期間はこれより大きくする必要はありません(ただし、小さくすることができます)。

たとえば、テーブル オペレーション | group_bysliding(5m), .mean は、出力終了時刻の 5 分以内の入力ポイントの平均値である出力ポイントを生成します。5m ウィンドウの幅にアノテーションを付ける sliding 関数は、group_by のアライメント期間が 5 分以下の任意の時間にできることを指示します。1 分間のアライメントを示す | every 1m テーブル オペレーションがある場合、5 分の各ウィンドウの 4 分が前の出力ポイントのウィンドウと重複します。

配信

count_from   分布値の値の数。


シグネチャ:   count_from(Distribution.CumulativeOK )   →   Int.FirstArgKind

count_from 関数は、入力 Distribution 値の値の母集団のサイズを返します。

count_from の結果に添付されている測定単位1 です。

sum_from   分布値の値の合計。


シグネチャ:   sum_from(Distribution.CumulativeOK )   →   Double.FirstArgKind

sum_from 関数は、入力 Distribution 値に含まれるすべての値の合計を返します。

sum_from の結果は、入力と同じ測定単位になります。

mean_from   分布値の値の平均値。


シグネチャ:   mean_from(Distribution )   →   Double

mean_from 関数は、入力 Distribution 値に含まれるすべての値の算術平均を返します。

mean_from の結果は、入力と同じ測定単位になります。

stddev_from   分布値の値の標準偏差。


シグネチャ:   stddev_from(Distribution )   →   Double

stddev_from 関数は、入力 Distribution 値に含まれる値の母集団の分散を返します。

stddev_from の結果は、入力と同じ測定単位になります。

variance_from   分布値の値の分散。


シグネチャ:   variance_from(Distribution )   →   Double

variance_from 関数は、入力 Distribution 値に含まれる値の母集団の分散を返します。

'variance_from' 関数の結果には測定単位がありません。

median_from   分布値の値の中央値。


シグネチャ:   median_from(Distribution )   →   Double

median_from 関数は、入力 Distribution 値に含まれる値の母集団の中央値の推定を返します。

median_from の結果は、入力と同じ測定単位になります。

percentile_from   分布値の値のパーセンタイル。


シグネチャ:   percentile_from(Distribution,   lit-Num )   →   Double

percentile_from 関数は、入力 Distribution 値に含まれる値の母集団のパーセンタイルの推定を返します。Num 引数は、推定するパーセンタイルを 0〜100 の間の数値として指定します。

percentile_from の結果は、入力と同じ測定単位になります。

fraction_less_than_from   固定値より小さい分布内の値の割合。


シグネチャ:   fraction_less_than_from(Distribution,   lit-Num )   →   Double

fraction_less_than_from 関数は、入力 Distribution 値に含まれる値が Num 引数より小さい母集団の割合の推定値を返します。

fraction_less_than の結果に添付されている測定単位10^2.% です。

bounded_percentile_from   分布値の値のパーセンタイル。


シグネチャ:   bounded_percentile_from(Distribution,   lit-Num,   [ lit-Num ],   [ lit-Num ] )   →   Double

bounded_percentile_from 関数は、入力 Distribution に含まれる値のサブセットに対して動作します。2 番目の Num パラメータ(指定されている場合)よりも大きく、3 番目の Num パラメータ(指定されている場合)以下の値の母集団から推定値が作成されます。2 番目と 3 番目の Num 引数の少なくとも一方を指定する必要があります。両方指定した場合、2 番目の引数は 3 番目の引数より小さい必要があります。

これは、その値の推定母集団のパーセンタイルの推定値を返します。最初の Num 引数は、推定するパーセンタイルを 0〜100 の間の数値として指定します。

bounded_percentile_from の結果は、入力と同じ測定単位になります。

rebucket   新しいバケット指定に変換された分布値。


シグネチャ:   rebucket(Distribution,   lit-BucketSpecification )   →   Distribution

入力 Distribution 値が、2 番目の引数 BucketSpecification で指定されたバケット指定の Distribution 値に変換されます。

これにより、バケット内でカウントされた値がバケットの範囲全体に均等に分配されるという前提で、入力 Distribution 内の各バケットのカウントが出力 Distribution のバケットに分配されます。 出力 Distribution は、入力 Distribution と同じ合計カウント数を持ちますが、カウントは、出力 Distribution バケット全体に不均等に分配されます。出力 Distribution には、入力 Distribution と同じ合計、平均、標準偏差があります。

バケット指定子

Distribution 値には、バケットで構成されたヒストグラムがあります。各バケットは値の範囲に関連付けられ、その範囲内にある Distribution 内の値のカウントが含まれます。すべての Distribution には、Distribution 値のバケットの境界を記述するバケット指定があります。このセクションの関数は、バケット指定を生成します。

powers_of   バケット境界が指数関数的に増加するバケット指定。


シグネチャ:   powers_of(lit-Num )   →   lit-BucketSpecification

powers_of 関数は、各バケットの上限が(Num 引数で指定された)定数に下限値をかけた値であるバケット指定を返します。したがって、バケットサイズは指数関数的に拡大し、パーセンタイルの計算エラーは、true 値の定数要素によって制限されます。

バケット数や最初のバケットの下限は設定されません。どちらも「num_buckets」と「lower」で指定するか、デフォルト値(30 バケット、下限 1.0)を使用します。 バケット指定が powers_of で指定されている場合、下限は 0 より大きい値にする必要があります。

次の例では、50 個のバケットのバケット指定で、サイズは 100 から始まり、1.1 の割合で指数関数的に増加します。したがって、バケットの境界は 1、1.1、1.21、1.331 などです。

powers_of(1.1).num_buckets(30).lower(100.0)

fixed_width   同じサイズのバケットを含むバケット指定。


シグネチャ:   fixed_width(lit-Num )   →   lit-BucketSpecification

fixed_width 関数は、各バケットの上限が、下限より上の(Num 引数で指定された)固定値であるバケット指定を返します。したがって、バケットサイズは固定です。

バケット数や最初のバケットの下限は設定されません。どちらも「num_buckets」と「lower」で指定するか、デフォルト値(30 バケット、下限 1.0)を使用します。

次の例では、開始値が 1 でありサイズが 1 の 100 個のバケットで構成されるバケット指定を示しています。これは、パーセント値の分布に適した指定です。

fixed_width(1).num_buckets(100)

custom   バケット境界のリストからのバケット指定。


シグネチャ:   custom(lit-Num... )   →   lit-BucketSpecification

custom 関数は、明示的に指定されたバケット境界を持つバケット指定を返します。この関数は、昇順に指定する必要がある、複数の数値引数を受け取ります。最初のバケットの下限は最初の引数で指定し、最後のバケットの上限は最後の引数で指定します。各中間引数は、前のバケットの上限と次のバケットの上限を示します。

これで、バケット指定が確定し、バケットの数とバケットの境界が決まります。

次の例は、3 つのバケットを含むバケット指定を示しています。1 つ目のバケットの境界は 3 と 27、2 つ目は 27 と 105、3 つ目は 105 と 277 です。

custom(3,27,105,277)

num_buckets   バケット指定のバケットの数を設定します。


シグネチャ:   num_buckets(lit-BucketSpecification,   lit-Num )   →   lit-BucketSpecification

バケット数が決定されていないバケット指定に適用されると、num_buckets 関数は Num 引数で指定されたバケット数を含むバケット指定を返します。入力バケット指定のその他の要素はすべて保持されます。

バケット数がすでに決まっているバケット指定に num_buckets を適用するとエラーになります。

bounds   最初のバケットの下限と最後のバケットの上限を設定します。


シグネチャ:   bounds(lit-BucketSpecification,   lit-Num,   li-Num )   →   lit-BucketSpecification

最初のバケットの下限または最後のバケットの上限が決定されていないバケット指定に適用すると、bounds 関数は、最初の Num 引数で指定された最初のバケットの下限と、2 番目の Num 引数で指定された最後のバケットの上限を含むバケット指定を返します。入力バケット指定のその他の要素はすべて保持されます。

最初のバケットの下限または最後のバケットの上限がすでに設定されているバケット指定に bounds を適用するとエラーになります。

lower   バケット指定の最初のバケットの下限を設定します。


シグネチャ:   lower(lit-BucketSpecification,   lit-Num )   →   lit-BucketSpecification

最初のバケットの下限が指定されていないバケット指定に適用されると、num_buckets 関数は Num 引数で指定された最初のバケットの下限を含むバケット指定を返します。入力バケット指定のその他の要素はすべて保持されます。

最初のバケットの下限がすでに設定されているバケット指定に lower を適用するとエラーになります。

その他

cast_double   Int 値を Double に変換します。


シグネチャ:   cast_double(Num.CumulativeOK )   →   Double.FirstArgKind

cast_double 関数は単一の Int 引数を受け取り、最も近い Double 値を返します。

cast_double の結果は、入力と同じ測定単位になります。

cast_gauge   Cumulative 時系列または Delta 時系列の値を Gauge にキャストします。


シグネチャ:   cast_gauge(ColumnValue.CumulativeOK )   →   FirstArgType.Gauge

cast_gauge 関数は、引数の値を返しますが、値の時系列の種類を Gauge に変更します。

その結果、出力テーブルに Delta 時系列を持つ値列がない場合、出力テーブルには開始時刻列がありません。

cast_gauge の結果は、入力と同じ測定単位になります。

within   並べ替え値の計算のウィンドウを指定します。


シグネチャ:   within(ColumnValue,   [ lit-DateOrDuration ],   [ lit-DateOrDuration ] )   →   Windowed.FirstArgKind

within 関数は、top または bottom テーブル オペレーションの Windowed(Num) 並べ替え値の引数にバインドされた式を修飾します。この関数は、並べ替え値の式が、ウィンドウの最も古い(開始)時刻、ウィンドウの最も新しい(終了)時刻、ウィンドウの期間の 3 つのうち 1 つまたは 2 つの値を指定することで評価されるウィンドウを指定します。

within の 2 つの引数のいずれかが正の Duration の場合、ウィンドウの幅を設定します。このような Duration となれるのは、最大で 1 つの引数です。

最初の引数が Date の場合は、開始時刻を指定します。 2 番目の引数が Date の場合は、終了時刻を指定します。両方が Date 値である場合、2 番目の値は最初の値よりも後のものである必要があります。Date 引数は、Date リテラルまたは負の Duration リテラルで指定できます。後のケースでは、時刻は外部クエリ ウィンドウの終了時刻よりも前に指定された Duration です(within テーブル オペレーションをご覧ください)。

最初の引数が指定されていない場合、デフォルトは外部クエリ ウィンドウの開始時刻になります。2 番目の引数が指定されていない場合、デフォルトは外部クエリ ウィンドウの終了時刻になります。

たとえば、.mean().within(1h,-2h) は、終了時刻が 1 時間幅のウィンドウ範囲内にあり、2 時間前に終了した入力時系列のすべてのポイントに max レデューサを適用することを示します。 mean アグリゲータは、終了時刻がこのウィンドウ内にあるすべての入力ポイントに適用されます。

たとえば、max(val()).within(10m)は、終了時刻がクエリ終了時刻と前の 10 分との間にあるすべての入力時系列にmaxレデューサを適用するように指定します。max アグリゲータは、終了時刻がこのウィンドウ内にあるすべての入力ポイントに適用されます。

テーブル オペレーションと関数の索引

すべてのテーブル オペレーションと関数の索引を以下に示します。

  • abs   絶対値。
  • absent_for   入力がない場合の条件を作成します。
  • add   2 つの数値の合計。
  • adjacent_delta   入力ポイントと 1 個前のポイントの間の値の変化。
  • adjacent_rate   入力ポイントと 1 個前のポイント(行)との間の変化率。
  • aggregate   任意の型の値のグループからのデフォルト集約値。
  • align   アライメント関数を使用して、アライメントされたテーブルを生成します。
  • all_true   ブール値のグループの論理積
  • and   2 個のブール値の論理積。
  • any_true   ブール値のグループの論理和。
  • any_true_aligner    ウィンドウ内の true 値を見つけることで、Bool 時系列をアライメントします。
  • ascii_to_lower   ASCII の大文字を小文字に変更します。
  • ascii_to_upper   ASCII の小文字を大文字に変更します。
  • bottom   並べ替え値の式によって最下位の時系列を選択します。
  • bottom_by   異なるグループの並べ替え値の式によって時系列を選択します。
  • bounded_percentile_from   分布値の値のパーセンタイル。
  • bounds   最初のバケットの下限と最後のバケットの上限を設定します。
  • cast_double   Int 値を Double に変換します。
  • cast_gauge   Cumulative または Delta の時系列値を Gauge にキャストします。
  • cast_units    値の測定単位を設定します。
  • concatenate   文字列の連結。
  • condition   入力テーブルにブール条件列を追加します。
  • count   値のグループ内での値の数のカウント。
  • count_from   分布値の値の数。
  • count_true   ブール値のグループ内の true 値の数。
  • count_true_aligner    ウィンドウ内の true 値をカウントして、Bool 時系列をアライメントします。
  • covariance   値ペアのグループの共分散。
  • custom   バケット境界のリストからのバケット指定。
  • delta   アライメントされた時点での値の変化を計算します。
  • delta_gauge   Gauge 時系列としてアライメントされた時点での値の変化を計算します。
  • diameter   数値のグループの最大値と最小値の差。
  • distribution   数値または分布値のグループからの分布。
  • div   2 つの数値の比率。
  • end   入力ポイント(行)の終了時刻。
  • eq   等しい。
  • every   整列されたテーブル出力の期間を指定します。
  • exp   e の x 乗。
  • false   ブール値の false。
  • fetch   データベースからテーブルを生成します。
  • fetch_cumulative   データベースから Cumulative 時系列のテーブルを生成します。
  • filter   入力テーブルの行を述語によってフィルタリングします。
  • filter_ratio   入力値列の 2 つのフィルタリングされた合計の比率を計算します。
  • filter_ratio_by   入力値列の 2 つのフィルタされた合計のグループ化された比率を計算します。
  • fixed_width   同じサイズのバケットを含むバケット指定。
  • fraction_less_than   固定値より小さい値のグループの割合。
  • fraction_less_than_from   固定値より小さい分布内の値の割合。
  • fraction_true   ブール値のグループの、true である値の割合。
  • fraction_true_aligner    Bool 時系列をウィンドウ内の true 値の割合でアライメントします。
  • ge   以上。
  • graph_period    時系列グラフの描画に推奨される出力期間を指定します。
  • group_by   マップされた時系列識別子とタイム ウィンドウによって行を集計します。
  • gt   より大きい。
  • has   set 引数に特定の値が含まれている場合は true。
  • has_value   引数の式が値を計算する場合は true。
  • hash_tsid   時系列識別子列のハッシュを返します。
  • ident   アイデンティティ テーブル オペレーション。入力テーブルは変更されません。
  • if   2 個の値から条件によって選択された値。
  • int_ceil   上限の整数。
  • int_div   2 個の整数の除算の商。
  • int_floor   下限の整数。
  • int_mean_aligner    ウィンドウ内で Int 値の平均を求めることにより、アライメントします。
  • int_round   最も近い整数。
  • interpolate   アライメントされた時点での補完値を計算します。
  • join   複数のテーブルの自然結合。
  • le   以下。
  • log   自然対数。
  • lower   バケット指定の最初のバケットの下限を設定します。
  • lt   より小さい。
  • map   テーブルの各行の時系列識別子列と値列を書き換えます。
  • max   数値のグループの最大値。
  • mean   数値のグループの平均値。
  • mean_aligner    ウィンドウ内の値の平均を求めることで、アライメントします。
  • mean_from   分布値の値の平均値。
  • median   数値または分布値のグループの中央値。
  • median_from   分布値の値の中央値。
  • metric   テーブルのセットから特定の指標タイプのテーブルを生成します。
  • min   数値のグループの最小値。
  • mul   2 つの数値の積。
  • ne   等しくない。
  • neg   数値の負数。
  • next_older 前の時刻から後の時刻に移動することによりアライメントされたポイント。
  • next_younger    後の時刻から前の時刻に移動することによりアライメントされたポイント。
  • not   ブール値の論理否定。
  • num_buckets   バケット指定のバケットの数を設定します。
  • older   時系列内の 1 個前のポイント(行)の値。
  • or   2 個のブール値の論理和。
  • or_else   ある値、または、ある値でない場合は別の値。
  • outer_join   2 つのテーブルの外部結合。
  • percentile   数値または分布値のグループのパーセンタイル。
  • percentile_from   分布値の値のパーセンタイル。
  • pick_any   値のグループの任意に選択された要素の値。
  • pos   数値入力のアイデンティティ。
  • power   数値の x 乗。
  • powers_of   バケット境界が指数関数的に増加するバケット指定。
  • rate   アライメントされた時点での変化率を計算します。
  • ratio   2 つのアライメントされた入力テーブルの値列の比率を計算します。
  • re_extract   正規表現に一致した値を別の文字列に抽出します。
  • re_full_match   正規表現が文字列値全体と一致する場合は true。
  • re_global_replace   正規表現のすべての一致を別の文字列に置換します。
  • re_partial_match   正規表現が文字列値の一部と一致する場合は true。
  • re_replace   正規表現の最初の一致を別の文字列に置換します。
  • rebucket   新しいバケット指定に変換された分布値。
  • rem   2 個の整数の除算の剰余。
  • row_count   入力行の数。
  • scale    値を別の測定単位にスケーリングします。
  • singleton   要素が 1 個しかない値のグループの要素の値。
  • sliding   切り離すのではなくスライドされた(重なった)ウィンドウを示します。
  • sqrt   平方根。
  • start   入力ポイント(行)の開始時刻。
  • stddev   値のグループの標準偏差。
  • stddev_from   分布値の値の標準偏差。
  • string_to_double   StringDouble に変換します。
  • string_to_int64   StringInt に変換します。
  • sub   2 つの数値の差。
  • sum   数値のグループの合計。
  • sum_from   分布値の値の合計。
  • time_shift   時系列を前に移動します。
  • top   並べ替え値の式によって最上位の時系列を選択します。
  • top_by   異なるグループの並べ替え値の式によって時系列を選択します。
  • true   ブール値の true。
  • unaligned_group_by   マップされた時系列識別子によって行をアライメントなしで集計します。
  • union   複数のテーブルの結合。
  • union_group_by   複数のテーブルの行を集計します。
  • unique   値のグループの共通の値(すべての値が同じである必要があります)。
  • utf8_normalize   大文字と小文字の比較に適した Unicode 文字列。
  • val   入力ポイント(行)の値列の値。
  • value   テーブルの各行の値列を書き換えます。
  • variance   数値のグループの分散。
  • variance_from   分布値の値の分散。
  • weighted_distribution   加重値のグループからの分布。
  • window   アライメント期間と同じウィンドウを示します。
  • window   アライメント操作のウィンドウを指定します。
  • within   並べ替え値の計算のウィンドウを指定します。
  • within   クエリ出力の時間範囲を指定します。