Dies ist ein Referenzhandbuch für die Monitoring-Abfragesprache von Cloud Monitoring. Es deckt folgende Themenbereiche ab:
Das Datenmodell, das der Zeitachsendatenbank zugrunde liegt, auf die die Monitoring-Abfragesprache zugreift.
Die Struktur und Semantik von Abfragen
Eine Beschreibung aller Vorgänge und Funktionen, aus denen eine Abfrage erstellt wird.
Datenmodell
Cloud Monitoring verwendet eine Zeitachsendatenbank, die alle Messwerte enthält, die zu jeder überwachten Ressource aufgenommen wurden. Dies wird als überwachte Ressource bezeichnet. Dies beschreibt die logische Struktur dieser Datenbank.
Das grundlegende Element ist eine Zeitachse, deren Daten aus Beobachtungen der überwachten Ressource bestehen.
Zeitachsen sind in der Datenbank in relationalen Tabellen logisch organisiert, wobei jede Tabelle Zeitachsen mit einer gemeinsamen Bedeutung und Struktur enthält. Auf die Tabellen wird durch Abfragen verwiesen, die Daten zurückgeben, Grafiken generieren und Warnungen berechnen.
Die Datenbank enthält auch Metadaten, bei denen es sich um langsam ändernde Werte handelt, die mit einer überwachten Ressource verknüpft sind und von der Nutzerkonfiguration oder vom Dienst festgelegt werden, der den Typ der überwachten Ressource implementiert.
Zeitachse
Eine Zeitachse ist eine benannte Abfolge von Punkten, die jeweils ein Messwert und die Zeit sind, für die der Wert gilt. Eine Zeitachse besteht aus drei Teilen: einem Typ, der die Struktur der Zeitachsen angibt, einer Kennung, die die Zeitachsen eindeutig identifiziert und einem Verlauf, der die Zeitachsendaten enthält. Jeder dieser drei Teile wird in diesem Abschnitt erläutert.
Ein Zeitachsentyp gibt die Struktur der Zeitachsenkennzeichnung und den Zeitachsenverlauf an. Sie besteht aus zwei Teilen:
Ein Typ der überwachten Ressource (aufgeführt hier klicken ), die eine bestimmte Art von überwachter Ressource benennt, die überwacht wird, wie eine Compute Engine-Instanz (
gce_instance
) oder eine Cloud SQL-Datenbank (cloudsql_database
). Er hat eine Reihe von Labeldeskriptoren, die eine Instanz dieses Typs von überwachten Ressourcen eindeutig identifizieren.Ein Messwerttyp (hier aufgeführt) , der eine bestimmte Art von Messung beschreibt, die auf eine überwachte Ressource übertragen werden kann. Beispiel: Der von einer Compute Engine-Instanz gelesene Byte wird anhand des Messwerts namens
compute.googleapis.com/instance/disk/read_bytes_count
und die Datenauslastung einer Cloud SQL-Datenbank anhand des Messwerts namenscloudsql.googleapis.com/database/disk/bytes_used
gemessen. Der Messwerttyp gibt den Typ des Messwerts, die Einheiten der Messung und die Art der Zeitachse an. Es kann Label-Deskriptoren angeben, die Zeitachsen unterscheiden, die verschiedene Aspekte derselben Sache messen. Beispiel:command
, der angibt, welcher Befehl im Messwertappengine.googleapis.com/memcache/operation_count
gezählt wird.
Ein überwachter Ressourcentyp und ein Messwerttyp werden jeweils durch ein MonitoredResourceDescriptor
und ein MetricDescriptor
beschrieben. Diese beschreiben die Typen. Sie enthalten jeweils ein Feld namens type
, das den Namen der überwachten Ressource oder des Messwerttyps enthält.
Eine Zeitachsenkennzeichnung ist der Name der Zeitachse, die sie unter allen Zeitachsen mit demselben Typ eindeutig identifiziert. Sie besteht aus einer Reihe von Werten, jeweils einem für die Label-Deskriptoren, die in den überwachten Ressourcen- und Messwerttypen des Zeitachsentyps angegeben sind.
Die Labels des Typs "Überwachte Ressource" identifizieren eindeutig die bestimmte Instanz der Art der überwachten Ressource, von der die Messungen in der Zeitachse stammen. Die überwachte
gce_instance
-Ressource hat beispielsweise die Labelsproject_id
,instance_id
undzone
, die eine bestimmte virtuelle Google Compute Engine-Maschine eindeutig identifizieren.Jedes Label des Messwerttyps gibt an, welche Art von Messung für den jeweiligen Messwert in der Zeitachse dargestellt wird. Beispielsweise kann
status
, das den Status der im Messwertappengine.googleapis.com/memcache/operation_count
gezählten Befehle angibt, den Wert'HIT'
für eine Zeitachse haben, die Treffer zählt, und'MISS'
für eine andere Zeitachse, die Fehler zählt.
Ein Zeitachsenverlauf ist eine geordnete Abfolge von Punkten, die jeweils eine gleichzeitige Messung der Messungen darstellen, oder potenziell mehrere Werte (z. B. CPU-Auslastung oder Temperatur und Luftfeuchtigkeit) zu einem bestimmten Zeitpunkt oder über einen gewissen Zeitraum hinweg. Ein Punkt besteht aus zwei Elementen:
Der Umfang eines Punkts besteht aus einer Endzeit, die immer vorhanden ist, und einer Startzeit, die vorhanden sein kann oder nicht. Wenn die Startzeit nicht vorhanden ist, ist die Ausdehnung des Punkts ein einzelner Zeitpunkt, der durch die Endzeit angegeben wird. Wenn eine Startzeit angegeben ist, muss diese vor der Endzeit liegen und die Ausdehnung des Punkts ist das Zeitintervall, das zur Startzeit beginnt und zur Endzeit endet.
Kein Punkt in einer Zeitachse kann dieselbe Ausdehnung haben. Darüber hinaus werden die Ausdehnungen der Punkte in einer Zeitachse durch die Art der Zeitachse beschränkt, die vom Messwerttyp angegeben wird, wie unten beschrieben.
Der Wert eines Punkts stellt eine gleichzeitige Messung eines oder möglicherweise mehrerer Werte (z. B. CPU-Auslastung oder Temperatur und Luftfeuchte) dar, die für die durch die Ausdehnung des Punktes angegebene Zeit gilt. Der Messwerttyp beschreibt jeden Messwert und gibt ihm jeweils einen Namen und einen Werttyp. Wenn mehrere Messwerte vorhanden sind, befinden sie sich in einer bestimmten Reihenfolge und können durch ihren Index in dieser Reihenfolge referenziert werden.
Eine typische Zeitachse, die in der Zeitachsendatenbank gespeichert ist, hat in jedem Punkt einen einzelnen Wert. Der Name des Messwerts im Zeitachsentyp ist ein URI und der Name des einzelnen Werts ist der Teil des Messwertnamens nach dem letzten
/
. Der Messwertappengine.googleapis.com/memcache/operation_count
hat beispielsweise eine Wertspalte mit dem Namenoperation_count
.Eine Zeitachse, die die Ausgabe einer Abfrage ist, kann mehrere Punkte haben, deren Typ, Name und Reihenfolge von der Abfrage angegeben werden.
Der Messwerttyp kann auch Maßeinheiten für den Zeitachsenwert angeben, wenn er vom Int, Double, oder Distribution ist. Die Einheiten werden mit einer Teilmenge des Unified Code for Units of Measures (UCUM) angegeben. Zum Beispiel
ms
für Millisekunden oderBy
für Byte. Weitere Informationen finden Sie unter Maßeinheiten.
Jeder Wert in einem Punkt hat einen bestimmten Werttyp, der durch den Messwerttyp im Zeitachsentyp angegeben wird. Außerdem hat jedes Label in der Zeitachsenkennung einen Werttyp, der durch den Labeldeskriptor in der überwachten Ressource oder dem Messwerttyp des Zeitachsentyps angegeben wird. Die Werttypen lauten so:
Int: Eine 64-Bit-Ganzzahl mit Vorzeichen.
String: Ein UTF-8-codierter Unicode-String.
Bool (Boolescher Wert): Ein boolescher Wert.
Double (Gleitkommazahl mit doppelter Genauigkeit): Ein 64-Bit-IEEE-Gleitkommawert.
Verteilung: Ein komplexer Wert, der ein Histogramm und Statistiken enthält, die eine Zusammenfassung der Gesamtheit von Double-Werten enthalten. Die folgenden Teile dieses Werts sind:
- Die Anzahl der Werte in der Population.
- Summe der Werte in der Population
- Die Summe der quadratischen Abweichung der Werte in der Population
- Eine Bucket-Spezifikation, die die Grenzen zwischen Buckets im Histogramm angibt. Ein Bucket enthält eine Anzahl der Werte, die zwischen der Unter- und Obergrenze des Buckets liegen.
- Ein Histogramm, das die Anzahl der Werte angibt, die in jeden Bucket fallen.
Diese Teile reichen aus, um zusätzlich den Mittelwert, die Varianz, die Standardabweichung und die Schätzungen von Perzentilen zu berechnen.
Der Typ eines Punktwerts kann einer der oben genannten sein. Ein Label-Typ für die Zeitachsenkennung darf nur String, Int oder Bool sein.
Zusätzlich zu diesen Typen gibt es zwei weitere Typen, die sich in der Start- und Endzeit eines Punkts befinden oder zum Beschreiben von Zeiten und Dauer in Abfragen verwendet werden.
Datum: Ein bestimmter Zeitpunkt, der ab der Unix-Epoche gemessen wird. Es ist eine zonenunabhängige Darstellung eines bestimmten Zeitpunkts. Die Start- und Endzeit eines Punkts ist vom Typ.
Dauer: Ein Zeitraum. Diese Zeit hat keine bestimmte Maßeinheit (obwohl die Auflösung im Mikrosekundenbereich liegt), sondern nimmt eine bestimmte Einheit (z. B. Sekunden) an, wenn sie in ein Int oder Double umgewandelt wird.
Die Menge der Werte für jeden Typ (außer Datum und Dauer ) enthält einen Wert mit der Bezeichnung no-value Dies bedeutet, dass es keinen bestimmten Wert gibt. Und wird in zwei Fällen verwendet:
Wenn kein bestimmter Wert bekannt ist, z. B. wenn ein Fehler vorliegt (z. B. Teilen durch 0), der die Berechnung eines Werts verhindert.
No-value ist der Wert eines Labels in einer Zeitachsenkennzeichnung, wenn das Label für den Zeitachsentyp erforderlich ist, aber kein Wert bekannt ist. Dies kann passieren, wenn bei der Erfassung des Messwerts kein Wert bekannt ist oder wenn die Zeitachse von einer Abfrage generiert wurde und die Berechnung, die den Labelwert generiert hat, keinen Wert erzeugt hat. Beachten Sie, dass No-value ein separater Wert ist und damit die Zeitachsenkennzeichnung von allen anderen Werten unterscheidet, die für das angegebene Label einen tatsächlichen Wert haben.
No-value unterscheidet sich von einem IEEE NaN und einem Stringwert, der der leere String ist. Es ist nicht möglich, dass ein Wert in einem Punkt no-value ist.
Die Zeitachsenart beschreibt die Bedeutung der Werte der Punkte in einer Zeitachse und schränkt die Darstellungen jedes Punkts ein. Es gibt drei Arten von Zeitachsen:
Anzeige: Der Wert eines Punktes in einer Anzeigen-Zeitachse ist eine Messung zum Endzeitpunkt des Punktes. Ein Punkt in einem Anzeigen-Stream hat keine Startzeit, daher ist sein Umfang ein einzelner Zeitpunkt. Der Wert eines Punkts kann eines der folgenden Elemente darstellen:
Ein Beispiel für eine Variable, z. B. die Länge einer Warteschlange oder ein belegter Arbeitsspeicher.
Eine Zustandsform, die zur Endzeit eines Punkts vorlag und bis zur Endzeit des nächsten Punkts fortbesteht
Eine Zusammenfassung einer bestimmten Menge (Mittelwert, Maximum usw.), die für den Zeitraum zwischen dem Punkt und dem nächsten jüngeren Punkt in der Zeitachse gilt.
Delta: Bei numerischen Werten (Int oder Double) stellt jeder Punkt die Änderung eines gemessenen Werts über die Ausdehnung des Punkts dar, d. h. zwischen der Startzeit des Punkts (falls vorhanden) und der Endzeit. Für den Wert einer Verteilung gibt es eine Füllung der numerischen Werte, die während der Ausdehnung des Punkts entstanden sind. Eine Zeitachse vom Typ Delta muss den Werttyp Int, Double oder Distribution haben.
Bei einer Delta-Zeitreihe können sich die Ausdehnungen von zwei beliebigen Punkten nicht überlappen, sodass jeder Punkt eine unabhängige Änderung des gemessenen Wertes (numerisch) oder einer disjunkten Wertepopulation (Verteilung) darstellt. Idealerweise beginnt der Umfang jedes Punkts unmittelbar nach dem Ende des nächsten jüngeren Punkts, sodass die Zeitachse eine vollständige Beschreibung des Zeitraums darstellt, der behandelt wird.
Cumulative (Kumulativ): Dies kann man sich als Zeitachse der Art Delta mit überlappenden Ausdehnungen vorstellen. Die Einschränkung besteht darin, dass zwei Punkte, die überlappende Umfänge haben, dieselbe Startzeit haben müssen. Somit repräsentiert jeder Punkt eine kumulative Zunahme eines bestimmten gemessenen Werts gegenüber dem letzten Punkt mit einer gemeinsamen Startzeit.
Kumulative Messwerte stellen eine robuste Methode zum Erfassen von Zeitachsen aus externen Datenquellen dar:
Die Quelle muss keine Zähler oder Akkumulatoren bei jeder Erfassung eines Werts zurücksetzen und kann leicht in mehreren Zeiträumen überwacht werden.
Akkumulierte Zählungen gehen nicht verloren, wenn einige Punkte fehlen. Der nächste Punkt enthält alle Zählungen seit der Startzeit, einschließlich derjenigen vom fehlenden Punkt. Nur die zeitliche Auflösung geht verloren.
In Abfragen werden kumulative Zeitachsen jedoch nicht häufig berücksichtigt. Um Vorgänge für Zeitachsen, die von Abfragen zurückkommen, einfacher zu gestalten, wird eine kumulative Zeitachse, wenn sie abgerufen wird, automatisch in eine Delta-Zeitachse umgewandelt, indem die Ausdehnung jedes Punkts zum Zeitpunkt des nächstjüngeren Punkts beginnt und ihr Wert die Änderung seit diesem nächstjüngeren Punkt ist. Die vorhandenen Informationen bleiben unverändert, aber jeder Punkt ist unabhängig von den anderen. Dies kann durch
fetch_cumulative
überschrieben werden.Bei Zeitachsen, deren Punkte mehr als einen Wert haben, hat jeder Wert eine Zeitachsenart, die nur Gauge oder Delta sein kann. Wenn ein Wert die Art Delta hat, hat der Gesamtmesswert die Art Delta (und somit hat jeder Punkt eine Start- und Endzeit). Andernfalls hat der Messwert die Art Gauge (und nur eine Endzeit).
Tabellen
Alle Zeitachsen mit demselben Zeitachsentyp (Typ der überwachten Ressource und Messwerttyp) sind logisch in einer relationalen Tabelle organisiert. Die Tabelle hat einen Tabellennamen, der aus dem Namen des überwachten Ressourcentyps gefolgt vom Namen des metrischen Typs besteht.
Eine Tabelle enthält eine Zeile pro Punkt aus jeder Zeitachse, die sich in der Tabelle befindet. Die Tabelle setzt sich aus folgenden Arten von Spalten zusammen:
Zeitachsen-ID-Spalten Eine Spalte für jedes Label der Zeitachsen-ID, wie von den überwachten Ressourcen- und Messwerttypen angegeben. Der Name der Spalte ist der Name des Labels (sein Schlüssel) und der Typ der Spalte ist der Wertetyp des Labels. Wenn ein Label für eine überwachte Ressource und ein Messwertlabel denselben Namen haben, wird dem Namen der Spalte mit dem Messwertlabel
metric.
vorangestellt.Eine Zeitachse besteht aus allen Zeilen in einer Tabelle mit demselben Wert für jede der entsprechenden Zeitachsenkennzeichnungsspalten.
Zeitspalte oder -spalten, abgeleitet von der Ausdehnung der Punkte in der Zeitreihe. Es gibt immer eine Endzeitspalte, auf die über die Funktion
end()
zugegriffen wird (tatsächlich geben wir der Spalte aber keinen Namen). Wenn der Messwert vom Typ Delta ist, gibt es eine Startzeitspalte, auf die von der Funktionstart()
aus zugegriffen werden kann. (Es gibt auch eine Startzeitspalte für Messwerte mit der Art "Kumulative Zeitachse".) Beide Spalten haben Werte vom Typ Date.Wert-Spalten, eine für jeden Wert im Wert der Punkte der Zeitachse. Jede Spalte hat den Namen und den Typ dieses Werts und die Wertspalten befinden sich in derselben Reihenfolge wie der Messwerttyp. Wenn ein überwachtes Ressourcen- oder Messwertlabel mit dem gleichen Namen wie ein Wertname vorhanden ist, erhält der vom Messwerttyp angegebene Wertname das Präfix
value.
, um den Spaltennamen zu bilden.
Alle Punkte in einer Zeitachse haben den gleichen Wert in den Zeitachsenkennzeichnungs-Spalten und diese Spalten identifizieren eindeutig Zeitachsen. Die Zeitachsenspalten und die Endzeitspalte bilden den Primärschlüssel der Tabelle und identifizieren eine Zeile und somit einen Punkt zweifelsfrei.
Oben wurde eine gespeicherte Tabelle beschrieben, die aus Zeitachsen besteht, die in der Datenbank gespeichert sind. Eine Abfrage umfasst gespeicherte Tabellen als erste Eingaben und führt nachfolgende Tabellenvorgänge aus (Filterung, Aggregation, Zusammenführung usw.), wobei als Ergebnis dieser Tabellenvorgänge abgeleitete Zwischentabellen entstehen.
Eine abgeleitete Tabelle hat dieselbe Struktur wie eine gespeicherte Tabelle mit folgenden Unterschieden:
Die Tabelle ist weiterhin einem überwachten Ressourcentyp zugeordnet, wenn die Transformation, die sie erzeugt hat, alle Spalten mit den überwachten Ressourcenlabels beibehalten hat. Ansonsten ist sie keinem Typ von überwachter Ressource zugeordnet. Dies ist für Metadaten wichtig, die im nächsten Abschnitt beschrieben werden.
Die Tabelle wird durch einen Tabellentyp und nicht durch einen Typ von überwachter Ressource und einen Messwerttyp beschrieben. Der Tabellentyp entspricht einem Messwerttyp, mit der Ausnahme, dass der Satz von Labels alle Spalten der Zeitachsenkennzeichnung enthält. Abhängig von der tatsächlichen Ableitung der Tabelle haben die Zeitachsenkennzeichnungsspalten möglicherweise keine Beziehung zu den Spalten, die von einem tatsächlichen Typ von überwachter Ressource oder einem Messwerttyp angegeben wurden.
Eine abgeleitete Tabelle hat keinen Namen.
Metadata
Ein Typ einer überwachten Ressource kann Metadatentypen haben, die jeder Instanz eines bestimmten Typs einer überwachten Ressource einen Wert zuordnen. Jeder Metadatentyp hat einen Namen und einen Werttyp (String, Int oder Bool).
Es gibt zwei Arten von Metadaten:
Systemmetadaten, die vom Dienst erstellt werden, der die überwachte Ressource erstellt und verwaltet. Systemmetadaten haben den Namen
metadata.system_labels.<key>
, wobei<key>
eine bestimmte Art von Metadaten identifiziert.Nutzermetadaten, die vorhanden sind, wenn ein Dienst dem Nutzer das Hinzufügen von Labels zu einer bestimmten überwachten Ressource ermöglicht. Nutzermetadaten haben den Namen
metadata.user_labels.<key>
, wobei<key>
der Schlüssel des Labels ist, das der Nutzer der Entität zugeordnet hat. Beispiel:metadata.user_labels.my_key
. Der Wert von Nutzermetadaten ist immer vom Typ String.
Eine Tabelle (gespeichert oder abgeleitet), die einer überwachten Ressource zugeordnet ist, kann zusätzliche Spalten für virtuelle Werte haben, eine für jeden Metadatentyp, der dem Typ der überwachten Ressource zugeordnet ist. Für jede Zeile in der Tabelle enthält eine Metadatenspalte den Wert dieser Metadaten zum Zeitpunkt der Endzeitspalte der Zeile. Diese zusätzlichen Metadatenspalten sind nicht Teil der Tabelle, können jedoch in Abfrageausdrücken referenziert werden, so als wären sie die Namen der Metadaten in den Ausdrücken, die für eine Tabellenzeile verwendet werden.
Ausrichtung
Eine Zeitachse ist zeitlich ausgerichtet (oder nur ausgerichtet), wenn die Endzeit ihrer Punkte nur in regelmäßigen Abständen auftritt. Wir sagen, dass eine Zeitachse in Bezug auf eine bestimmte Ausrichtungszeit und einen bestimmten Ausrichtungszeitraum ausgerichtet ist, wenn jeder Punkt in der Zeitreihe eine Endzeit hat, die ein Vielfaches der Ausrichtungsperiode vor (oder nach) der Ausrichtungsbasiszeit ist. Bei einer Ausrichtungsbasiszeit von 10:03 Uhr und einer Ausrichtungsperiode von 5 Minuten wären beispielsweise 09:48, 09:53, 09:58, 10:03, 10:08 Uhr alles gültige Endzeiten für Punkte.
Wenn die Zeitachsen einer Tabelle den Zeitachsentyp Delta haben, muss die Startzeit jedes Punkts um die Dauer des Zeitraums vor der Endzeit liegen, sodass die Dauer jedes Punkts gleich lang ist. Eine Tabelle mit kumulativen Startzeiten kann nicht ausgerichtet werden, da es generell nicht möglich ist, die Startzeiten von Punkten zwischen verschiedenen Zeitachsen abzugleichen.
Wenn alle Zeitachsen, aus denen eine Tabelle besteht, auf dieselbe Ausrichtungszeit und denselben Zeitraum ausgerichtet sind, wird die Tabelle auf diese Zeit und diesen Zeitraum ausgerichtet.
Wenn eine Tabelle ausgerichtet ist, werden die Punkte in verschiedenen Zeitachsen zeitlich aufeinander abgestimmt. Dies ermöglicht es, Vorgänge auszuführen, die verschiedene Zeitachsen kombinieren. Wenn Sie beispielsweise die Zeitachse abrufen möchten, bei der es sich um die Summe eines Messwerts für alle überwachten Ressourcen handelt, müssen die Punkte in den einzelnen Zeitachsen übereinstimmen, also dieselbe Ausrichtung aufweisen. Dann ist der Wert der Punkte in der resultierenden Zeitreihe die Summe der Werte der Punkte zur gleichen Zeit in den einzelnen Zeitreihen.
Syntax und Semantik
Lexikalische Elemente
Der Text einer Abfrage besteht aus einer Abfolge von Token, die in der Grammatik unten durch folgende Regeln definiert sind:
- Ein Token wird in der Grammatik unten durch eines der großgeschriebenen, nicht-terminalen Symbole beschrieben.
- Ein anderes Token als
base_string
enthält keinen Leerraum. Ein Leerraum ist ein Leerzeichen, Tabulator, Zeilenumbruch und Kommentar. Ein Kommentar ist ein beliebiger Text, der nicht in einembase_string
befindet und mit#
beginnt und mit einem Zeilenumbruch endet. - Leerzeichen zwischen Tokens werden ignoriert, mit Ausnahme von separaten Tokens.
- Zwei benachbarte Token müssen durch Leerraum getrennt sein, wenn diese Grammatik zulässt, dass sie als einzelnes Token erkannt werden. Eine Ausnahme bildet
BARE_NAME
, das nur in bestimmten Kontexten erkannt wird.
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 `"'.
Kennzeichnungen (ID
) werden verwendet, um die integrierten Tabellenvorgänge und -funktionen, die Teil der Monitoring-Abfragesprache sind, sowie Spalten und Metadaten in Ausdrücken zu benennen. Die Syntax unterscheidet zwischen einer Stelle, an der eine ID
ein Name für einen Tabellenvorgang oder eine Tabellenfunktion sein kann, und einer Stelle, an der eine ID
ein Spaltenname sein kann. Daher gibt es keine "reservierten" Kennzeichnungen, die nicht als Spaltennamen verwendet werden können. Mit QUOTED_COLUMN
wird der Name einer Spalte angegeben, die nicht als Kennzeichnung geparst wird. Beispiel: c'total cpu'
Die Token NUMBER
, STRING
, DURATION
und DATE
kennzeichnen Literalwerte.
Auf NUMBER
kann ein unit
folgen, das die Maßeinheiten dieses Literalwerts als STRING
angibt.
Ein STRING
kann Unicode-Zeichen enthalten. Wenn ihm kein r
oder R
vorangestellt ist, werden die normalen Escapesequenzen erkannt. Das Suffix eines DURATION
gibt an, wie eine Zeitdauer angegeben wird: Sekunden, Millisekunden, Mikrosekunden, Minuten, Stunden, Tage oder Wochen. base_string
in einem Datum enthält ein Datum im Format 2010/06/23-19:32:15-07:00
, wobei das erste -
ein Leerzeichen sein kann und die Zeitzone (-07:00
) (sowie die Sekunden, Minuten, oder Stunden) weggelassen werden kann.
Die verbleibenden Tokens sind Satzzeichen und Operator-Tokens, die in der folgenden Grammatik in Anführungszeichen stehen (z. B. '^'
oder '<='
). Diese Tokens sind ^
, <=
, <
, ==
, =
=~
, >=
,
>
, ||
, |
, _
, -
, ,
,
;
, ::
, :
, !=
, <>
, !~
,
!
, //
,
/
, .
, (
, )
, [
, ]
,
{
, }
, *
, &&
, %
, +
.
Abfragestruktur
Eine Abfrage besteht aus einer Folge von Tabellenvorgängen (table_op
), die durch Pipe-Operatoren (|
) verbunden sind. Jeder Tabellenvorgang nimmt Tabellen als Eingaben an und erzeugt Tabellen als Ausgabe. Die von einem Tabellenvorgang ausgegebenen Tabellen werden in den nächsten Tabellenvorgang geleitet, der sie verwendet, um eine eigene Tabellenausgabe zu erzeugen.
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 } '}' .
Es gibt drei Arten von Tabellenvorgängen
(table_op
).
Ein
basic_table_op
beginnt mit einemID
, das die auszuführende Art des Vorgangs angibt (hier beschrieben). Darauf folgen Argumente (arg
), die Details zur Ausführung des Tabellenvorgangs enthalten. Jede Art vonbasic_table_op
nimmt null, eine oder viele Tabellen als Eingabe an und erzeugt eine Tabelle als Ausgabe.Ein
grouped_table_op
besteht aus einer geordneten Liste von Abfragen. Jede Abfrage erzeugt eine Tabelle und das Ergebnis vongrouped_table_op
ist eine geordnete Liste dieser Tabellen. Jede Abfrage nimmt als Eingabe null oder mehr Eingabetabellen an, die die Eingabe fürgrouped_table_op
sind.Ein
shortcut_table_op
ist eine Tastenkombination, die hier fürbasic_table_op
beschrieben wird.
Die von einem table_op
ausgegebenen Tabellen werden vom Pipe-Operator (|
) als Eingabe an den nächsten table_op
übergeben. Im Folgenden finden Sie die Regeln für die Übergabe von Tabellen, die von einem Tabellenvorgang links neben einem Pipe-Operator (dem Ersteller) an einen Tabellenvorgang rechts vom Pipe-Operator (dem Nutzer) ausgegeben werden:
Ein Tabellenvorgang, der keine Tabelleneingabe annimmt, kann kein Verbraucher sein.
Bei einem Erzeuger, der eine einzige Tabelle ausgibt, und einem Verbraucher, der eine einzige Tabelle annimmt, ist die Ausgabetabelle des Erzeugers eine Eingabe für den Verbraucher.
Bei einem Erzeuger, der mehrere Tabellen ausgibt, und einem Verbraucher, der eine einzige Tabelle annimmt, wird der Verbraucher separat auf jede Eingabetabelle angewendet und die Ausgabe des Verbrauchertabellenvorgangs ist genau eine Tabelle pro Eingabetabelle.
Bei einem Erzeuger, der mehrere Tabellen ausgibt, und einem Verbraucher, der mehrere Tabellen annimmt, sind alle erzeugten Tabellen eine Eingabe für den Verbraucher.
Für einen Erzeuger, der eine einzelne Tabelle erstellt, und einen Verbraucher, der ein
grouped_table_op
ist, ist die einzelne Tabelle die Eingabe für den ersten Tabellenvorgang jedesquery
in dergrouped_table_op
.Es ist nicht gültig, dass ein
grouped_table_op
ein Verbraucher für einen Erzeuger ist, der mehrere Tabellen erstellt.Der letzte
table_op
in jedemquery
in einergrouped_table_op
darf nur eine Tabelle erzeugen.
Die "arg"-Elemente des Tabellenvorgangs teilen dem Tabellenvorgang mit, wie er seine Eingabetabellen zu einer Ausgabetabelle verarbeiten muss.
Ein arg
kann eines von drei Elementen sein:
Ein Tabellenname (
table_name
), der eine Tabelle benennt oder Teil des Namens einer Tabelle ist, die aus der Cloud Monitoring-Datenbank abgerufen werden soll.Ein Ausdruck (
expr
), der eine Formel zum Berechnen eines Werts ist. Dies kann ein statisch bekannter Literalwert sein oder ein Wert, der aus den Spaltenwerten einer oder mehrerer Zeilen aus der Eingabetabelle oder den Tabellen des Tabellenvorgangs berechnet wird.Eine Zuordnung (
map
), die beschreibt, wie die Spalten in der Ausgabetabelle eines Tabellenvorgangs berechnet werden. Einmap
enthält einen oder mehrereexpr
, die die Werte der Spalten berechnen.
Tabellennamen
Ein table_name
bezeichnet einen überwachten Ressourcentyp, einen Messwerttyp, eine Gruppe oder eine Tabelle. Diese werden in Tabellenvorgängen verwendet, um Tabellen aus der Zeitachsendatenbank zur weiteren Verarbeitung abzurufen.
table_name : name { '::' name } .
name : string | BARE_NAME | ID .
Ein einzelner name
bezieht sich auf einen überwachten Ressourcentyp oder Messwerttyp, z. B. den Typ der überwachten Ressource gce_instance
oder aws_dynamodb_table
oder den Messwerttyp loadbalancing.googleapis.com/http/backend_latencies
.
Ein Typ einer überwachten Ressource kann auch mit einem Gruppennamen oder einem Namen der überwachten Ressource gefolgt von ::
und einem Gruppennamen benannt werden. Ersteres kann verwendet werden, wenn die Gruppe einen einzelnen Typ für überwachte Ressource angibt und letzteres verwendet wird, wenn die Gruppe dies nicht tut.
Eine gespeicherte Tabelle wird durch den Namen der überwachten Ressource gefolgt von ::
und einen Namen für den Messwerttyp angegeben. Beispiel: gce_instance :: loadbalancing.googleapis.com/http/backend_latencies
Ausdrücke
Ein Ausdruck (expr
) ist eine Formel zur Berechnung eines Werts. Er wird als Argument für einen Tabellenvorgang verwendet und hilft bei der Beschreibung der Transformation, die der Tabellenvorgang für die Eingabetabelle oder -tabellen durchführt. Ein expr
kann ein Literalausdruck oder ein dynamischer Ausdruck sein.
Ist ein expr
literal, so besteht er nur aus Literalwerten und einfachen Funktionsaufrufen, deren Argumente Literalwerte sind. Der Wert eines solchen Ausdrucks wird bestimmt, bevor die Abfrage auf Tabellen angewendet wird.
Wenn ein expr
dynamisch ist, kann sie Verweise auf Tabellenspalten enthalten und zur Berechnung eines Werts aus einer oder mehreren Zeilen aus der Eingabetabelle verwendet werden.
Es gibt drei Arten von dynamischen Ausdrücken:
Wertausdruck Ein Wertausdruck erzeugt einen Wert für jede Eingabetabellenzeile, auf die er angewendet wird. Sie kann Verweise auf Tabellenspalten enthalten. Bei der Auswertung für eine Eingabezeile werden diese Verweise auf die entsprechenden Spaltenwerte in der Zeile ausgewertet.
Aggregationsausdruck Ein Aggregationsausdruck erzeugt einen Wert für eine Reihe von Eingabetabellenzeilen. Es gliedert sich in drei Teile:
Einen oder mehrere Wertausdrücke, die einzeln auf jede Eingabezeile angewendet werden, um einen Wert für jede Zeile zu erzeugen. Diese Wertausdrücke sind Argumente für Aggregationsfunktionen.
Eine oder mehrere Aggregationsfunktionen, die eine Sammlung von Eingabewerten, die durch den/die Wertausdruck(e) erzeugt werden, nehmen und sie auf einen einzigen resultierenden Wert reduzieren.
Einen äußeren Ausdruck über die Aggregationsfunktionen, der die Werte annimmt, die sich aus den Aggregationsfunktionen ergeben, und den Wert des Ausdrucks als Ganzes erzeugt.
Im Aggregationsausdruck
sum(if(status >= 500, val(), 0)) / sum(val())
sind die Teile beispielsweise so:Die Wertausdrücke sind
if(status >= 500, val(), 0)
undval()
. Diese werden auf jede Eingabezeile angewendet, um zwei Sammlungen von Werten zu erstellen.Die Aggregatoren sind die zwei
sum
-Funktionsaufrufe. Jeder Funktionsaufruf nimmt die Sammlungen von Werten als Eingabe an, die vom Wertausdruck erzeugt wurden, der sein Argument ist.Der Außenausdruck ist der Divisionsoperator (
/
), der auf die endgültige Ausgabe jeder dersum
-Aggregationsfunktionen angewendet wird, um den Wert des Gesamtausdrucks zu erzeugen.
Ausrichtungsausdruck: Ein Ausrichtungsausdruck besteht aus einem einzelnen Aufruf einer Ausrichtungsfunktion. Die Ausrichtungsfunktion erzeugt einen Ausgabewert aus einer Eingabezeitachse und wird von
align
verwendet, um eine ausgerichtete Tabelle zu erstellen.
Jeder Ausdruck besteht aus opnd
-Elementen (unten definiert), die durch Operatoren verbunden sind.
expr : term { infix_op term } .
term : { prefix_op } opnd .
infix_op : '&&' | '||' | '^'
| '==' | '=' | '!=' | '<>' | '<' | '>' | '<=' | '>=' | '=~' | '!~'
| '+' | '-'
| '*' | '/' | '//' | '%' .
prefix_op : '+' | '-' | '!' .
Die Operatoren verhalten sich wie gewohnt entsprechend ihrer Priorität. In der folgenden Tabelle sind die Operatoren in fünf Gruppen angeordnet. Alle Operatoren in einer Gruppe haben die gleiche Priorität, wobei höhere Gruppen fester gebunden sind. Operatoren derselben Priorität werden von links nach rechts angewendet. Jeder Operator entspricht einer Funktion in der Tabelle, die auf dessen Operanden angewendet wird.
Operator | Funktion | Vorgang |
---|---|---|
* / // % |
mul div div rem |
Multiplikation Division Ganzzahldivision Ganzzahlrest |
+ - |
add sub |
Addition Subtraktion |
== = != <> <= >= > < =~ !~ |
eq ne le ge gt lt re_full_match ! re_full_match |
Gleichheitsvergleich Ungleichheitsvergleich Kleiner-als-oder-gleich-Vergleich Größer-als-oder-gleich-Vergleich Größer-als-Vergleich Kleiner-als-Vergleich Regulärer Ausdruck vollständige Übereinstimmung Regulärer Ausdruck keine vollständige Übereinstimmung |
&& |
and |
Logisch und |
|| |
or |
Logisch oder |
Die Präfixoperatoren +
, -
, und !
entsprechen den unären Funktionen pos
, neg
und not
und werden vor jedem Infix-Operator angewendet.
a < b && a + b + c / -d == 5
entspricht also (a < b) && (((a + b) + (c / (-d))) == 5)
, der wiederum and(lt(a, b), eq(add(add(a, b), div(c, neg(d))), 5))
entspricht.
Die Operatoren arbeiten mit Operanden (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 .
Jede opnd
entspricht einer bestimmten Methode zur Berechnung eines Werts.
literal
ist der Wert des angegebenen Literaltokens.Auf ein NUMBER-Literal kann ein
unit
folgen, das die Maßeinheiten des Literalwerts angibt, z. B.33 'By'
für 33 Byte.Ein
string
besteht aus einem oder mehrerenSTRING
-Tokens, die zu einem Stringwert zusammengeführt werden. Daher hat'a-' 'b'
denselben Wert wie'a-b'
.
column_meta_name
benennt eine Spalte oder eine virtuelle Metadatenspalte in der Eingabetabelle und wird als Wert dieser Spalte in der Eingabezeile ausgewertet, auf die der Ausdruck angewendet wird._
steht für den Standardwert. Dies kann nur als tatsächliches Argument für ein optionales formales Argument angegeben werden.'(' expr ')'
ist ein Ausdruck in Klammern, der nur der Wert vonexpr
ist.call_chain
ist ein oder mehrere verkettete Funktionsaufrufe:
call_chain : [ ID arg_list ] { '.' call } .
arg_list : '(' [ expr { ',' expr } [ ',' ] ] ')' .
call : ID [ arg_list ] .
Jede ID
in einer Aufrufkette benennt eine Funktion, die auf null oder mehr Argumente angewendet wird. Die Argumente für einen Funktionsaufruf können aus den Wertspalten der Eingabetabelle, aus dem Ergebnis eines früheren call
in der Aufrufkette oder aus dem Wert von expr
in einer arg_list
stammen.
Wenn die Aufrufkette mit einem
ID
(und kein.
davor) beginnt, werden die Argumente für die aufgerufene Funktion durchexpr
im folgendenarg_list
angegeben.Beispielsweise wendet
add(error_count, 1)
die Funktionadd
auf zwei Argumente an:column_meta_name
error_count
undliteral
1
. Dies entsprichterror_count + 1
.Wenn ein
call_chain
mit einem'.' call
beginnt, sind die Wertspalten der Eingabetabelle das erste Argument für die aufgerufene Funktion. Wenncall
einarg_list
hat, stelltarg_list
zusätzliche Argumente bereit.Beispielsweise würde
.div
, das auf eine Tabelle mit den Wertspaltennum
undden
angewendet wird,div(num, den)
oder nurnum / den
entsprechen. Der Ausdruck.add(3)
, der auf eine Tabelle mit einer einzelnen Wertspaltecount
angewendet wird, entsprichtadd(count, 3)
oder nurcount + 3
.Die Funktion, die von einer anderen
call
als der ersten in einer Aufrufkette aufgerufen wird, akzeptiert als erstes Argument die Ausgabe der zuvor aufgerufenen Funktion in der Aufrufkette. Wenncall
einarg_list
hat, stelltarg_list
zusätzliche Argumente bereit.Beispiel:
.mul(3).div(4)
angewandt auf eine Tabelle mit einer Spalte mit einer einzelnen Wertspalteerror_count
entsprichtdiv(.mul(3), 4)
was entsprichtdiv(mul(error_count, 3), 4)
und dies wiederumerror_count * 3 / 4
oder(error_count * 3) / 4
.
Beachten Sie, dass die Spalten für die Endzeit und die Startzeit in einer Tabelle keine Spaltennamen haben.
Der Wert der Zeitspalten wird mit den Funktionen end
und start
aufgerufen.
Maps
Eine map
berechnet Werte für Spalten in einer Ausgabezeile und gibt ihnen Namen.
Je nachdem, wo die map
verwendet wird, handelt es sich entweder um eine Zeitachsenkennzeichnungs-map
, die die Zeitachsenkennzeichnungsspalten der Ausgabezeile berechnet, oder um eine Wert-map
, die die Wertspalten der Ausgabezeile berechnet.
map : [ modifier ] '[' [ maplet { ',' maplet } ] ']' .
modifier : ID .
maplet : [ column_name ':' ] expr .
column_name : ID | QUOTED_COLUMN .
Jeder expr
im maplet
berechnet den Wert einer Ausgabespalte und column_name
gibt den Namen der Spalte an. Wenn kein column_name
angegeben ist, wird einer aus dem expr
konstruiert. Wenn expr
nur der Name einer Eingabespalte ist, ist column_name
identisch. Wenn Funktionen angewendet werden, werden diese dem Namen hinzugefügt. Zum Beispiel würde sum(error_count / 3)
den Namen error_count_div_sum
erhalten.
Die von map
berechneten Ausgabespalten (Zeitachsenkennzeichnung oder -wert) stammen aus den maplet
s in map
und aus den entsprechenden Spalten (Zeitachsenkennzeichnung oder -wert) in der Eingabetabelle. Wie dies umgesetzt wird, hängt von modifier
ab:
Kein
modifier
Die entsprechenden Spalten der Ausgabezeile bestehen aus genau den Spalten, die durch einmaplet
immap
angegeben werden. Der Name der Spalte wird entweder explizit durch einID
oderQUOTED_COLUMN
angegeben oder aus der Form desexpr
abgeleitet. Der Wert der Spalte in der Ausgabezeile ist der Wert vonexpr
.Jede
maplet
muss einen (expliziten oder abgeleiteten) Spaltennamen haben, der unter allen Spalten in der Ausgabetabelle eindeutig ist.Beispiel: Anwendung von
[ratio: num/den]
als Wertspaltemap
in eine Tabelle mit Wertspaltennum
undden
würde zu einer Ausgabetabelle mit einer Wertspalteratio
führen, wobei derratio
-Spaltenwert das Verhältnis der beiden Eingabespalten ist.Wenn Sie
[zone]
als Zeitachsenkennzeichnungmap
auf eine Tabelle mit den Zeitachsenkennzeichnungsspaltenproject_id
,zone
undinstance
anwenden, würde dies zu einer Tabelle mit nur einerzone
-Zeitachsenkennzeichnungsspalte führen, deren Wert mit der Eingabetabellenspaltezone
identisch ist.add
Alle Spalten der entsprechenden Art (Zeitachsenkennzeichnung oder -wert) der Eingabezeile sind in der Ausgabezeile enthalten. Darüber hinaus gibt es für jedesmaplet
inmap
eine zusätzliche Ausgabespalte, deren Name und Wert vonmaplet
angegeben werden.Jede
maplet
muss einen (expliziten oder abgeleiteten) Spaltennamen haben, der unter allen Spalten in der Ausgabetabelle eindeutig ist.Wenn Sie beispielsweise
add[ratio: num/den]
als Wertmap
auf eine Tabelle mit den Wertspaltennum
undden
anwenden, erhalten Sie eine Ausgabetabelle mit den Wertspaltennum
,den
undratio
, wobei der Spaltenwertratio
dem Verhältnis der beiden anderen Spalten entspricht.update
Alle Spalten der entsprechenden Art (Zeitachsenkennzeichnung oder -wert) der Eingabezeile, deren Spaltenname nicht der Spalte einermaplet
inmap
entspricht, sind in der Ausgabezeile enthalten. Darüber hinaus gibt es für jedesmaplet
inmap
eine zusätzliche Ausgabespalte, deren Name und Wert vonmaplet
angegeben werden.Jede
maplet
muss einen (expliziten oder abgeleiteten) Spaltennamen haben, der unter allen Spalten in der Ausgabetabelle eindeutig ist. Es kann eine Spalte der entsprechenden Art in der Eingabe benennen, die es ersetzt.Das folgende Beispiel zeigt die Zeitachsenkennzeichnung
map
:update[job: re_extract(job, '[^-]*-(.*)', r'\1'), kind: re_extract(job, '([^-]*)-.*', r'\1')]
Bei Verwendung in einer Tabelle mit den Zeitachsenkennzeichnungsspalten
user
,job
undzone
würde zu einer Ausgabetabelle mit der Zeitachsenkennzeichnungsspalteuser
,job
,zone
undkind
führen.drop
Jedesmaplet
muss aus einemexpr
bestehen, das nur der Name einer Eingabespalte des entsprechenden Typs ist. Die Ausgabespalten bestehen aus allen Eingabespalten der entsprechenden Art mit Ausnahme der Spalten, die in einemexpr
immaplet
benannt sind.Jedes
maplet
darf keincolumn_name
haben undexpr
muss in der Eingabetabelle einfach eine Spalte des entsprechenden Typs benennen.Wenn Sie beispielsweise
drop [job, user]
als Zeitachsenkennzeichnungmap
auf eine Tabelle mit den Zeitachsenkennzeichnungsspaltenuser
,job
undzone
anwenden, erhalten Sie eine Ausgabetabelle mit der Zeitachsenkennzeichnungsspaltezone
.ignore
Jedemaplet
muss aus einemexpr
bestehen, das nur ein Spaltenname ist. Wenn der Name der Name einer Eingabespalte der entsprechenden Art ist, erscheint diese Spalte nicht in den Ausgabespalten. Wenn der Spaltennamemaplet
keine Eingabetabellenspalte der entsprechenden Art benennt, hatmaplet
keine Auswirkung. Daher bestehen die Ausgabespalten aus allen Eingabespalten der entsprechenden Art, mit Ausnahme derer, die inexpr
inmaplet
benannt sind.Jede
maplet
darf keinencolumn_name
haben und derexpr
muss einfach ein Spaltenname, aber nicht der Name einer Spalte in der Eingabetabelle sein. Wennmaplet
keine Spalte in der Eingabetabelle benennt, wird sie ignoriert.Wenn Sie beispielsweise
ignore [job, instance]
als Zeitachsenkennzeichnungmap
auf eine Tabelle mit den Zeitachsenkennzeichnungsspaltenuser
,job
undzone
anwenden, erhalten Sie eine Ausgabetabelle mit der Zeitachsenkennzeichnungsspalteuser
undzone
(wobei das Mapletinstance
ignoriert wird).rename
Jedemaplet
muss eine explizitecolumn_name
haben und einenexpr
enthalten, die nur auf eine Spalte der entsprechenden Art in der Eingabetabelle verweist. Die Ausgabespalten sind alle Spalten der entsprechenden Art in der Eingabetabelle, wenn jedoch in einermaplet
auf einen neuen Namen verwiesen wird, der voncolumn_name
inmaplet
angegeben wird.Die
column_name
in jedemmaplet
muss unter den Spaltennamen der Ausgabetabelle eindeutig sein.Beispiel: Anwendung von
rename[numerator : num, denominator : den]
als Wertspaltemap
in eine Eingabetabelle mit Wertspaltennum
,den
, undratio
würde zu einer Ausgabetabelle mit Wertspaltennumerator
,denominator
, undratio
führen.
Maßeinheiten
Mit jedem numerischen Wert (Int, Double und Distribution) kann eine Maßeinheit verknüpft werden, die die von diesem Wert verwendete Maßeinheit angibt. Einheiten werden durch Strings dargestellt, die einer Teilmenge des Unified Code for Units of Measure (UCUM) folgen. Beispielsweise hat ein Wert, der die Anzahl von Byte angibt, die Einheit "By" und ein anderer Wert, der die Rate von übertragenen Byte angibt, die Einheit "By/s".
Einheiten werden an die Tabellenspalten angehängt, die durch Tabellenvorgänge erstellt werden, und an die Werte von Ausdrücken. Sie sind statisch mit der Spalte oder dem Ausdruck verknüpft, wie der Typ. Jeder Spalte oder jedem Ausdruck mit einem numerischen Typ können Einheiten zugeordnet sein, dies muss jedoch nicht sein.
Die Einheiten, die an Spalten in Tabellen angehängt sind, stammen aus diesen Quellen:
Messwertdeskriptoren können die Einheiten für den Wert eines Messwerts angeben. Diese finden sich in der Dokumentation zu den Messwerten (z. B. hier). Die Wertspalten der von Tabellenvorgängen vom Typ
fetch
undmetric
erstellten Tabellen nutzen die durch den Messwertdeskriptor angegebenen Einheiten.Ausgabetabellenspalten, die nur eine Kopie der Spalte aus der Eingabetabelle sind, haben dieselben Einheiten wie die Eingabetabellenspalte. Daher werden die Einheiten für Spalten der Eingabetabelle durch den Tabellenvorgang
filter
beispielsweise nicht geändert und an die Ausgabe übergeben.Der Tabellenvorgang
union
kombiniert mehrere Tabellen zu einer Tabelle, wobei alle Tabellen dieselben Spalten haben müssen. Wertspalten in Eingabetabellen müssen entweder keine Einheiten zugeordnet sein, oder Einheiten, die den Einheiten entsprechen, die dieser Spalte eventuell in den anderen Eingabetabellen zugeordnet sind. Werden in einer der Eingabetabellen Einheiten für eine Spalte angegeben, so enthält diese Spalte diese Einheiten der Ausgabetabelle. Wurde für keine der Eingabetabellen Einheiten für eine Spalte angegeben, so enthält diese Spalte keine Einheiten in der Ausgabe.Bei Tabellenvorgängen mit einem
expr
, der einen Spaltenwert einer Ausgabetabelle berechnet, sind bei den Einheiten in der Ausgabespalte wie unten beschrieben die Einheiten an jenenexpr
angehängt.
Die an einen expr
angehängten Einheiten hängen von der Form von expr
ab:
Literalwerte allein haben keine Einheiten. Numerischen Literalen (Int oder Double) hingegen können Einheiten zugewiesen werden, indem Sie dem Wert mit einem String folgen, der die Einheit angibt. Dementsprechend ist
3 "By"
einexpr
mit dem Wert 3, dessen Typ Int ist mit der Einheit Byte (By
).Spaltenverweisausdrücke rufen Einheiten aus der benannten Spalte in der Eingabetabelle ab, wenn sie Einheiten enthält.
Funktionen und Operatoren leiten die Maßeinheit für ihre Ausgabewerte von der Einheit der Eingabewerte ab. Hat also
amount
die EinheitBy
undtime
die Einheits
, dann hatamount / time
die EinheitBy/s
. Bei Funktionen, die zwei numerische Argumente aufnehmen, müssen in der Regel beide Argumente oder keines der Argumente Einheiten nutzen. In den Dokumentationen der einzelnen Funktionen wird die Behandlung von Maßeinheiten durch die jeweilige Funktion beschrieben.Viele Funktionen machen den Einheitenabgleich erforderlich. Beispiel:
add
macht es erforderlich, dass beide Operanden, wenn sie Einheiten haben, dieselbe Einheit nutzen. Diese Anforderungen werden in den Dokumentationen der jeweiligen Funktion beschrieben.Die Funktionen
scale
undcast_units
haben einheitenspezifische Funktionen.Die Funktion
scale
multiplizieren einen Wert mit einer Einheit gemäß eines Skalierungsfaktors, der diesen in einen Wert mit einer anderen Einheit konvertiert. Fürexpr
ev
mit der Einheit "KiBy" (Kibi-Byte) führtscale(ev, "By")
dazu, dassev
mit 1024 multipliziert wird. Die Ergebniseinheit ist dannBy
. Dies entsprichtev * 1024 'By/KiBy'
.Die Funktion
cast_units
gibt ihr Argument mit einer bestimmten Einheit zurück, unabhängig von der ursprünglichen Einheit des Arguments, falls vorhanden. Somit führtcast_units(ev, 'By/s')
zum Wertev
, der unverändert, aber mit der EinheitBy/s
ist
Die Teilmenge der von MQL unterstützten UCUM-Einheiten wird durch Stringwerte angegeben, die dieser Grammatik folgen:
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 }
Eine simple_unit
gibt eine Einheit an, die durch eine ATOM_SYMBOL
angegeben wird und optional als Präfix einen von einem PREFIX_SYMBOL
angegebenen Skalierungsfaktor.
Ein ATOM_SYMBOL
gibt eine grundlegende Maßeinheit an:
text | Bedeutung |
---|---|
s | Sekunde |
Min. | Minute (60 Sekunden) |
h | Stunde (60 Minuten) |
d | Tag, (24 Stunden) |
Wo. | Woche (7 Tage) |
Bit | Bit |
Von | Byte (8 Bit) |
% | 10^-2 (Verhältnis ohne Dimension skaliert in %) |
m | Meter |
g | Gramm |
K | Kelvin |
C | Coulomb |
Hz | Hertz (1/s) |
J | Joule (kg.m.m/s/s) |
W | Watt (kg.m.m/s/s/s) (J/s) |
A | Ampere (C/s) |
V | Volt (kg.m.m/s/s/C) (J/C) |
Ein PREFIX_SYMBOL
gibt einen Skalierungsfaktor für die grundlegende Einheit an, der es vorangestellt wird:
text | Bedeutung | profitieren |
---|---|---|
K | Kilo | 10^3 |
M | Mega | 10^6 |
G | Giga | 10^9 |
T | Tera | 10^12 |
P | Peta | 10^15 |
E | Exa | 10^18 |
Z | Zetta | 10^21 |
Y | Yotta | 10^24 |
m | Milli | 10^-3 |
u | micro | 10^-6 |
n | Nano | 10^-9 |
p | Pico | 10^-12 |
f | Femto | 10^-15 |
a | Atto | 10^-18 |
z | Zepto | 10^-21 |
y | Yocto | 10^-24 |
Ki | Kibi | 2^10 |
Mi | Mebi | 2^20 |
Gi | Gibi | 2^30 |
Ti | Tebi | 2^40 |
Pi | Pebi | 2^50 |
Eine Einheit ohne Dimension kann als 1
oder als Potenz von 10 (10^ exponent
wie 10^2
) angegeben werden. Die Einheit 1
ist die Einheit, die den meisten Zählermesswerten zugewiesen wird. Das dimensionslose Verhältnis, das auf die Prozentzahl %
skaliert wird, wird ebenfalls unterstützt. Daher haben 10^-2
und %
dieselben Einheiten. Anders ausgedrückt: Wenn Sie einem Prozentwert 3 hinzufügen, ist dies dasselbe wie wenn Sie dem entsprechenden Verhältnis 0,03 hinzufügen. exponent
ist auf einen Bereich von -128 bis 127 beschränkt.
Ein annotation
ist ein Kommentar, der an einen annotatable
(simple_unit
oder Potenz von 10) angehängt werden kann, und ändert die Bedeutung der Einheit nicht. Eine Anmerkung, die keiner Einheit zugeordnet ist, wird so behandelt, als wäre sie der Einheit 1
zugewiesen. Daher entspricht {queries}/s
1/s
, wobei die Einheit 1
mit {queries}
versehen ist.
Ein Einheitenstring kann aus mehreren component
-Strings bestehen, die durch .
oder /
verbunden sind. Der .
-Connector gibt die Multiplikation der Einheiten und der /
-Connector die Division an. Die Multiplikation und Division werden von links nach rechts angewendet. Für die Teilmenge der von MQL unterstützten UCUM-Einheiten müssen alle Divisionsconnectors nach den Multiplikationsconnectors stehen. Dadurch vermeiden Sie das Problem, die Einheiten der Beschleunigung als m/s.s
zu Schreiben, wenn m/s/s
beabsichtigt ist.
Bei UCUM-Einheiten ist m/s.s
gleich m.s/s
oder nur m
.
Zwei Einheitenstrings sind, unabhängig von Anmerkungen, äquivalent, wenn beide dieselbe Dimension und Skalierung haben. Dimension und Skalierung werden wie üblich bestimmt:
Jeder
component
ist entweder dimensionsfrei oder hat eine Dimension, die eine Kombination aus Zeit, Länge, Daten, Masse und Ladung ist. Beispiel:bit
undBy
haben die Dimension Daten. Um die Dimensionen eines Einheitsstrings zu ermitteln wird jede Anmerkungstabelle in ihre Dimension konvertiert. Diese wird dann gemäß dem Einheitenstring multipliziert und geteilt. Dimensionen, die in Zähler und Nenner auftauchen, werden dabei weggekürzt. Das heißt,b.h/s
(Bit-Stunde pro Sekunde) hat die DimensionDaten mal Zeit, geteilt durch Zeit. Die Dimension Zeit wird weggekürzt, es verbleibt die Dimension Daten.Jede Annotierbare hat eine Skalierung relativ zu den Grundeinheiten ihrer Dimension. Beispiel:
h
(Stunde) hat die Dimension Zeit mit der Grundeinheits
und einem Skalierungsfaktor von 3.600 (jede Stunde beträgt 3.600 Sekunden). Der Skalierungsfaktor eines Einheitsstrings ist die Kombination aus den Skalierungsfaktoren jedescomponent
, kombiniert durch Multiplikation und Division.
Numerische Literale können Einheiten zugewiesen werden, wobei dem Wert der String für die gewünschte Maßeinheit angehängt wird. 3 "m/s"
ist also der Wert 3
mit der Einheit m/s
, 10.8 "km/h"
stellt die gleiche Geschwindigkeit wie der Wert 10.8
mit der Einheit km/h
dar.
Ein Wert mit einer Einheit kann mithilfe der Funktion scale
skaliert werden, sodass er eine andere Einheit mit derselben Dimension verwendet. Zum Beispiel haben MiBy
und By
die Dimension Daten mit dem Skalierungsfaktor 8*1024 bzw. 8 (relativ zur Basiseinheit der Dimension Daten, die bit
ist). Ein Wert x
mit der Einheit MiBy
kann durch den Ausdruck scale(x, "By")
auf einen Wert mit der Einheit By
skaliert werden. Dadurch wird x
mit 1.024 multipliziert und ein Wert mit der Einheit By
wird ausgegeben. Dies entspricht dem Ausdruck x * 1024 "By/MiBy"
, size * 1024 "By/MiBy"
und die Einheit des resultierenden Ausdrucks ist MiBy.By/MiBy
oder einfach By
.
Die Funktion scale
prüft, ob die angefragte Einheit dieselbe Dimension wie die Einheit des skalierten Werts hat.
Wenn size
eine Spalte ist, deren Wert die Einheit "KiBy" hat, ist der Ausdruck scale(size, "By")
mit size * 1024 "By/KiBy"
identisch und die Einheit des resultierenden Ausdrucks ist MiBy.By/MiBy
oder einfach By
.
Es gibt eine begrenzte Anzahl an Fällen, in denen MQL die Einheiten für einen Wert automatisch anpasst oder bereitstellt.
Für eine Funktion f, die zwei Argumente mit äquivalenten Einheiten (
add
,sub
, beliebiger der numerischen Vergleichsoperatoren,if
undor_else
) erfordert , kann eines der Argumente ein Aufruf der Funktionscale
ohne das Argument der zweiten Einheit sein. Wenn die Einheit des anderen Arguments von f dieselbe Dimension wie die Einheit des Arguments für die Funktionscale
hat, wird das zweite Argument der Funktionscale
automatisch auf die Einheiten des anderen Arguments von f gesetzt. Dadurch werden die Einheiten zweier Argumente von f äquivalent und f kann ausgeführt werden.Beispiel: Der Operator
+
verlangt, dass seine Argumente äquivalente Einheiten nutzen, da es nicht sinnvoll ist, zwei Zahlen mit unterschiedlichen Einheiten zu addieren. Wenncache_size
die EinheitBy
undheap_size
die EinheitMiBy
nutzt, entspricht der Ausdruckscale(cache_size) + heap_size
dem Ausdruckscale(cache_size, "MiBy") + heap_size
.Bei allen Vergleichsfunktionen gilt: Wenn ein Argument ein Literal mit einer Einheit ist, das die gleiche Dimension, aber eine andere Skalierung als das andere Argument hat, wird das Literal skaliert, um für beide die gleiche Skalierung zu erreichen.
Wenn "cache_size" beispielsweise die Einheit
By
hat, entspricht der Ausdruckcache_size < 3 "KiBy"
dem Ausdruckcache_size < 3072 "By"
. Beachten Sie, dass dies nicht dasselbe ist wiecache_size < scale(3 "KiBy", "By")
, wenncache_size
vom Typ Int ist, weilscale
das Ergebnis in den Typ Double umwandelt. Dadurch könnte der Vergleich ungenau werden. Bei der ganzzahligen Skalierung wird in diesem Fall eine ordnungsgemäße Rundung und Handhabung des Rests für den jeweiligen Vergleich berücksichtigt.Für das Argument von
mul
oder den Divisor vondiv
wird einem Literal ohne Einheit die Einheit "1" zugewiesen. Dabei werden Skalierungsvorgänge berücksichtigt, die keine Einheiten ändern sollen, z. B. die Frage, was wäre, wenn sich die Rate verdoppelt. Um Einheiten zu ändern, am besten verwenden Siescale
, um automatisch den richtigen Skalierungsfaktor für die Konversion auszuwählen.
Einheitenfehler werden bei der Bewertung einer Abfrage als Warnungen behandelt, entsprechend liefert die Abfrage weiterhin Ergebnisse. Beim Definieren einer Benachrichtigung werden Einheitenfehler als echte Fehler behandelt und verhindern, dass die Benachrichtigung definiert wird.
Beachten Sie: Dauer und Datum sind KEINE numerische Typen und nutzen keine Einheiten. Der Dauer-Wert 60s
ist eine nicht-numerische Dauer und entspricht genau der Dauer von 1m
oder60000ms
. Der Ausdruck 60s
== 60000ms
ist gültig und wahr.
Ein numerischer Wert mit einer Zeiteinheit verhält sich anders. Die Zahlen 3 'min'
und 180 's'
sind zwei verschiedene numerische Werte (3 und 180) mit unterschiedlichen Einheiten. Ohne Skalierung können sie nicht verglichen werden.
Die Funktion scale
konvertiert die Werte Dauer und Datum in Double-Werte mit Einheiten. Beispiel: scale(60s, "min")
, scale(1m, "min")
und scale(60000ms, "min")
geben alle den Doppelwert 1.0
mit Einheit min
zurück.
Kurzformen für Tabellenvorgänge
Eine Kurzform ("shortcut") ist eine einfachere Methode zur Angabe eines grundlegenden Tabellenvorgangs.
shortcut_table_op : shortcut { ',' arg } .
shortcut : table_name | '(' expr ')' | map | DURATION .
Es gibt verschiedene Arten von Kurzformen für Tabellenvorgänge, wobei jede Art einen bestimmten Typ von grundlegendem Tabellenvorgang bezeichnet:
Eine Kurzform der Art "Funktionshochstufung" sieht wie ein normaler Tabellenvorgang aus, der Tabellenvorgang beginnt jedoch mit einer
ID
, die eine Funktion anstelle eines Tabellenvorgangs angibt, und die folgendenarg
-Elemente (alle in Form vonexpr
) sind die Argumente für die Funktion.Die Funktion wird hochgestuft, indem ein Tabellenvorgang angegeben wird, für den die Funktion als Argument fungiert. Die Wertspalte oder -spalten der Eingabetabelle werden zu den ersten Argumenten für die Funktion, als ob ihr ein
.
-Operator vorangegangen wäre. Die spezifischen Hochstufungen lauten so:Eine gewöhnliche Funktion wird zum Argument eines
value
-Tabellenvorgangs, der die einzelne Wertspalte der Ausgabetabelle berechnet.Beispiel:
| add 3
ist eine Verknüpfung fürvalue [.add(3)]
und| div
ist eine Verknüpfung für| value [.div]
.Eine Aggregatfunktion wird zum zweiten Argument eines
group_by
-Tabellenvorgangs, dessen erstes Argument das leeremap
([ ]
) ist. Somit berechnet die Funktion die einzelne Wertspalte einer Ausgabetabelle ohne Zeitachsenkennzeichnungsspalten (eine Tabelle mit einer einzelnen Zeitachse).| min
ist beispielsweise ein Kürzel für| group_by [], [.min]
.Eine Ausrichtungsfunktion wird zum Argument für einen
align
-Tabellenvorgang und führt somit die festgelegte Art der Ausrichtung auf die Zeitachse der Eingabetabelle aus.Beispielsweise ist
| delta 10m
eine Verknüpfung für den Tabellenvorgang| align [.delta(10m)]
.
Eine Namensverknüpfung beginnt mit einem
table_name
die als Argument für denresource
,metric
, oderfetch
-Tabellenvorgang verwendet wird, je nachdem, welche Art von Dingentable_name
benennt.Beispielsweise ist
| gce_instance
eine Verknüpfung für den Tabellenvorgang| resource gce_instance
und| gce_instance :: compute/instance/cpu/usage_time
ist eine Verknüpfung für| fetch gce_instance :: compute/instance/cpu/usage_time
.Eine Filterverknüpfung besteht aus einem
expr
in Klammern, das zum Prädikat in einemfilter
-Tabellenvorgang wird.Beispielsweise ist
| (job == 'search')
eine Abkürzung für| filter job == 'search'
.Eine Verknüpfung mit einer Gruppierung beginnt mit einem
map
, das zum ersten Argument für einengroup_by
-Tabellenvorgang wird. Darauf kann einarg
folgen, der einmap
ist, das die Aggregation beschreibt, die die Wertspalten der Ausgabetabelle berechnet.Beispielsweise ist
| [zone]
eine Abkürzung für| group_by [zone]
.Eine Windowing-Verknüpfung beginnt mit einem
DURATION
, das das erste Argument für einengroup_by
-Tabellenvorgang ist. Darauf muss einarg
folgen, der einmap
ist. Damit wird die Aggregation beschrieben, die die Wertspalten der Ausgabetabelle berechnet.Beispielsweise ist
| 10m, [.sum]
eine Abkürzung für| group_by 10m, [.sum]
.Eine Kurzform der Art "Dauer" beginnt mit einer
DURATION
ohne folgendesarg
. Sie wird zu einemfor
-Tabellenvorgang und gibt die gesamte zeitliche Ausdehnung des Abfragevorgangs an.| 10m
ist beispielsweise ein Kürzel für| for 10m
.
Tabellenvorgänge und Funktionsbeschreibungen
Jeder Tabellenvorgang und jede Funktionsbeschreibung der Monitoring-Abfragesprache beginnt mit einer Dokumentationssignatur, die die Tabelleneingaben (für Tabellenvorgänge) und die Argumenttypen angibt, die für den Tabellenvorgang oder die Tabellenfunktion angegeben werden können. In diesem Abschnitt wird das Format dieser Signaturen beschrieben.
Beachten Sie, dass diese Signaturen NICHT Teil der Monitoring-Abfragesprache selbst sind. Sie werden zur Beschreibung der Monitoring-Abfragesprache verwendet.
Eine Signatur für Tabellenvorgänge beginnt optional mit einem Typ, der die Eingabetabellen für die Tabellenvorgänge beschreibt, gefolgt vom Namen des Tabellenvorgangs, gefolgt von einer Argumentliste, die die gültigen Argumente für den Tabellenvorgang beschreibt. Beispiel: Die Signatur des Tabellenvorgangs pick
:
Tabelle | pick
lit-Int,
[ TSIDSel ],
[ Windowed(Num) ]
Dieser Tabellenvorgang erfordert eine Table
als Eingabe (der häufigste Fall) und hat drei potenzielle Argumente, die durch lit-Int , [TSIDSel ] und [Windowed(Num) ] beschrieben werden.
Die Eingabetabelle und |
sind optional. Wenn Sie den Tabellenvorgang nicht angeben, nimmt keine Eingabetabelle an. Die Eingabetabellenspezifikation ist eine der folgenden:
- Table: Die Eingabe für den Tabellenvorgang ist eine einzelne Tabelle.
- Table++: Der Tabellenvorgang nimmt zwei oder mehr Tabellen als Eingabe an.
- Ressource Der Tabellenvorgang nimmt eine Sammlung von Tabellen an, die durch einen Typ einer überwachten Ressource angegeben sind (alle Tabellen, die Zeitachsen enthalten, deren Typ einen bestimmten Typ von überwachten Ressourcen enthält).
- ResourceOrTable Entweder Tabelle oder Ressource ist als Eingabe zulässig.
Jeder Argumentdeskriptor in der Argumentliste nach dem Namen des Tabellenvorgangs besteht aus folgenden Teilen:
Er kann in
[
]
eingeschlossen werden. In diesem Fall ist es optional und das tatsächliche Argument kann als_
angegeben oder weggelassen werden, wenn das tatsächliche Argument nach allen explizit angegebenen Argumenten positioniert wird.Er kann das Präfix
lit-
haben, das angibt, dass der Argumentwert ein konstanter Wert sein muss, bevor wir die Abfrage auswerten.Er hat immer den Namen eines Werttyps oder einer Typklasse (siehe unten), die den zulässigen Typ des tatsächlichen Arguments beschreibt.
Sie kann ein Suffix haben, das eine Zeitachsenart angibt, die die Zeitachsenart des Eingabewerts einschränkt.
Der Name des Argumentdeskriptortyps kann einer der tatsächlich hier beschriebenen Typen sein: Bool, Int, Double, Verteilung, String, Dauer oder Datum. In diesem Fall muss das tatsächliche Argument ein Ausdruck desselben Typs sein.
Im Folgenden wird angegeben, dass das tatsächliche Argument ein table_name
sein muss, das einen Messwert, eine überwachte Ressource, oder Tabelle benennt:
- MetricName
- ResourceName
- TableName
Ein Argumentdeskriptor kann eine Kategorie benennen, die angibt, dass das tatsächliche Argument ein Ausdruck eines der verschiedenen Typen sein kann:
- Num: Entweder Int oder Double.
- Summable Werttypen, die addiert werden können: Int, Double oder Verteilung.
- Vergleichbar: Vergleichbare Werttypen: Int, Double, String, Bool, Dauer, Datum.
- ColumnValue: Typen, die gültige Spaltenwerte sind: Int, Double, String, Bool oder Verteilung.
- Windowed(Num) A Num, möglicherweise annotiert von
within
-,ago
- oderbottom
-Funktionen. - WindowDuration Eine Dauer, möglicherweise mit Anmerkungen von
window
odersliding
versehen. - BucketSpecification Eine Bucket-Spezifikation für eine Verteilung.
Ein Tabellenvorgang kann ein map
-Argument erfordern, das die Zeitachsen-ID-Spalten oder Wertspalten der Ausgabezeile angibt. Dies wird durch eine der folgenden Optionen angezeigt:
- RowToTSID: Eine Zuordnung, die die Zeitachsenkennzeichnungsspalten der Ausgabetabelle beschreibt
- TSIDSel: Eine Zuordnung, die die Zeitachsenkennzeichnungs-Spalten angibt, die beibehalten werden sollen Jede
maplet
immap
muss nur aus einemexpr
bestehen, der eine Spalte benennt (ID
odercolumn_name
). Beispiel:[zone, name]
bewirkt, dass die Ausgabespalten nur aus den Eingabe-Zeitachsenspaltenzone
undname
bestehen, wobei alle anderen Eingabespalten gelöscht werden. - RowToVal: Eine Zuordnung, die die Wertspalten der Ausgabetabelle beschreibt. Wenn ein Nicht-Zuordnungnsausdruck als echtes Argument angegeben wird, wird er zu einer Zuordnung mit einem einzelnen Element mit diesem Ausdruck hochgestuft.
- RowSetToVal: Eine Zuordnung, die die Wertspalten der Ausgabetabelle durch Aggregation beschreibt Wenn ein Nicht-Zuordnungnsausdruck als echtes Argument angegeben wird, wird er zu einer Zuordnung mit einem einzelnen Element mit diesem Ausdruck hochgestuft.
- DefaultColumns Eine Zuordnung, die Standardwertspalten für ein
outer_join
beschreibt. Wenn ein Nicht-Zuordnungnsausdruck als echtes Argument angegeben wird, wird er zu einer Zuordnung mit einem einzelnen Element mit diesem Ausdruck hochgestuft.
Eine Funktionssignatur beginnt mit dem Namen der Funktion, gefolgt von einer in Klammern gesetzten Liste mit den gültigen Argumenten für die Funktion, gefolgt von einem Rückgabetyp, der den von der Funktion zurückgegebenen Wert beschreibt. Beispiel: Die Signatur der Funktion fraction_less_than
lautet:
fraction_less_than(
Summable,
lit-Num)
→ Double
Diese Funktion verwendet zwei durch Summable und Lit-Num beschriebene Argumente und gibt einen Wert vom Typ Double zurück. Die Argumentliste enthält dieselben Elemente, die oben für Tabellenvorgänge beschrieben wurden. Der Rückgabetyp kann ein bestimmter Werttyp sein, der angibt, dass der zurückgegebene Wert diesen Typ hat, oder einer der folgenden Werte:
- Num - Wenn eines der Argumente der Funktion Double ist, dann Double, andernfalls Int.
- ColumnValue - Derselbe Typ wie das erste tatsächliche Argument für die Funktion.
- LastArgType - Derselbe Typ wie das letzte tatsächliche Argument für die Funktion.
- Windowed() - Derselbe Typ wie das tatsächliche Argument Windowed, annotiert mit dem Typ Windowed. (Wenn das tatsächliche Argument von Windowed der Typ Int ist, ist der Rückgabetyp Windowed(Int). (Siehe
within
- ,ago
- oderbottom
-Funktionen.)
Ein Funktionsargument-Deskriptor oder -Rückgabetyp kann einen Indikator haben, der die Zeitachsenart des Arguments oder Ergebnisses steuert. Diese werden als eines der folgenden Suffixe für den Typ angezeigt:
- .Cumulative, .Delta oder .Gauge geben an, dass das tatsächliche Argument den angegebenen Zeitachsentyp haben muss.
- .CumulativeOK bedeutet, dass ein Argument kumulativ sein kann.
- .FirstArgKind bedeutet nur für Rückgabetypen die gleiche Zeitachse, die das erste Argument für die Funktion hat.
Wenn ein Argument kein Zeitachsentypsuffix hat, muss das Argument ein Zeitachsentyp Gauge oder Delta sein. Wenn ein Rückgabetyp kein Zeitachsentypsuffix hat, ist es Gauge.
Eine Funktionssignatur kann auch einen oder mehrere der folgenden Hinweise enthalten:
- (implizite Zeileneingabe) gibt an, dass die Funktion die gesamte Zeile als implizite Eingabe nutzt. Die Funktion
hash_tsid
erzeugt beispielsweise einen Hash der Zeitachsenkennzeichnungs-Spalten der Eingabezeile, übernimmt diese Spaltenwerte jedoch nicht als explizite Argumente. - (nur temporär) Wird für die Signatur von Aggregationsfunktionen verwendet, um anzugeben, dass die Funktionssignatur nur bei einer temporären Aggregation gilt. Ansonsten gelten andere Signaturen für die Funktion. Beachten Sie, dass sowohl die zeitliche als auch die räumliche Aggregation im selben Tabellenvorgang durchgeführt wird.
- (nur temporär gleitend) Wird für die Signatur von Aggregationsfunktionen verwendet, um anzugeben, dass die Funktionssignatur nur bei einer gleitenden temporären Aggregation gilt. Ansonsten gelten andere Signaturen für die Funktion. Beachten Sie, dass sowohl die gleitende zeitliche als auch die räumliche Aggregation im selben Tabellenvorgang durchgeführt wird.
Tabellenvorgänge
In diesem Abschnitt werden alle grundlegenden Tabellenvorgänge in der Monitoring-Abfragesprache beschrieben.
- Abrufen
fetch
Erstellt eine Tabelle aus der Datenbank.metric
Erstellt die Tabelle für einen bestimmten Messwerttyp aus einer Reihe von Tabellen.fetch_cumulative
Erstellt eine Tabelle mit kumulativen Zeitachsen aus der Datenbank.
- Auswahl
filter
Filtert Zeilen aus einer Eingabetabelle anhand eines Prädikats.top
Wählt die oberste Zeitachse nach einem Sortierwertausdruck aus.bottom
Unterste Zeitachse nach einem Sortierwertausdruck auswählen.top_by
Zeitachsen nach einem Sortierwertausdruck in verschiedenen Gruppen auswählen.bottom_by
Zeitachsen nach einem Sortierwertausdruck in verschiedenen Gruppen auswählen.
- Zeilenänderungen
map
Schreibt die Zeitachsenkennzeichnungs- und wertspalten jeder Zeile in einer Tabelle neu.value
Schreibt die Wertspalten jeder Zeile in einer Tabelle neu.time_shift
Zeitachsen zeitlich vorwärts verschieben.
- Zeitachsenausrichtung
align
Erzeugt eine ausgerichtete Tabelle mithilfe einer Ausrichtungsfunktion.
- Aggregation
group_by
Fasst Zeilen nach zugeordneter Zeitachsenkennzeichnung und Zeitfenster zusammen.union_group_by
Aggregiert Zeilen aus mehreren Tabellen.unaligned_group_by
Aggregiert Zeilen nach der zugeordneten Zeitachsenkennzeichnung ohne Ausrichtung.
- Union und Join
join
Natural Join mehrerer Tabellen.outer_join
Äußeres Natural Join zweier Tabellen.union
Union mehrerer Tabellen.
- Zeithorizont und Zeitraum
every
Zeitraum für die Ausgabe der ausgerichteten Tabelle angeben.within
Gibt den Zeitraum der Abfrageausgabe an.graph_period
Gibt den bevorzugten Ausgabezeitraum zum Zeichnen von Zeitachsengrafiken an.window
Gibt das Fenster für Ausrichtungsvorgänge an.
- Benachrichtigungen
condition
Der Eingabetabelle eine boolesche Bedingungsspalte hinzufügen.absent_for
Bedingung für das Fehlen einer Eingabe erstellen.
- Sonstiges
ident
Identitätstabellenvorgang: keine Änderung an der Eingabetabelle.ratio
Das Verhältnis der Wertspalten von zwei ausgerichteten Eingabetabellen berechnen.filter_ratio
Berechnet das Verhältnis zweier gefilterter Summen der Eingabewertspalte.filter_ratio_by
berechnet ein gruppiertes Verhältnis von zwei gefilterten Summenwerten der Spalte mit den Eingabewerten.
Abrufen
Die Ausgabe eines fetch
-Tabellenvorgangs ist eine Tabelle, die namentlich aus der Cloud Monitoring-Zeitachsendatenbank abgerufen wird.
Die Ausgabe des Tabellenvorgangs resource
ist die Menge aller Tabellen, die den Namen des überwachten Ressourcentyps im Namen haben. Auf jede resource
-Tabelle muss anschließend ein metric
-Tabellenvorgang folgen, der die einzelne Tabelle auswählt, deren Name diesen Messwert enthält. Vor dem metric
-Tabellenvorgang kann es filter
-Tabellenvorgänge geben, die die Zeilen in den resultierenden Tabellen einschränken.
fetch
Erstellt eine Tabelle aus der Datenbank.
Signatur: fetch
lit-TableName
Der Vorgang fetch
ruft aus der Zeitachsen-Datenbank die Tabelle ab, deren Name dem Tabellennamen entspricht, der im Argument TableName angegeben wurde.
Es ist ein Fehler, wenn der Tabellenname einen unbekannten Namen einer überwachten Ressource oder eines Messwerttyps enthält.
Diese Tabelle ist leer, wenn kein Messwert des angegebenen Typs aus der überwachten Ressource des angegebenen Typs erfasst wurde.
Wenn der Messwert Kumulativ ist, werden die Zeitachsen, aus denen die Tabelle besteht, effektiv in Delta-Zeitachsen konvertiert, wobei jeder Punkt die Wertänderung seit dem nächstjüngeren Punkt darstellt.
Der fetch
-Vorgang kann auch den Satz aller Tabellen abrufen, die auf einer bestimmten überwachten Ressource basieren, indem einfach der Name der überwachten Ressource und kein Messwertname angegeben wird. Auf einen solchen fetch
-Vorgang muss ein metric
-Vorgang folgen, der die Tabelle mit den Daten für einen bestimmten Messwert auswählt. Der einzige Vorgang, der zwischen einem solchen fetch
und dem nachfolgenden metric
liegen kann, ist ein filter
-Vorgang, der basierend auf den überwachten Ressourcenspalten filtert.
Diese Form von fetch
ist nützlich, wenn wir mehr als einen Messwert für eine bestimmte überwachte Ressource abrufen möchten, wie in diesem Beispiel:
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
Dies entspricht
{ 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
Erstellt die Tabelle für einen bestimmten Messwerttyp aus einer Reihe von Tabellen.
Signatur:
Resource | metric
lit-MetricName
Der Tabellenvorgang metric
übernimmt eine Reihe von Tabellen, die von einem fetch
-Tabellenvorgang erstellt wurden, der keinen Messwertnamen enthielt.
Er wählt die Tabelle aus, die Daten für den Messwert enthält, der durch das Argument lit-MetricName angegeben wurde, und erzeugt diese Tabelle als Ausgabe.
Es ist ein Fehler, wenn keine Messwertdefinition mit dem angegebenen Namen vorhanden ist. Wenn keine Eingabetabelle mit Daten für den angegebenen Messwertnamen vorhanden ist, wird eine leere Tabelle erstellt.
fetch_cumulative
Erstellt eine Tabelle mit kumulativen Zeitachsen aus der Datenbank.
Signatur:
fetch_cumulative
lit-TableName
Der Tabellenvorgang fetch_cumulative
ist mit dem Tabellenvorgang fetch
identisch, mit der Ausnahme, dass kumulative Messwerte nicht automatisch in Delta-Messwerte konvertiert werden, wenn er abgerufen wird.
Auswahl
Die Auswahltabellen wählen Zeilen aus der Eingabetabelle zur Aufnahme in die Ausgabetabelle aus. Der Typ der Ausgabetabelle ist genau mit dem von der Eingabetabelle identisch.
filter
Filtert Zeilen aus einer Eingabetabelle anhand eines Prädikats.
Signatur:
ResourceOrTable | filter
Bool
Der filter
-Vorgang wertet den Argumentausdruck Bool für jede Zeile in einer einzelnen Eingabetabelle oder in der Sammlung von Tabellen aus, die durch einen resource
-Vorgang benannt sind. Es werden nur die Zeilen der Eingabetabelle oder -tabellen, für die dieser Ausdruck als wahr ausgewertet wird, in die Ausgabetabelle oder -tabellen übernommen.
Wenn die Eingabe eine Sammlung von Tabellen ist, kann nur im Prädikat auf die Labels der überwachten Ressourcen verwiesen werden, die allen Tabellen gemeinsam sind.
top
Wählt die oberste Zeitachse nach einem Sortierwertausdruck aus.
Signatur:
Table | top
lit-Int,
[ Windowed(Num) ]
Der Tabellenvorgang top
berechnet für jede Zeitachse in ihrer Eingabetabelle einen Sortierwert und wählt dann die Anzahl der Zeitachsen aus, die durch ihr Argument Int mit dem größten Sortierwert bereitgestellt werden. Das Argument Windowing berechnet den Sortierwert.
Das Argument Windowing(Num) wird auf Zeilen in einer Zeitachse angewendet, die innerhalb eines Wertzeitfensters liegen. Das Standardwertzeitfenster ist mit dem Abfragezeitfenster identisch. Wenn der Ausdruck ein Aggregationsausdruck ist (z. B. .min
), handelt es sich um eine Aggregation über alle Zeilen, deren Endzeitstempel sich innerhalb des Wertfensters befindet. Wenn der Ausdruck ein Wertausdruck ist (z. B. .val(0)/.val(1)
), wird er auf die jüngste Zeile im Wertfenster angewendet. Wenn es für eine Zeitreihe keine Zeilen innerhalb des Wertefensters gibt oder wenn das Argument Windowed(Num) keinen Wert für eine Zeitreihe ergibt, wird diese Zeitreihe nicht für die Ausgabe berücksichtigt.
Die Funktion within
kann im Argument Windowed(Num) verwendet werden, um das Wertefenster durch Angabe einer Startzeit, einer Dauer und/oder einer Endzeit für das Fenster zu ändern.
Beispiele:
| top 3
Wählen Sie drei Zeitachsen mit dem größten Wert für den jüngsten Punkt der Zeitachse aus.
| top 7, .max
Wählen Sie sieben Zeitachsen mit dem größten Wert für das Maximum aller Punkte in der Zeitachse im Abfragefenster aus.
| top 3, .min.within(-10h, 1h)
Dadurch werden drei Zeitachsen ausgewählt, bei denen der größte Wert des min
-Reduzierers auf die Zeilen in jeder Zeitachse angewendet wird, die in einem Fenster liegen, das vor 10 Stunden beginnt und eine Stunde dauert.
bottom
Unterste Zeitachse nach einem Sortierwertausdruck auswählen.
Signatur:
Table | bottom
lit-Int,
[ Windowed(Num) ]
Der Tabellenvorgang bottom
berechnet für jede Zeitachse in ihrer Eingabetabelle einen Sortierwert und wählt dann die Anzahl der Zeitachsen aus, die durch ihr Argument Int mit dem kleinsten Sortierwert bereitgestellt werden. Das Argument Windowing berechnet den Sortierwert.
Das Argument Windowing(Num) wird auf Zeilen in einer Zeitachse angewendet, die innerhalb eines Wertzeitfensters liegen. Das Standardwertzeitfenster ist mit dem Abfragezeitfenster identisch. Wenn der Ausdruck ein Aggregationsausdruck ist (z. B. .min
), handelt es sich um eine Aggregation über alle Zeilen, deren Endzeitstempel sich innerhalb des Wertfensters befindet. Wenn der Ausdruck ein Wertausdruck ist (z. B. .val(0)/.val(1)
), wird er auf die jüngste Zeile im Wertfenster angewendet. Wenn es für eine Zeitreihe keine Zeilen innerhalb des Wertefensters gibt oder wenn das Argument Windowed(Num) keinen Wert für eine Zeitreihe ergibt, wird diese Zeitreihe nicht für die Ausgabe berücksichtigt.
Die Funktion within
kann im Argument Windowed(Num) verwendet werden, um das Wertefenster durch Angabe einer Startzeit, einer Dauer und/oder einer Endzeit für das Fenster zu ändern.
Beispiele:
| bottom 3
Wählen Sie drei Zeitachsen mit dem kleinsten Wert für den jüngsten Punkt der Zeitachse aus.
| bottom 7, .min
Wählen Sie sieben Zeitachsen mit dem kleinsten Wert für alle Punkte in der Zeitachse im Abfragefenster aus.
| bottom 3, .max.within(10h)
Dadurch werden drei Zeitachsen mit dem kleinsten Wert des max
-Reduzierers ausgewählt, der auf die Zeilen in jeder Zeitachse angewendet wird, die in einem Fenster liegen, das vor 10 Stunden beginnt und bis jetzt andauert.
top_by
Zeitachsen nach einem Sortierwertausdruck in verschiedenen Gruppen auswählen.
Signatur:
Table | top_by
TSIDSel,
lit-Int,
[ Windowed(Num) ]
Der Tabellenvorgang top_by
gruppiert Zeitachsen, die dieselbe Zeitachsenkennzeichnung haben, die vom Argument TSIDSel berechnet wurde. Innerhalb jeder Gruppe werden Zeitachsen auf dieselbe Weise ausgewählt wie top
, wenn dieselben Argumente von Int und Windowing angegeben werden. Für jede Gruppe wird ein Sortierwert für jede Zeitachse in einer Gruppe berechnet und die Anzahl der durch das Argument Int angegebenen Zeitachsen mit dem größten Sortierwert ausgewählt. Das Argument Windowing berechnet den Sortierwert.
Das Argument Windowing(Num) wird auf Zeilen in einer Zeitachse angewendet, die innerhalb eines Wertzeitfensters liegen. Das Standardwertzeitfenster ist mit dem Abfragezeitfenster identisch. Wenn der Ausdruck ein Aggregationsausdruck ist (z. B. .min
), handelt es sich um eine Aggregation über alle Zeilen, deren Endzeitstempel sich innerhalb des Wertfensters befindet. Wenn der Ausdruck ein Wertausdruck ist (z. B. .val(0)/.val(1)
), wird er auf die jüngste Zeile im Wertfenster angewendet. Wenn es für eine Zeitreihe keine Zeilen innerhalb des Wertefensters gibt oder wenn das Argument Windowed(Num) keinen Wert für eine Zeitreihe ergibt, wird diese Zeitreihe nicht für die Ausgabe berücksichtigt.
Die Funktion within
kann im Argument Windowed(Num) verwendet werden, um das Wertefenster durch Angabe einer Startzeit, einer Dauer und/oder einer Endzeit für das Fenster zu ändern.
Beispiele:
| top_by [zone], 1
Für jede Gruppe von Zeitachsen mit demselben Wert der Spalte "Zone" wird die Zeitachse mit dem größten Wert für den jüngsten Punkt in der Zeitachse ausgewählt.
| top_by [project_id], 2, .max
Für jede Gruppe von Zeitreihen mit dem gleichen Wert der Spalte 'project_id' wählt diese die beiden Zeitreihen mit dem größten Wert für das Maximum aller Punkte in der Zeitreihe innerhalb des Abfragefensters aus.
| top_by [zone], 1, .min.within(-10h, 1h)
Dadurch wird für jede Gruppe von Zeitachsen mit demselben Wert der Spalte "zone" die Zeitachse mit dem größten Wert des min
-Reduzierers ausgewählt, der auf die Zeilen in jeder Zeitachse angewendet wird, die in einem Fenster beginnen, das vor 10 Stunden beginnt und hält eine Stunde lang.
bottom_by
Zeitachsen nach einem Sortierwertausdruck in verschiedenen Gruppen auswählen.
Signatur:
Table | bottom_by
TSIDSel,
lit-Int,
[ Windowed(Num) ]
Der Tabellenvorgang bottom_by
gruppiert Zeitachsen, die dieselbe Zeitachsenkennzeichnung haben, die vom Argument TSIDSel berechnet wurde. Innerhalb jeder Gruppe werden Zeitachsen auf dieselbe Weise ausgewählt wie bottom
, wenn dieselben Argumente von Int und Windowing angegeben werden. Für jede Gruppe wird ein Sortierwert für jede Zeitachse in einer Gruppe berechnet und die Anzahl der durch das Argument Int angegebenen Zeitachsen mit dem kleinsten Sortierwert ausgewählt. Das Argument Windowing berechnet den Sortierwert.
Das Argument Windowing(Num) wird auf Zeilen in einer Zeitachse angewendet, die innerhalb eines Wertzeitfensters liegen. Das Standardwertzeitfenster ist mit dem Abfragezeitfenster identisch. Wenn der Ausdruck ein Aggregationsausdruck ist (z. B. .min
), handelt es sich um eine Aggregation über alle Zeilen, deren Endzeitstempel sich innerhalb des Wertfensters befindet. Wenn der Ausdruck ein Wertausdruck ist (z. B. .val(0)/.val(1)
), wird er auf die jüngste Zeile im Wertfenster angewendet. Wenn es für eine Zeitreihe keine Zeilen innerhalb des Wertefensters gibt oder wenn das Argument Windowed(Num) keinen Wert für eine Zeitreihe ergibt, wird diese Zeitreihe nicht für die Ausgabe berücksichtigt.
Die Funktion within
kann im Argument Windowed(Num) verwendet werden, um das Wertefenster durch Angabe einer Startzeit, einer Dauer und/oder einer Endzeit für das Fenster zu ändern.
Beispiele:
| bottom_by [zone], 1
Für jede Gruppe von Zeitachsen mit demselben Wert der Spalte "Zone" wird die Zeitachse mit dem kleinsten Wert für den jüngsten Punkt in der Zeitachse ausgewählt.
| bottom_by [project_id], 2, .max
Für jede Gruppe von Zeitreihen mit dem gleichen Wert der Spalte 'project_id' wählt diese die beiden Zeitreihen mit dem kleinsten Wert für das Maximum aller Punkte in der Zeitreihe innerhalb des Abfragefensters aus.
| bottom_by [zone], 1, .min.within(1h)
Dadurch wird für jede Gruppe von Zeitachsen mit demselben Wert der Spalte "zone" die Zeitachse mit dem kleinsten Wert des min
-Reduzierers ausgewählt, der auf die Zeilen in jeder Zeitachse angewendet wird, die in einem Fenster beginnen, das vor 10 Stunden beginnt und hält eine Stunde lang.
Zeilenänderung
map
Schreibt die Zeitachsenkennzeichnungs- und Wertspalten jeder Zeile in einer Tabelle neu.
Signatur:
Tabelle | map
[ RowToTSID ],
[ RowToVal ]
Für jede Zeile in der Eingabetabelle werden zwei Transformationen angewendet:
Wenn die RowToTSID-Zuordnung angegeben ist, wird sie auf die Zeitachsenkennzeichnungsspalten dieser Zeile angewendet, um die Zeitachsenkennzeichnungsspalten der entsprechenden Ausgabezeile zu erzeugen. Wenn die RowToTSID-Zuordnung nicht angegeben ist (oder als
_
angegeben ist), sind die Spalten für die Ausgabezeitachsenkennzeichnung mit der Eingabe identisch.Wenn die Zuordnung RowToVal angegeben ist, wird sie auf die Wertspalten der Eingabezeile angewendet, um die Wertspalten der Ausgabezeile zu erzeugen. Ist die Zuordnung RowToVal nicht angegeben, sind die Wertspalten in der Ausgabe mit denen in der Eingabe identisch.
Es ist ein dynamischer Fehler, wenn Zeilen aus zwei verschiedenen Zeitachsen in der Eingabe derselben Zeitachse in der Ausgabe zugeordnet werden. In diesem Fall werden die aus einer der Eingabezeitachsen abgeleiteten Zeilen aus der Ausgabe gelöscht und eine Fehlermeldung wird ausgegeben.
Wenn die RowToTSID-Zuweisung Verweise auf Wertspalten oder Zeitspalten enthält, wird möglicherweise eine einzelne Eingabezeitachse in mehrere Ausgabezeitachsen aufgeteilt. Wenn die RowToTSID-Zuweisung Verweise auf Wertspalten oder Zeitspalten enthält, darf sie daher nur auf Tabellen angewendet werden, deren Wertspalten zur Zeitachsenart Gauge oder Delta gehören.
value
Schreibt die Wertspalten jeder Zeile in einer Tabelle neu.
Signatur:
Tabelle | value
RowToVal
Die Zuordnung RowToVal wird auf die Spalten jeder Zeile in der Eingabetabelle angewendet, um die Wertspalten der entsprechenden Ausgabezeile zu erzeugen. Jede Ausgabezeile weist dieselben Zeitachsenkennzeichnungs- und Zeitspalten wie die Eingabezeile, aus der diese erzeugt wurde, und die von der Zuordnung RowToVal erzeugten Wertspalten auf.
time_shift
Zeitachsen vorwärts verschieben.
Signature:
Tabelle | time_shift
lit-Duration
Für jede Zeile in der Eingabetabelle wird der Betrag, der durch das Argument Dauer festgelegt wurde, zu den Zeitspalten hinzugefügt. Dies hat zur Folge, dass jede Zeitachse in der Tabelle nacheinander verschoben wird.
Wenn die Eingabetabelle ausgerichtet ist, muss der Verschiebungsbetrag ein Vielfaches des Ausrichtungszeitraums sein, wodurch die Ausrichtung der Eingabetabelle beibehalten wird.
Zeitachsenausrichtung
align
Erstellt eine ausgerichtete Tabelle mithilfe einer Ausrichtungsfunktion.
Signatur:
Tabelle | align
[ Aligner ]
Der Tabellenvorgang align
verwendet die Ausrichtungsfunktion, die für das Argument Ausrichtung angegeben ist, um aus jeder Zeitachse in der Eingabe eine ausgerichtete Zeitachse zu erstellen und erstellt die Zeitachsen in der Ausgabetabelle.
Die Ausrichtungsbasiszeit ist die Endzeit des Abfragefensters und der Ausrichtungszeitraum wird durch einen der folgenden drei Schritte festgelegt:
Ein
every
-Tabellenvorgang, der den Zeitraum für diesenalign
-Tabellenvorgang festlegt.Für die Ausrichtungsfunktion muss der Ausrichtungszeitraum der Fensterbreite entsprechen (siehe
delta
).Eine externe Grafikschnittstelle erfordert einen bestimmten Ausrichtungszeitraum.
Die spezielle Methode zur Erstellung ausgerichteter Zeitachsen wird für die Ausrichtungsfunktion beschrieben, die dem Argument Ausrichtung übergeben wird.
Aggregation
Ein Aggregationstabellenvorgang unterteilt die Zeilen der Eingabetabelle in Gruppen. Für jede Gruppe von Eingabezeilen werden eine gemeinsame Zeitachsenkennzeichnung und gemeinsame Zeitspalten für die Gruppe berechnet, die Eingabezeilen aggregiert, um die Wertausgabespalten zu erstellen, und eine einzelne Zeile mit dem resultierenden Zeitachsenbezeichner sowie den Zeit- und Wertspalten ausgegeben.
Es gibt drei Arten der Aggregation
Räumliche Aggregation. Bei dieser Form der Aggregation werden für jede Eingabezeile neue Zeitachsen-ID-Spalten berechnet und alle Zeilen mit denselben neuen Zeitachsen-ID-Spalten und Endzeit gruppiert. Diese Art der Aggregation erfordert in der Regel eine ausgerichtete Eingabe, damit Zeilen aus verschiedenen Zeitachsen zeitlich in einer Gruppe zusammengefasst werden.
Zeitliche Aggregation. Bei dieser Form der Aggregation wird eine Reihe gültiger, ausgerichteter Ausgabezeiten und eine neue Endzeit für jede Zeile berechnet. Dabei wird die älteste ausgerichtete Endzeit angegeben, die nicht früher als die ursprüngliche Endzeit der Zeile ist. Zeilen mit derselben Zeitachsenkennung und derselben Endzeit werden zusammen gruppiert.
Fließende zeitliche Aggregation. Diese Form der Aggregation ähnelt der zeitlichen Aggregation, mit der Ausnahme, dass eine Zeile in mehr als einer Gruppe enthalten sein kann. Dies berechnet eine Reihe von Zeitfenstern, die jeweils eine spätere Kante mit einer gültigen ausgerichteten Endzeit und jeweils die gleiche feste Breite haben. Eine Zeile erhält eine Endzeit, die dem späteren Zeitpunkt jedes Fensters entspricht, in das sie fällt, und die Zeile wird mit allen anderen Zeilen gruppiert, die die gleiche Zeitachsenkennung und eine neue Endzeit haben. Wenn sich die Fenster überschneiden, kann eine Zeile mehr als eine neue Endzeit erhalten und somit in mehr als einer Gruppe enthalten sein.
Es ist möglich, räumliche Aggregationen mit einer der beiden Arten der temporären Aggregation in einem Tabellenvorgang zu kombinieren.
Ein wichtiger Unterschied zwischen temporärer und gleitender Aggregation besteht darin, dass einige Aggregatoren (z.B. Summe) Werte mit der Zeitachsenart Delta für nichtgleitende zeitliche Aggregation erzeugen, aber Gauge für gleitende zeitliche Aggregation. Der Grund dafür ist, dass sich die Zeitausdehnungen für zwei Punkte in einer Delta-Zeitachse nicht überlappen können, sodass die überlappenden Eingabefenster der gleitenden zeitlichen Aggregation nicht in den Zeitspalten der Delta-Zeitreihen-Ausgabereihen dargestellt werden können.
Wenn eine neue Zeitachsenkennzeichnung für eine Zeile berechnet wird, wird die neue Zeitachsenkennzeichnung durch ein map-Argument berechnet. Die Wertspalten für die Ausgabezeile werden durch ein map-Argument berechnet, wobei ein Aggregationsausdruck jede Wertspalte berechnet.
group_by
Fasst Zeilen nach zugeordneter Zeitachsenkennzeichnung und Zeitfenster zusammen.
Signatur:
Tabelle | group_by
RowToTSID,
[ RowSetToVal ]
Tabelle | group_by
RowToTSID,
lit-WindowDuration,
[ RowSetToVal ]
Tabelle | group_by
lit-WindowDuration,
[ RowSetToVal ]
Der Tabellenvorgang group_by
gruppiert Zeilen, indem die Zeitachsenkennzeichnungsspalten, Zeitspalten oder beides zugeordnet werden:
Wenn das Argument RowToTSID angegeben ist und das Argument WindowDuration nicht, wird die von diesem Zuordnungsargument erzeugte Zeitachsenkennzeichnung für jede Zeile in der Eingabetabelle berechnet und alle Zeilen werden gruppiert mit derselben Zeitachsenkennzeichnung und Endzeit.
In diesem Fall erfordert
group_by
eine ausgerichtete Tabelle als Eingabe, sodass verschiedene Zeitachsen Punkte mit derselben Endzeit haben. Wenn die Eingabetabelle nicht ausgerichtet ist, wird automatisch einalign
-Tabellenvorgang zur Ausrichtung eingefügt.Wenn das Argument WindowDuration angegeben wird und das Argument RowToTSID nicht, wird eine Gruppe von Zeilen für jede Zeitachsenkennzeichnung und jeden ausgerichteten Ausgabepunkt generiert. Die Zeilen in einer Gruppe sind alle Zeilen mit der angegebenen Zeitachsenkennzeichnung, deren Endzeit in ein Fenster zwischen der Ausgabezeit und dem Zeitpunkt liegt, der der frühere Zeitpunkt der Dauer ist.
Wenn das Argument Dauer einen
sliding
-Funktionsaufruf (z. B.sliding(1h)
) enthält, kann das Fenster vom Ausrichtungszeitraum abweichen. Andernfalls muss das Argument Dauer mit dem Ausrichtungszeitraum übereinstimmen. Der Ausdruckwindow()
stellt eine Dauer dar, die mit dem Ausrichtungszeitraum übereinstimmt. Wenn eine nicht gleitende Dauerexplizit angegeben wird, erzwingt er, dass der Zeitraum identisch ist, wenn kein Zeitraum explizit angegeben wurde.Wenn sowohl das RowToTSID- als auch das WindowDuration-Argument angegeben werden, wird für jede Zeile eine neue zugeordnete Zeitachsenkennzeichnung berechnet, und es wird eine Gruppe für alle Zeilen mit derselben zugeordneten Zeitachsenkennzeichnung erstellt, deren Endzeit in einem Fenster zwischen der Ausgabezeit und der Zeit liegt, die früher ist.
Es wird eine Ausgabezeile für jede Gruppe erzeugt, die die gemeinsame Zeitachsenkennzeichnung der Zeilen in der Gruppe sowie einen Zeitstempel hat, der der Ausgabezeitpunkt der Gruppe (WindowDuration wurde angegeben) oder die gemeinsame Endzeit der Zeilen in der Gruppe ist (WindowDuration wurde nicht gegeben). Die Wertspalten in der Gruppe werden vom Argument RowSetToVal erzeugt. Jeder Aggregationsausdruck wird auf die Zeilen in der Gruppe angewendet und das Ergebnis ist die Wertspalte der Ausgabezeile.
Einige aggregierte Ausdrücke (z. B. sum
) erzeugen Ausgabewertespalten mit der Art der Zeitachse Delta oder Gauge, je nach Art der Aggregation. Dies hängt davon ab, ob eine zeitliche Aggregation mit oder ohne Schieberegler durchgeführt wird. Zu diesem Zweck wird die Aggregation als temporäre Aggregation behandelt, wenn sie sowohl die zeitliche als auch die räumliche Aggregation kombiniert.
Ein group_by
-Tabellenvorgang erzeugt immer ausgerichtete Ausgabetabellen. Wenn das Argument WindowDuration nicht angegeben wird, muss die Eingabetabelle ausgerichtet sein und die Ausgabetabelle hat dann dieselbe Ausrichtung. Wird das Argument WindowDuration angegeben, wird nur an einem Ausrichtungszeitpunkt ein Ausgabepunkt erzeugt und die Ausgabetabelle ausgerichtet.
Wenn das Zuordnungsargument RowToTSID Werte oder Zeitspalten in seinen Ausdrücken enthält, kann es sein, dass Zeitachsen in der Eingabetabelle in mehrere Zeitachsen in der Ausgabetabelle aufgeteilt werden.
union_group_by
Aggregiert Zeilen aus mehreren Tabellen.
Signatur:
Table++ | union_group_by
RowToTSID,
[ RowSetToVal ]
Table++ | union_group_by
RowToTSID,
lit-WindowDuration,
[ RowSetToVal ]
Table++ | union_group_by
lit-WindowDuration,
[ RowSetToVal ]
Die Funktion union_group_by
aggregiert Eingabezeilen genau wie die Funktion group_by
, mit der Ausnahme, dass die Eingabezeilen aus mehreren Eingabetabellen angenommen werden.
Alle Eingabetabellen für union_group_by
müssen dieselben Spalten (gleicher Name, derselbe Typ und bei Wertspalten) dieselbe Zeitachse haben. Wenn ausgerichtete Eingabetabellen für die Argumente von "Union_group_by" (kein Argument WindowDuration) erforderlich sind, müssen alle Eingabetabellen auf denselben Punkt ausgerichtet sein.
unaligned_group_by
Aggregiert Zeilen nach zugeordneter Zeitachsenkennzeichnung ohne Ausrichtung.
Signatur:
Tabelle | unaligned_group_by
TSIDSel,
[ RowSetToVal ]
Der unaligned_group_by
-Tabellenvorgang hat dieselbe Funktion wie der Tabellenvorgang group_by
, erfordert jedoch nicht, dass die Eingabetabelle ausgerichtet ist.
Dadurch wird die von TSIDsel erstellte Zeitachsenkennzeichnung für jede Zeile in der Eingabetabelle berechnet und alle Zeilen mit derselben resultierenden Zeitachsenkennung und Endzeit gruppiert. Alle Zeilen in der Gruppe haben dieselbe Endzeit und sollten dieselbe Startzeit haben. Wenn zwei Zeilen in einer Gruppe eine unterschiedliche Startzeit haben, ist ein dynamischer Fehler auszugeben und eine der Zeilen willkürlich auszuwählen, um sie aus der Gruppe zu entfernen.
Der Vorgang erzeugt eine Ausgabezeile für jede Gruppe der obigen Zeilengruppen. Die Ausgabezeile enthält die Zeitachsenkennzeichnung, die durch das TSIDsel-Zuordnungsargument erzeugt wird, sowie dieselbe Endzeit und (falls vorhanden) Startzeit wie die Eingabezeilen in der Gruppe. Die vom Zuordnungsargument RowSetToVal erzeugten Wertspalten werden auf alle Zeilen in der Gruppe angewendet.
Für den Tabellenvorgang unaligned_group_by
muss die Eingabetabelle nicht ausgerichtet werden. Dies kann bedeuten, dass es unwahrscheinlich ist, dass mehrere Zeilen in einer Gruppe aggregiert sind. Der Vorgang setzt jedoch voraus, dass die in einer einzigen Ausgabezeitachse erfassten Zeilen (mit derselben Zeitachsenkennzeichnung) keine Endzeiten mit einer Dichte von mehr als einer Zeile pro Sekunde haben.
Union und Join
join
Natural Join von mehreren Tabellen
Signatur:
Table++ | join
Der Tabellenvorgang join
verwendet zwei oder mehr Eingabetabellen und kombiniert die Zeilen in dieser Tabelle zu Zeilen in einer einzigen Ausgabetabelle. Dabei wird ein natürlicher "innerer Join" für die Zeitachsenkennzeichnung und die Endzeitspalten der Eingabetabellen durchgeführt.
Vorausgesetzt werden ausgerichtete Eingabetabellen, die alle am selben Zeitraum ausgerichtet und Tabellen der Zeitachsenart Delta oder Gauge sein müssen.
Die Ausgabetabelle enthält folgende Elemente:
Eine Spalte für die Zeitachsenkennzeichnung für jede eindeutige Spalte für die Zeitachsenkennzeichnung in einer der Eingabetabellen. Jede Spalte hat denselben Typ wie die entsprechende Spalte in den Eingabetabellen. Wenn zwei Tabellen Zeitachsenkennzeichnungs-Spalten mit demselben Namen aber unterschiedlichen Typen haben, gilt dies als Fehler.
Eine Endzeitspalte. Wenn eine der Eingabetabellen eine Tabelle der Zeitachsenart Delta ist, weist die Ausgabetabelle ebenfalls diese Delta-Zeitachsenart auf und enthält eine Startzeitspalte.
Eine Wertespalte für jede Wertspalte der Eingabetabellen. Die Reihenfolge ist die Reihenfolge der Eingabetabellen in
grouped_table_op
, die sie erstellt haben. Es gilt als Fehler, wenn zwei verschiedene Eingabetabellen Wertspalten mit demselben Namen haben.
Der Join berücksichtigt jedes Tupel, das aus einer Zeile aus jeder Eingabetabelle besteht. Für jedes dieser Tupel, das die folgenden Bedingungen erfüllt, wird eine Ausgabezeile erstellt:
Für jeden Zeitachsenkennzeichnungsspaltennamen, der in einer der Eingabetabellen erscheint, enthält die entsprechende Spalte denselben Wert für jede Tupelzeile, die diese Spalte aufweist.
Jede Zeile im Tupel hat dieselbe Endzeit.
Jede Ausgabezeile hat folgende Spaltenwerte:
Jede Zeitachsenspalte hat denselben Wert wie jede Zeile im Tupel, die diese Spalte aufweist.
Jede Zeitspalte hat denselben Wert wie die Zeilen im Eingabetupel.
Jede Wertspalte hat denselben Wert wie die Zeile im Tupel, aus der die Wertspalte stammt.
outer_join
Äußeres Natural Join zweier Tabellen.
Signatur:
Table++ | outer_join
[ DefaultColumns ],
[ DefaultColumns ]
Der Tabellenvorgang outer_join
verwendet zwei Eingabetabellen und kombiniert die Zeilen in dieser Tabelle zu Zeilen in einer einzelnen Ausgabetabelle, indem ein natürlicher "äußerer Join" für die Zeitachsenkennzeichnung und die Endzeitspalten der Eingabetabellen ausgeführt wird.
Eines oder beide Argumente von DefaultColumns müssen angegeben werden. Entspricht jeder Eingabetabelle. Wenn diese für eine Tabelle angegeben ist, werden in dieser Tabelle Zeilen erstellt, wenn sie keine Zeile haben, die mit einer Zeile in der anderen Tabelle übereinstimmt. Die DefaultColumns geben die Wertspalten der erstellten Zeile an. Wenn für eine Tabelle eine DefaultColumnsangegeben wird, dann müssen die Zeitachsenkennzeichnungsspalten in dieser Tabelle eine Teilmenge der Zeitachsen der anderen Tabelle sein, und diese kann nur dann die Zeitachsenart Delta haben, wenn die andere Tabelle die Zeitachsenart Delta hat.
Vorausgesetzt werden ausgerichtete Eingabetabellen, die alle am selben Zeitraum ausgerichtet und Tabellen der Zeitachsenart Delta oder Gauge sein müssen.
Wie bei join
enthält die Ausgabetabelle die folgenden Elemente:
Eine Spalte für die Zeitachsenkennzeichnung für jede eindeutige Spalte für die Zeitachsenkennzeichnung in einer der Eingabetabellen. Jede Spalte hat denselben Typ wie die entsprechende Spalte in den Eingabetabellen. Wenn zwei Tabellen Zeitachsenkennzeichnungs-Spalten mit demselben Namen aber unterschiedlichen Typen haben, gilt dies als Fehler.
Eine Endzeitspalte. Wenn eine der Eingabetabellen eine Tabelle der Zeitachsenart Delta ist, weist die Ausgabetabelle ebenfalls diese Delta-Zeitachsenart auf und enthält eine Startzeitspalte.
Eine Wertespalte für jede Wertspalte der Eingabetabellen. Die Reihenfolge ist die Reihenfolge der Eingabetabellen in
grouped_table_op
, die sie erstellt haben. Es gilt als Fehler, wenn zwei verschiedene Eingabetabellen Wertspalten mit demselben Namen haben.
Der Join berücksichtigt jedes Paar, das aus einer Zeile aus jeder Eingabetabelle besteht. Für jedes dieser Paare, das die folgenden Bedingungen erfüllt, wird eine Ausgabezeile erstellt:
Für jede Zeitachsenkennzeichnung, die in einer der Eingabetabellen erscheint, hat diese Spalte für jede Zeile in dem Paar, das diese Spalte enthält, denselben Wert.
Jede Zeile im Paar hat dieselbe Endzeit.
Jede Ausgabezeile hat folgende Spaltenwerte:
Jede Zeitachsenspalte enthält den Wert für diese Spalte wie jede Zeile in dem Paar, das diese Spalte enthält.
Jede Zeitspalte hat denselben Wert wie die Zeilen im Eingabepaar.
Jede Wertspalte hat denselben Wert wie die Zeile im Paar, aus dem diese Wertspalte stammt.
Wenn eine Zeile in einer Tabelle kein Paar mit einer Zeile in der anderen Tabelle bilden kann und in der anderen Tabelle DefaultColumns angegeben ist, wird ein Paar mit der Zeile von der ersten Tabelle und eine Standardzeile für die andere Tabelle erstellt. Die Standardzeile wird so erstellt:
Jede Spalte für die Zeitachsenkennzeichnung und die Zeitspalten haben denselben Wert wie die entsprechende Spalte in der ersten Tabellenzeile.
Die Wertspalten der Standardzeile werden von den DefaultColumns
map
erstellt. Diesermap
muss einen Wert für jede Wertspalte in der Standardtabelle angeben.
union
Union mehrerer Tabellen.
Signatur:
Table++ | union
Der Tabellenvorgang union
nimmt zwei oder mehr Eingabetabellen in eine einzelne Ausgabetabelle auf, die Zeilen aus allen Eingabetabellen enthält.
Die Eingabetabellen müssen dieselben Spalten (gleicher Name, derselbe Typ und bei Wertspalten) die gleiche Zeitachsenart haben. Die erzeugte Ausgabetabelle hat die gleichen Spalten wie die Eingabetabellen. Die Ausgabetabelle wird nur ausgerichtet, wenn alle Eingabetabellen mit einem gemeinsamen Zeitraum ausgerichtet sind.
Es ist ein dynamischer Fehler, wenn Streams aus zwei oder mehr verschiedenen Tabellen dieselbe Zeitachsenkennzeichnung haben. In diesem Fall wird einer der Streams mit einer doppelten Zeitachsenkennzeichnung willkürlich für die Ausgabe ausgewählt und der Rest wird gelöscht.
Zeithorizont und Zeitraum
Der Zeitraum, der beim Ausrichten der Zeitachsen in der Tabelle verwendet werden soll, wird durch den Befehl every
festgelegt.
Die Abfrage erzeugt alle Ergebnisse als Punkte, deren Endzeit in einem Abfragefenster liegt. Die Dauer des Abfragefensters wird durch den Tabellenvorgang within
festgelegt, der eine beliebige Startzeit, Endzeit oder Dauer angeben kann.
every
Gibt den Zeitraum für die ausgerichtete Tabellenausgabe an
Signatur:
Table | every
lit-Duration
Der Tabellenvorgang every
erfordert eine Eingabetabelle, die auf einen Eingabezeitraum ausgerichtet ist, der durch das Argument Dauer angegeben wird. Hierfür gibt es folgende Möglichkeiten:
Wenn die Eingabetabelle nicht ausgerichtet ist, wird ein
align
-Vorgang mit einer geeigneten Ausrichtungsfunktion für die Eingabetabelle eingefügt. Das Argument Dauer für die Ausrichtungsfunktion ist der Standardwert für den angegebenen Zeitraum.Wenn die Tabelle ausgerichtet ist, aber keinen bestimmten erforderlichen Zeitraum hat, wird die Abfrage, die in den Tabellenvorgang
every
eingegeben wird, so angepasst, dass dieser Zeitraum erzeugt wird.Es gilt als Fehler, wenn die Eingabetabelle an einem bestimmten Zeitraum ausgerichtet ist, dieser jedoch von dem im Argument Duration angegebenen Zeitraum abweicht.
within
Gibt den Zeitraum der Abfrageausgabe an.
Signatur:
Table | within
lit-DateOrDuration,
[ lit-DateOrDuration ]
Der Tabellenvorgang within
gibt den Zeitraum der Abfrageausgabe an.
Dies geschieht durch die Angabe von einem oder zwei von drei Werten: die älteste (Anfangs-)Zeit des Fensters, die jüngste (End-)Zeit des Fensters oder die Dauer des Fensters.
Wenn eines der beiden Argumente von within
eine positive Dauer ist, wird die Breite des Fensters festgelegt. Es kann höchstens eines der Argumente eine positive Dauer sein.
Wenn das erste Argument ein Date ist, wird die Startzeit angegeben. Wenn das zweite Argument ein Date ist, wird die Endzeit angegeben. Wenn beide Date-Werte sind, muss der zweite Wert nach dem ersten liegen. Ein Date-Argument kann als Date-Literal oder mit einem negativen Dauer-Literal angegeben werden. Im späteren Fall ist die Zeit die angegebene Dauer vor der Ausgabe der Abfrage (jetzt).
Wenn nur ein Argument angegeben wird, verwendet das zweite Argument standardmäßig den Zeitpunkt, zu dem die Abfrage ausgegeben wurde (jetzt). In diesem Fall muss das erste Argument eine positive Dauer oder ein Date sein, das früher ist als der Zeitpunkt, zu dem die Abfrage ausgegeben wird.
graph_period
Gibt den bevorzugten Ausgabezeitraum zum Zeichnen von Zeitachsengrafiken an.
Signatur:
Table | graph_period
lit-Duration
Der Tabellenvorgang graph_period
transformiert seine Eingabetabelle, damit sie für die Darstellung als Grafik geeignet ist. Das Argument Duration gibt den Zeitraum zwischen Punkten an, die für die Grafik geeignet sind.
Dieser Vorgang wird automatisch in an den Metrics Explorer gesendete Abfragen eingefügt, wenn der Nutzer ihn nicht explizit der Abfrage hinzugefügt hat. In beiden Fällen legt Metrics Explorer den Wert des Arguments Dauer so fest, dass er für das tatsächliche Zeitfenster des Diagramms geeignet ist. Das explizite Hinzufügen von graph_period
als Teil einer Abfrage ist nur sinnvoll, wenn die Abfrage der API übergeben wird.
Der Vorgang graph_period
vergleicht das Argument Dauer mit dem Zeitraum der Eingabetabelle und führt einen der folgenden Schritte aus:
Wenn der Zeitraum der Eingabetabelle weniger als die Hälfte des Arguments Dauer beträgt, fungiert die
graph_period
-Operation als ein zeitlicher Reducer, dessen Fenster und Ausgabezeitraum durch das Argument Dauer angegeben werden. Jede Wertspalte in der Eingabetabelle wird ihrem Typ entsprechend aggregiert.Für eine Wertspalte des numerischen Typs werden drei Spalten in die Ausgabetabelle eingefügt. Diese werden erzeugt, indem die Eingabespalte mit den Aggregatoren
min
,mean
undmax
aggregiert wird. Die Namen der Ausgabespalten sind der Name der Eingabespalte mit der Ergänzung.min
,.mean
bzw..max
.Für eine Wertspalte des Typs Bool werden drei Spalten in die Ausgabetabelle eingefügt. Diese werden erzeugt, indem die Eingabespalte mit den Aggregatoren
min
,mean
undmax
generiert werden. Die Namen der Ausgabespalten sind der Name der Eingabespalte mit der Ergänzung.all_true
,.mean
bzw..any_true
.Für eine Spalte vom Typ Distribution wird eine einzelne Spalte mit demselben Namen durch die
distribution
-Aggregation erstellt, um die Gesamtheit aller Verteilungseingabewerte zu kombinieren, die in jedes Grafikzeitfenster fallen.
Wenn der Eingabetabellenzeitraum mehr als doppelt so lang ist wie das Argument Dauer, werden für jeden Punkt in der Eingabetabelle Kopien für den Zeitpunkt erstellt, der für den Ausgabezeitraum erforderlich ist.
Wenn der Eingabetabellenzeitraum weniger als doppelt so lang ist wie das Argument Dauer und mehr als halb so lang wie das Argument Dauer, wird die Eingabetabelle einfach in die Ausgabe kopiert.
Beachten Sie, dass das Verhalten einer Eingabetabelle nicht definiert ist, wenn sie mehr als eine Wertespalte oder eine String-Wertspalte hat. Der Metrics Explorer zeigt möglicherweise nur eine einzelne Spalte an oder gibt einen Fehler zurück, wenn keine Spalte angezeigt werden kann.
window
Gibt das Fenster für Ausrichtungsvorgänge an.
Signatur:
Table | window
lit-Duration
Der window
-Tabellenvorgang erfordert eine Eingabetabelle, die durch eine Ausrichtfunktion ausgerichtet wird, deren Fenster-Dauer-Argument das gleiche ist wie das auf dieser window
-Tabellenvorgang angegebene Dauer-Argument. Dies wird auf eine der folgenden Arten verarbeitet:
Wenn die Eingabetabelle nicht ausgerichtet ist, wird ein
align
-Vorgang mit einer entsprechenden Ausrichtungsfunktion für die Eingabetabelle eingefügt. Das Argument Dauer für die Ausrichtungsfunktion wird durch das Argument Dauer dieses Tabellenvorgangs vonwindow
angegeben.Wenn die Tabelle ausgerichtet ist, aber der Tabellenvorgang, der sie ausgerichtet hat, kein bestimmtes Ausrichtungsfenster hat, wird die Dauer aus diesem
window
-Argument als Ausrichtungsfensterargument verwendet.Es ist ein Fehler, wenn die Eingabetabelle ausgerichtet ist und der ausgerichtete Tabellenvorgang eine Fenster-Dauer angibt, die sich vom Argument dieses
window
-Tabellenvorgangs unterscheidet.
Benachrichtigungen
Benachrichtigungsvorgänge dienen dazu, Benachrichtigungsrichtlinien zu definieren. Verwenden Sie diese Vorgänge nur zur Installation von Benachrichtigungen, nicht als Teil einer Abfrage.
Letztendlich bieten diese Vorgänge Möglichkeiten zum Erstellen von Abfragen, die zu einer Tabelle mit zwei Wertspalten führen: Eine boolesche, die angibt, ob die Benachrichtigung ausgelöst werden soll und ein Wert desselben Typs wie die Eingabe, der den aktuellsten Wert der Eingabe angibt.
condition
Der Eingabetabelle eine boolesche Bedingungsspalte hinzufügen.
Signatur:
Table | condition
Bool
Der Tabellenvorgang condition
fügt jeder Zeile der Eingabetabelle eine boolesche Wertspalte hinzu, um die Ausgabetabelle zu erstellen. Der Wert dieser Spalte ist der Wert des Arguments Bool, der auf die Zeile angewendet wird.
Kann zum Erstellen einer Benachrichtigungsabfrage verwendet werden. Die Ausgabetabelle enthält eine boolesche Spalte, die angibt, dass die Benachrichtigungsbedingung erfüllt ist. Über die Benachrichtigungseinrichtung wird festgelegt, ob und wann eine Benachrichtigung ausgelöst oder beendet werden soll.
Für den condition
-Vorgang muss die Eingabetabelle ausgerichtet und von einer Abfrage mit einem expliziten Ausrichtungsfenster generiert werden. Dies wird durch ein Fensterargument für einen Ausrichtungsvorgang (z.B. | align rate(10m)
) oder einen window
-Tabellenvorgang bereitgestellt.
Beispiele:
fetch gce_instance :: compute.googleapis.com/instance/cpu/usage_time
| window 5m
| condition val() < .5
Dadurch wird eine Tabelle mit zwei Wertspalten erstellt. Die erste Spalte ist eine Bool-Spalte, die wahr ist, wenn die usage_time
-Wertspalte der Eingabetabelle kleiner als .5
ist. Die zweite Spalte ist eine Kopie der Wertespalte usage_time
aus der Eingabe.
absent_for
Bedingung für das Fehlen einer Eingabe erstellen.
Signatur:
Table | absent_for
lit-Duration
Der Tabellenvorgang absent_for
generiert eine Tabelle mit zwei Wertspalten, active
und signal
. Die Spalte active
ist wahr, wenn Daten in der Tabelleneingabe fehlen, und andernfalls "false". Dies ist hilfreich, um eine Bedingungsabfrage zu erstellen, die bei einer fehlenden Benachrichtigung verwendet werden soll.
Für jede Eingabezeitachse erstellt absent_for
eine ausgerichtete Ausgabezeitachse mit derselben Zeitachsenkennzeichnung wie die Eingabe. Der Ausrichtungszeitraum wird entweder durch einen folgenden every
oder den Standardzeitraum angegeben.
Das Argument Dauer gibt ein Zeitlimit an. Die Spalte active
für einen Ausgabepunkt ist falsch, wenn sich in der Eingabezeitachse ein Punkt innerhalb dieses Zeitlimits vor dem Zeitpunkt des Ausgabepunkts befindet. Wenn kein solcher Eingabepunkt vorhanden ist, gilt die Spalte active
"true". Dies gibt an, dass die Eingabe innerhalb des Zeitlimits fehlt.
Wenn die Eingabetabelle Werte enthält, enthält die Spalte signal
den Wert der ersten Wertspalte des letzten Eingabepunkts (innerhalb des Limits oder nicht). Wenn die Eingabetabelle keine Wertspalten enthält, ist die Spalte signal
im Ausgabepunkt eine Ganzzahl, die die Anzahl der Minuten seit dem letzten Eingabepunkt angibt.
Für jeden Ausgabezeitpunkt sucht der Tabellenvorgang absent_for
24 Stunden vor diesem Zeitpunkt nach einem Eingabepunkt. Wenn innerhalb der letzten 24 Stunden kein Eingabepunkt vorhanden ist, wird für diese Zeit kein Punkt ausgegeben.
Beispiele:
fetch gce_instance :: compute.googleapis.com/instance/cpu/usage_time
| absent_for 8h
Für jede usage_time
aus einer virtuellen Maschine (gce_instance
) erzeugt das absent_for
eine ausgerichtete Zeitreihe, deren Ausgabepunkte eine active
-Spalte haben, die wahr ist, wenn es einen Eingabepunkt innerhalb der letzten 24 Stunden, aber keine Punkte innerhalb der letzten 8 Stunden (8h
) gibt. Dies ist eine geeignete Alerting-Abfrage.
fetch gce_instance :: compute.googleapis.com/instance/cpu/usage_time
| value [] | absent_for 8h
Dies ist ähnlich wie im vorherigen Beispiel, aber der | value []
entfernt die Wertespalten von der Eingabe zur absent_for
-Operation, sodass die signal
auf die Zeit (in Minuten) seit dem letzten Eingabepunkt eingestellt wird.
Sonstiges
ident
Identitätstabellenvorgang: Keine Änderung an der Eingabetabelle
Signatur:
Table | ident
Der Vorgang der ident
-Tabelle erzeugt keine Eingabetabelle.
Beispiel:
fetch gce_instance :: compute.googleapis.com/instance/cpu/usage_time |
{ ident ; group_by [zone] } |
join | value [zone_fraction: val(0) / val(1)]
Für jede Zeile in der angegeben Tabelle wird der Anteil ihres Werts im Verhältnis zur Gesamtsumme dieses Werts aus allen Instanzen in der Zone berechnet, in der sie sich befindet.
ratio
Das Verhältnis der Wertspalten von zwei ausgerichteten Eingabetabellen berechnen.
Signatur:
Table++ | ratio
Der Tabellenvorgang ratio
verwendet zwei ausgerichtete Eingabetabellen, die Eingabe für die Zählertabelle bzw. die Eingabetabellentabelle. Beide Tabelleneingaben sollten genau eine Wertspalte eines numerischen Typs enthalten.
Die Spalten für die Zeitachsenkennzeichnung der Tabelle müssen eine Teilmenge der Spalten für die Zeitachsenkennzeichnung der Zählertabelle sein. Wenn beide Tabellen die gleichen Zeitachsen-ID-Spalten (Name und Typ) haben, wird für die Zählung des Standardwerts null verwendet.
filter_ratio
Berechnet das Verhältnis zweier gefilterter Summen der Eingabewertspalte.
Signatur:
Table | filter_ratio
Bool,
[ Bool ]
Der Tabellenvorgang filter_ratio
verwendet eine Eingabetabelle mit genau einer Wertespalte eines numerischen Typs. Wenn die Eingabetabelle nicht ausgerichtet ist, wird ein align
-Tabellenvorgang automatisch eingefügt, um die Ausrichtung durchzuführen.
Der filter_ratio
-Vorgang aggregiert alle Eingabezeilen zu einem bestimmten Zeitstempel, berechnet eine Zähler- und Nennersumme und erstellt eine Zeitachse mit dem Verhältnis dieser Summen zu jedem Zeitstempel. Das erste Bool-Argument steuert das, was in die Zählersumme fließt, und das zweite Bool-Argument steuert das, was in die Nennersumme eingeht. Das zweite Argument ist optional und wird standardmäßig auf true
gesetzt, wenn es nicht angegeben ist.
Die Bool-Argumente werden für jede Zeile ausgewertet. Wenn "true", wird die Wertspalte für diese Zeile in der Zähler- (erster Bool) oder Nennersumme (zweiter Bool) aufgenommen.
filter_ratio_by
Berechnet ein gruppiertes Verhältnis von zwei gefilterten Summen der Eingabewertspalte.
Signatur:
Table | filter_ratio_by
RowToTSID,
Bool,
[ Bool ]
Der Tabellenvorgang filter_ratio_by
nimmt eine Eingabetabelle an, die genau eine Wertspalte eines numerischen Typs enthält. Wenn die Eingabetabelle nicht ausgerichtet ist, wird ein align
-Tabellenvorgang automatisch eingefügt, um die Ausrichtung durchzuführen.
Der filter_ratio_by
-Vorgang gruppiert Zeilen, die dieselbe Zeitachsenkennzeichnung haben, die vom Argument RowToTSID berechnet wurde. Für jede Gruppe wird eine Zähler- und eine Nennersumme berechnet und eine Zeitachse mit dem Verhältnis dieser Summen zu jedem Zeitstempel erstellt. Das erste Bool-Argument steuert das, was in die Zählersumme fließt, und das zweite Bool-Argument steuert das, was in die Nennersumme eingeht. Das zweite Argument ist optional und wird standardmäßig auf true
gesetzt, wenn es nicht angegeben ist.
Die Bool-Argumente werden für jede Zeile ausgewertet. Wenn "true", wird die Wertspalte für diese Zeile in der Zähler- (erster Bool) oder Nennersumme (zweiter Bool) aufgenommen.
Für jede Gruppe wird eine Zeitachse berechnet, wobei die Zeitachsen-ID berechnet wird, die vom Argument "RowToTSID" berechnet wurde.
Functions
In diesem Abschnitt werden alle Funktionen beschrieben, die in Ausdrücken (expr
) in der Monitoring-Abfragesprache verwendet werden können.
- Eingabezeilenspalten
val
Der Wert einer Wertspalte im Eingabepunkt (Zeile).end
Die Endzeit des Eingabepunkts (Zeile).start
Die Startzeit des Eingabepunkts (Zeile).older
Ein Wert aus dem nächsten früheren Punkt (Zeile) in einer Zeitachse.adjacent_delta
Die Wertänderung zwischen einem Eingabepunkt und dem nächst früheren Punkt.adjacent_rate
Die Änderungsrate zwischen den Eingaben und den nächsten früheren Punkten (Zeilen).hash_tsid
Gibt einen Hash der Spalten der Zeitachsenkennzeichnung zurück.
- Logisch
not
Die logische Negation eines booleschen Werts.and
Das logische "und" von zwei booleschen Werten.or
Das logische "oder" von zwei booleschen Werten.true
Der boolesche Wert "wahr".false
Der boolesche Wert "false"has
"True", wenn ein Mengenargument einen bestimmten Wert enthält.has_value
"True", wenn ein Argumentausdruck einen Wert berechnet.if
Ein Wert, der auf Basis einer Bedingung aus zwei Werten ausgewählt wirdor_else
Ein Wert oder, wenn es sich nicht um einen Wert handelt, ein anderer Wert.
- Vergleich
- Arithmetisch
add
Die Summe zweier Zahlen.sub
Die Differenz zweier Zahlen.mul
Das Produkt zweier Zahlen.div
Das Verhältnis zweier Zahlen.int_div
Der Quotient aus der Teilung zweier Ganzzahlen.abs
Absoluter Wert.neg
Der negative Wert einer Zahl.pos
Identität für numerische Eingaben.rem
Der Rest der Division von zwei Ganzzahlen.
- Math
- String
concatenate
String-Verkettung.string_to_double
String in Double umwandeln.string_to_int64
String in Int umwandeln.ascii_to_lower
ASCII-Großbuchstaben in Kleinbuchstaben ändern.ascii_to_upper
ASCII-Kleinbuchstaben in Großbuchstaben ändern.utf8_normalize
Unicode-String, der sich für den Vergleich der Groß-/Kleinschreibung eignet.
- Reguläre Ausdrücke
re_full_match
Wahr, wenn ein regulärer Ausdruck mit einem Stringwert teilweise übereinstimmt.re_partial_match
Wahr, wenn ein regulärer Ausdruck mit einem Stringwert teilweise übereinstimmt.re_extract
Werte extrahieren, die mit einem regulären Ausdruck in einem anderen String übereinstimmen.re_replace
Ersetzen Sie die erste Übereinstimmung eines regulären Ausdrucks in einem anderen String.re_global_replace
Ersetzt alle Übereinstimmungen eines regulären Ausdrucks in einem anderen String.
- Aggregation
sum
Die Summe einer Gruppe numerischer Werte.distribution
Eine Verteilung aus einer Gruppe von numerischen Werten oder Verteilungswerten.count
Die Anzahl der Werte in einer Gruppe von Werten.row_count
Die Anzahl der gefundenen Eingabezeilen.count_true
Die Anzahl der wahren Werte in einer Gruppe boolescher Werte.min
Minimum einer Gruppe numerischer Werte.max
: Das Maximum einer Gruppe numerischer Wertediameter
Das Maximum plus das Minimum einer Gruppe numerischer Werte.mean
Der Mittelwert einer Gruppe numerischer Werte.stddev
Die Standardabweichung einer Gruppe von Werten.variance
Die Varianz einer Gruppe von numerischen Werten.covariance
Die Kovarianz einer Gruppe von Wertenpaaren.median
Der Mittelwert einer Gruppe numerischer Werte oder Verteilungswerte.percentile
Ein Perzentil einer Gruppe von numerischen Werten oder Verteilungswerten.fraction_less_than
Der Bruchteil einer Gruppe von Werten, die kleiner als ein fester Wert sind.fraction_true
Der Anteil einer Gruppe boolescher Werte, die wahr sind.any_true
Die Disjunktion einer Gruppe von booleschen Werten.all_true
Die Verknüpfung einer Gruppe von booleschen Werten.pick_any
Der Wert eines beliebigen Elements einer Gruppe von Werten (beliebig gewählt).singleton
Der Wert des Elements einer Gruppe von Werten mit nur einem Element.unique
Der gemeinsame Wert einer Gruppe von Werten (die alle gleich sein müssen).aggregate
Der Standardaggregatwert aus einer Gruppe von Werten eines beliebigen Typsweighted_distribution
Eine Verteilung aus einer Gruppe gewichteter Werte.
- Ausrichten
rate
Die Änderungsrate zu ausgerichteten Zeitpunkten berechnen.delta
Wertänderung zu ausgerichteten Zeitpunkten berechnen.any_true_aligner
Richten Sie eine Bool-Zeitachse aus, indem Sie einen echten Wert in einem Fenster finden.count_true_aligner
Richten Sie eine Bool-Zeitachse aus, indem Sie die wahren Werte in einem Fenster zählen.delta_gauge
Wertänderung zu ausgerichteten Zeitpunkten als Gauge Zeitachse berechnen.fraction_true_aligner
Richten Sie eine Bool-Zeitachse mit dem Anteil der tatsächlichen Werte in einem Fenster aus.int_mean_aligner
Führen Sie die Ausrichtung durch, indem Sie den Mittelwert von Int-Werten in einem Fenster ermitteln.interpolate
Interpolierte Werte zu ausgerichteten Zeitpunkten berechnen.mean_aligner
Gleichen Sie den Mittelwert der Werte in einem Fenster ab.next_older
Angleichung der Zeitpunkte durch Übergang von einer früheren zu einer späteren Zeit.next_younger
Angleichung der Zeitpunkte durch Übergang von einer späteren zu einer früheren Zeit.
- Einheiten bearbeiten
scale
Skaliert einen Wert auf eine andere Maßeinheit.cast_units
Setzt die Maßeinheit eines Werts fest.
- Regelmäßiges Fenster
- Verteilung
count_from
Die Anzahl der Werte in einem Verteilungswert.sum_from
Die Summe der Werte in einem Verteilungswert.mean_from
Der Mittelwert der Werte in einem Verteilungswert.stddev_from
Die Standardabweichung der Werte in einem Verteilungswert.variance_from
Die Varianz der Werte in einem Verteilungswert.median_from
Der Mittelwert der Werte in einem Verteilungswert.percentile_from
Ein Perzentil der Werte in einem Verteilungswert.fraction_less_than_from
Der Bruchteil der Werte in einer Verteilung, die kleiner als ein fester Wert sindbounded_percentile_from
Ein Perzentil der Werte innerhalb einer Grenze in einem Verteilungswert.rebucket
Der in eine neue Bucket-Spezifikation konvertierte Verteilungswert.
- Bucket-Spezifizierer
powers_of
Eine Bucket-Spezifikation mit exponentiell zunehmenden Bucket-Grenzen.fixed_width
Eine Bucket-Spezifikation mit gleich großen Buckets.custom
Eine Bucket-Spezifikation aus einer Liste von Bucket-Grenzen.num_buckets
Legt die Anzahl der Buckets in einer Bucket-Spezifikation fest.bounds
Untergrenze des ersten Buckets und Obergrenze des letzten Buckets festlegen.lower
Legt die Untergrenze des ersten Buckets in einer Bucket-Spezifikation fest.
- Sonstiges
cast_double
Int-Wert in Double umwandeln.cast_gauge
Einen kumulativen oder Delta-Zeitachsenwert in Gauge umwandeln.within
Gibt das Fenster der Sortierwertberechnung an.
Eingabezeilenspalten
Die Ausdrücke in einer Abfrage wirken sich auf die Spalten einer Eingabezeile aus. Auf eine Spalte wird normalerweise durch Angabe ihres Namens zugegriffen. Die Funktionen in diesem Abschnitt bieten alternative Möglichkeiten für den Zugriff auf Spalten.
Die Zeitspalten haben keine Spaltennamen und werden über die Funktionen start
und end
aufgerufen.
Die Wertspalten können über die Funktion val
nach Name oder Position aufgerufen werden.
Die Funktion older
gewährt Zugriff auf eine Spalte in der nächstfrüheren Zeile in einer Zeitachse.
val
Der Wert einer Wertspalte im Eingabepunkt (Zeile).
Signatur:
ImplicitRowInput val(
[ lit-Int ] )
→
InputType (implizite Reiheneingabe)
Die Funktion val
bietet eine Alternative zur Verwendung des Spaltennamens beim Zugriff auf die Wertspalten einer Eingabezeile. Das Argument Int (Standardwert 0) indexiert den geordneten Satz von Wertspalten (beginnend mit 0 für die erste Wertspalte) und gibt den Wert der Spalte mit dem indexierten Wert zurück. Dies ist der gleiche Wert, der sich aus der Verwendung des Spaltennamens ergibt.
Es ist ein statischer Fehler, wenn die Funktion val
einen Index angibt, der negativ oder gleich oder größer oder gleich der Anzahl der Wertspalten ist.
end
Die Endzeit des Eingabepunkts (Zeile).
Signatur:
ImplicitRowInput end(
)
→
Date.Gauge (implizite Reiheneingabe)
Die Funktion end
gibt den Datumswert in der Endzeitspalte der aktuellen Eingabezeile zurück.
start
Die Startzeit des Eingabepunkts (Zeile).
Signatur:
ImplicitRowInput start(
)
→
Date.Gauge (implizite Reiheneingabe)
Die Funktion start
gibt den Datumswert in der Startzeitspalte der aktuellen Eingabezeile zurück. Wenn die Zeile keine Startzeit hat, da sie nur Gauge-Daten enthält, gibt die Startzeit no-value zurück.
older
Ein Wert aus dem nächst früheren Punkt (Zeile) in einer Zeitachse.
Signatur:
older(
ColumnValue.CumulativeOK )
→
FirstArgType.FirstArgKind
older(
Date )
→ Date.FirstArgKind
Das Argument für older
muss ein Spaltenname oder eine Funktion sein, die einen Spaltenwert angibt (val
, end
, start
). Der zurückgegebene Wert ist der Wert dieser Spalte in der Zeile, die die nächstfrühere Zeile der Eingabezeile derselben Zeitachse ist. Wenn eine solche vorherige Zeile nicht in derselben Zeitachse vorhanden ist, gibt older
den Wert no-value zurück.
Die Spalte, auf die verwiesen wird, kann eine Wert-, Zeit- oder Zeitachsenkennzeichnungsspalte sein. Wenn es sich um eine Zeitachsenkennzeichnungs-Spalte handelt, wird older
den gleiche Wert zurückgegeben wie der Argumentausdruck, auch wenn in derselben Zeitachse keine vorherige Zeile vorhanden ist.
adjacent_delta
Die Wertänderung zwischen einem Eingabepunkt und dem nächst früheren Punkt.
Signatur:
ImplicitRowInput adjacent_delta(
)
→
InputType (implizite Reiheneingabe)
Die Funktion adjacent_delta
wird für Tabellen mit einer einzelnen numerischen Spalte (Int oder Double) oder Verteilungswertspalte verwendet.
Bei Anwendung auf eine Gauge-Zeitachse gibt adjacent_delta
die Differenz zwischen dem Wert der Wertspalte in der aktuellen Eingabezeile und der Wertspalte in der nächstfrüheren Zeile derselben Zeitachse zurück, falls vorhanden. Wenn es keine nächstfrühere Zeile in derselben Zeitachse gibt, gibt adjacent_delta
den Wert no-value zurück. Das Ergebnis hat den Zeitachsentyp Gauge.
Bei Anwendung auf eine Delta-Zeitachse gibt adjacent_delta
den Wert der Wertspalte zurück, der die Zeitachse Delta bleibt. Jeder Ausgabepunkt hat denselben Wert, dieselbe Startzeit und das Ende wie der Eingabepunkt, von dem er generiert wurde.
Obwohl kumulative Zeitachsen nur selten in Abfragen verwendet werden, gibt adjacent_delta
bei der Anwendung auf eine kumulative Zeitachse einen von zwei Werten zurück:
Wenn die Startzeit des Eingabepunkts vor der Endzeit des nächsten früheren Punkts liegt, gibt
adjacent_delta
den Wert des Eingabepunkts abzüglich des Werts des nächsten früheren Punkts zurück.Wenn die Startzeit des Eingabepunkts später als die Endzeit des nächsten früheren Punkts ist, gibt
adjacent_delta
den Wert der Eingabepunkte zurück, d. h., der Wert 0 wird zur Startzeit subtrahiert.
Die resultierende Zeitachse hat eine Delta-Zeitachsenart und jeder Punkt ist eine Startzeit, die die ursprüngliche Startzeit oder die Endzeit des nächsten früheren Eingabepunkts ist, je nachdem, welcher Datentyp später ist.
adjacent_rate
Die Änderungsrate zwischen der Eingabe und den nächsten früheren Punkten (Zeilen).
Signatur:
ImplicitRowInput adjacent_rate(
)
→
Double.Gauge (implizite Reiheneingabe)
Die Funktion adjacent_rate
wird für Tabellen mit einer einzelnen numerischen Spalte (Int oder Double) oder Verteilungswertspalte verwendet.
Bei Anwendung auf eine Gauge- oder Cumulative-Zeitachse gibt adjacent_rate
die Änderungsrate zwischen dem Wert der Wertspalte in der aktuellen Eingabezeile zurück und der Wertspalte in der nächstfrüheren Zeile derselben Zeitachse, falls vorhanden. Dies ist die Differenz zwischen den Werten geteilt durch die Differenz zwischen der Endzeit der beiden Zeilen. Wenn es keine vorherige Zeile in derselben Zeitachse gibt, gibt adjacent_rate
no-value zurück. Das Ergebnis hat den Zeitachsentyp Gauge.
Bei Anwendung auf eine Delta-Zeitachse gibt adjacent_rate
die Wertspalte der aktuellen Eingabezeile geteilt durch die Differenz zwischen der Startzeit und der Endzeit dieser Zeile zurück.
hash_tsid
Gibt einen Hash der Spalten der Zeitachsenkennzeichnung zurück.
Signatur:
ImplicitRowInput hash_tsid(
[ lit-Int ] )
→ Int (implizite Zeileneingabe)
Die Funktion hash_tsid
gibt einen Hash der Werte in den Feldern der Zeitachsenkennzeichnung der aktuellen Eingabezeile zurück. Wenn ein Argument angegeben ist, wird es als See-Hash verwendet.
Logisch
not
Die logische Negation eines booleschen Werts.
Signatur:
not(
Bool )
→ Bool
Die not
-Funktion verwendet einen booleschen Wert und gibt "true" zurück, wenn dieses Argument falsch ist, und "false", wenn dieses Argument wahr ist. Wenn das Eingabeargument no-value ist, ist dies das Ergebnis.
and
Das logische "and" von zwei booleschen Werten.
Signatur:
and(
Bool,
Bool )
→ Bool
Die Funktion and
gibt "true" zurück, wenn beide Eingaben wahr sind, und andernfalls "false". Wenn eine der Eingaben no-value ist, gibt and
immer no-value zurück.
or
Das logische "oder" von zwei booleschen Werten.
Signatur:
or(
Bool,
Bool )
→ Bool
Die Funktion or
gibt "true" zurück, wenn eine der Eingaben wahr sind, und andernfalls "false". Wenn eine der Eingaben no-value ist, gibt or
immer no-value zurück.
true
Der boolesche Wert "true".
Signatur:
ImplicitRowInput true(
)
→
lit-Bool (implizite Reiheneingabe)
Diese Funktion gibt den Literal-Bool-Wert true
zurück.
false
Der boolesche Wert "false".
Signatur:
ImplicitRowInput false(
)
→
lit-Bool (implizite Reiheneingabe)
Diese Funktion gibt den Literalwert Bool false
zurück.
has
"True", wenn ein Set-Argument einen bestimmten Wert enthält.
Signatur:
has(
Set,
lit-ColumnValue )
→ Bool
Die Funktion has
gibt "true" zurück, wenn der erste Argumentsatz das zweite Argument als Element enthält.
has_value
"True", wenn ein Argumentausdruck einen Wert berechnet.
Signatur:
has_value(
ColumnValue )
→ Bool
Die has_value
-Funktion gibt "true" zurück, wenn ihr Argument einen Wert ergibt, und "false", wenn sie als no-value ausgewertet wird.
if
Ein Wert, der aus zwei Werten ausgewählt wurde.
Signatur:
if(
Bool,
ColumnValue.Delta,
ColumnValue.Delta(gleich) )
→
LastArgType.Delta
if(
Bool,
ColumnValue,
ColumnValue(gleich) )
→ LastArgType
Die Funktion if
gibt ihr zweites oder drittes Argument zurück, je nach Wert (true
oder false
) des ersten Arguments.
if
wertet das erste Bool-Argument aus. Wenn es no-value ist, ist das Ergebnis kein Wert. Wenn das erste Argument wahr ist, wird das zweite Argument zurückgegeben. Wenn das erste Argument falsch ist, wird das dritte Argument zurückgegeben.
Entweder kann das zweite oder dritte Argument kein Wert sein, aber das Ergebnis von if
ist nur dann wertlos, wenn das Argument Bool kein Wert ist oder das zurückgegebene Argument kein Wert ist. Das nicht ausgewählte Argument kann "no-value" sein, ohne dass das Ergebnis "no-value" lautet.
Wenn die zweiten und dritten Argumente von if
numerisch sind und eins der Argumente eine Einheit hat, müssen beide Argumente Einheiten haben. Wenn die Argumente Einheiten haben, müssen sie entweder äquivalent sein oder die hier aufgeführten Regeln müssen das Skalieren eines der Argumente erlauben, bevor if
angewendet wird, damit die Einheiten einander entsprechen.
Es gilt als Fehler, wenn nur ein Argument Einheiten enthält oder beide Argumente Einheiten haben, die nicht vereinheitlicht werden können.
Das Ergebnis der if
hat die Einheit des zweiten Arguments, möglicherweise skaliert.
or_else
Ein Wert oder, falls es sich um keinen Wert handelt, ein anderer Wert.
Signatur:
or_else(
ColumnValue,
ColumnValue(same) )
→ LastArgType
Die Funktion or_else
gibt den Wert des ersten Arguments zurück, es sei denn, es ist no-value. In diesem Fall wird der Wert des zweiten Arguments zurückgegeben.
Die Funktion or_else
gibt nur dann no-value zurück, wenn beide Argumente no-value sind.
Wenn die Argumente von or_else
numerisch sind und eines der Argumente Einheiten hat, müssen beide Argumente Einheiten haben. Wenn die Argumente Einheiten haben, müssen sie entweder äquivalent sein oder die hier aufgeführten Regeln müssen das Skalieren eines der Argumente erlauben, bevor or_else
angewendet wird, damit die Einheiten einander entsprechen.
Es gilt als Fehler, wenn nur ein Argument Einheiten enthält oder beide Argumente Einheiten haben, die nicht vereinheitlicht werden können.
Das Ergebnis von or_else
hat die Einheit des ersten Arguments, möglicherweise skaliert.
Vergleich
Die Vergleichsoperatoren vergleichen zwei Werte desselben Typs oder zwei numerische Werte (Int oder *Double) und geben einen Bool-Wert zurück. Im Gegensatz zu den meisten Funktionen geben Vergleichsoperatoren nie no-value zurück. Wenn eine Eingabe no value ist, wird davon ausgegangen, dass sie ein bestimmter Wert ist, der größer als jeder andere Wert ist.
eq
Gleich.
Signatur:
eq(
Num,
Num )
→ Bool
eq(
Comparable,
Comparable(same) )
→ Bool
Dadurch wird das erste Argument Comparable mit dem zweiten Argument Comparable verglichen und true
zurückgegeben, wenn sie identisch sind, und false
, wenn sie nicht identisch sind. Wenn ein Argument Int und das andere Double ist, wird das Argument Int vor dem Vergleich in einen Double-Wert konvertiert.
Wenn eine Eingabe no-value ist, wird der Vergleich durchgeführt und ein Bool-Argument zurückgegeben, true
, wenn beide Werte no value sind, und ansonsten false
. (Dadurch wird "no-value" als gleichwertig behandelt.)
Zum Vergleich von numerischen Argumenten, wenn eines der Argumente Einheiten enthalten, müssen beide Argumente Einheiten enthalten und die Einheiten müssen äquivalent sein. Das Ergebnis, da es Typ Bool ist, hat keine Einheiten.
Wenn die Argumente für eq
nicht identische Einheiten mit derselben Dimension haben, wird die Einheit automatisch für ein Argument automatisch skaliert vielleicht, sodass die Einheiten beider Argumente äquivalent sind.
Wenn die Argumente von eq
numerisch sind und eines der Argumente Einheiten hat, müssen beide Argumente Einheiten haben. Wenn die Argumente Einheiten haben, müssen sie entweder äquivalent sein oder die hier aufgeführten Regeln müssen das Skalieren eines der Argumente erlauben, bevor eq
angewendet wird, damit die Einheiten einander entsprechen.
Es gilt als Fehler, wenn nur ein Argument Einheiten enthält oder beide Argumente Einheiten haben, die nicht vereinheitlicht werden können.
Das Ergebnis von "eq" ist vom Typ Bool und hat keine Einheiten.
Ein Vergleich zwischen der Spalte resource.project_id
und einer literalen Zeichenfolge hat eine besondere Behandlung, um den Unterschied zwischen Projektnummern und Projektnamen zu behandeln, wie unter Abgleich der Spalte resource.project_id
beschrieben.
ne
Ungleich.
Signatur:
ne(
Num,
Num )
→ Bool
ne(
Comparable,
Comparable(same) )
→ Bool
Dadurch wird das erste Argument Comparable mit dem zweiten Argument Comparable verglichen und false
zurückgegeben, wenn sie identisch sind, und true
, wenn sie nicht identisch sind. Wenn ein Argument Int und das andere Double ist, wird das Argument Int vor dem Vergleich in einen Double-Wert konvertiert.
Wenn eine Eingabe no-value ist, wird der Vergleich durchgeführt und ein Bool-Argument zurückgegeben, false
, wenn beide Werte no value sind und sonst false
. (Dadurch wird "no-value" als gleichwertig behandelt.)
Wenn die Argumente von ne
numerisch sind und eines der Argumente Einheiten hat, müssen beide Argumente Einheiten haben. Wenn die Argumente Einheiten haben, müssen sie entweder äquivalent sein oder die hier aufgeführten Regeln müssen das Skalieren eines der Argumente erlauben, bevor ne
angewendet wird, damit die Einheiten einander entsprechen.
Es gilt als Fehler, wenn nur ein Argument Einheiten enthält oder beide Argumente Einheiten haben, die nicht vereinheitlicht werden können.
Das Ergebnis "ne" ist vom Typ Bool und hat keine Einheiten.
Ein Vergleich zwischen der Spalte resource.project_id
und einer literalen Zeichenfolge hat eine besondere Behandlung, um den Unterschied zwischen Projektnummern und Projektnamen zu behandeln, wie unter Abgleich der Spalte resource.project_id
beschrieben.
ge
Größer als oder gleich.
Signatur:
ge(
Num,
Num )
→ Bool
ge(
Comparable,
Comparable(same) )
→ Bool
Dadurch wird das erste Argument Comparable mit dem zweiten Argument Comparable verglichen und true
zurückgegeben, wenn das erste Argument größer oder gleich dem zweiten Argument ist, und ansonsten false
. Wenn ein Argument Int und das andere Double ist, wird das Argument Int vor dem Vergleich in einen Double-Wert konvertiert.
Wenn eine Eingabe no-value ist, wird der Vergleich durchgeführt und ein Bool-Argument zurückgegeben; true
, wenn der erste Wert no-value ist und andernfalls false
. (Dadurch wird no-value als größer als jeder andere Wert behandelt.)
Wenn die Argumente von ge
numerisch sind und eines der Argumente Einheiten hat, müssen beide Argumente Einheiten haben. Wenn die Argumente Einheiten haben, müssen die Einheiten sich entsprechen. Wenn sich die Einheiten nicht entsprechen, sie aber dieselbe Dimension haben, kann eines der Argumente automatisch so skaliert werden, dass es dieselben Einheiten erhält wie das andere Argument. Dies ist hier beschrieben. Es gilt als Fehler, wenn nur eines der Argumente Einheiten hat oder die Argumente Einheiten haben, die sich nicht entsprechen und keine Skalierung erfolgt.
Das Ergebnis von "ge" ist Typ Bool und hat keine Einheiten.
gt
Größer als.
Signatur:
gt(
Num,
Num )
→ Bool
gt(
Comparable,
Comparable(same) )
→ Bool
Dadurch wird das erste Argument Comparable mit dem zweiten Argument Comparable verglichen und true
zurückgegeben, wenn das erste Argument größer als das zweite Argument ist, und anderenfalls false
. Wenn ein Argument Int und das andere Double ist, wird das Argument Int vor dem Vergleich in einen Double-Wert konvertiert.
Wenn eine Eingabe no-value ist, wird der Vergleich durchgeführt und ein Bool-Argument zurückgegeben; false
, wenn der zweite Wert no-value ist und andernfalls true
. (Dadurch wird no-value als größer als jeder andere Wert behandelt.)
Wenn die Argumente von gt
numerisch sind und eines der Argumente Einheiten hat, müssen beide Argumente Einheiten haben. Wenn die Argumente Einheiten haben, müssen sie entweder äquivalent sein oder die hier aufgeführten Regeln müssen das Skalieren eines der Argumente erlauben, bevor gt
angewendet wird, damit die Einheiten einander entsprechen.
Es gilt als Fehler, wenn nur ein Argument Einheiten enthält oder beide Argumente Einheiten haben, die nicht vereinheitlicht werden können.
Das Ergebnis von "gt" wird vom Typ Bool sein und keine Einheiten haben.
le
Kleiner als oder gleich.
Signatur:
le(
Num,
Num )
→ Bool
le(
Comparable,
Comparable(same) )
→ Bool
Dadurch wird das erste Argument Comparable mit dem zweiten Argument Comparable verglichen und true
zurückgegeben, wenn das erste Argument kleiner oder gleich dem zweiten Argument ist. Andernfalls wird false
zurückgegeben. Wenn ein Argument Int und das andere Double ist, wird das Argument Int vor dem Vergleich in einen Double-Wert konvertiert.
Wenn eine Eingabe no-value ist, wird der Vergleich durchgeführt und ein Bool-Argument zurückgegeben; true
, wenn der zweite Wert no-value ist und andernfalls false
. (Dadurch wird no-value als größer als jeder andere Wert behandelt.)
Wenn die Argumente von le
numerisch sind und eines der Argumente Einheiten hat, müssen beide Argumente Einheiten haben. Wenn die Argumente Einheiten haben, müssen sie entweder äquivalent sein oder die hier aufgeführten Regeln müssen das Skalieren eines der Argumente erlauben, bevor le
angewendet wird, damit die Einheiten einander entsprechen.
Es gilt als Fehler, wenn nur ein Argument Einheiten enthält oder beide Argumente Einheiten haben, die nicht vereinheitlicht werden können.
Das Ergebnis von "le" ist Typ Bool und hat keine Einheiten.
lt
Weniger als.
Signatur:
lt(
Num,
Num )
→ Bool
lt(
Comparable,
Comparable(same) )
→ Bool
Dadurch wird das erste Argument Comparable mit dem zweiten Argument Comparable verglichen und true
zurückgegeben, wenn das erste Argument kleiner als das zweite Argument ist, und anderenfalls false
. Wenn ein Argument Int und das andere Double ist, wird das Argument Int vor dem Vergleich in einen Double-Wert konvertiert.
Wenn eine Eingabe no-value ist, wird der Vergleich durchgeführt und ein Bool-Argument zurückgegeben; false
, wenn der erste Wert no-value ist und andernfalls true
. (Dadurch wird no-value als größer als jeder andere Wert behandelt.)
Wenn die Argumente von lt
numerisch sind und eines der Argumente Einheiten hat, müssen beide Argumente Einheiten haben. Wenn die Argumente Einheiten haben, müssen sie entweder äquivalent sein oder die hier aufgeführten Regeln müssen das Skalieren eines der Argumente erlauben, bevor lt
angewendet wird, damit die Einheiten einander entsprechen.
Es gilt als Fehler, wenn nur ein Argument Einheiten enthält oder beide Argumente Einheiten haben, die nicht vereinheitlicht werden können.
Das Ergebnis von "lt" ist vom Typ Bool und hat keine Einheiten.
Arithmetisch
Funktionen, die die arithmetischen Operatoren implementieren
add
Die Summe zweier Zahlen.
Signatur:
add(
Num.Delta,
Num.Delta )
→
Num.Delta
add(
Num,
Num )
→ Num
add(
Duration,
Duration )
→
Duration
add(
Date,
Duration )
→ Date
add(
Duration,
Date )
→ Date
Die add
-Funktion für zwei numerische Argumente gibt die Summe ihrer Argumente als Double-Wert zurück, wenn eine der Eingaben ein Double-Wert ist, andernfalls als Int-Wert. Wenn beide Eingaben die Zeitachsenart Delta sind, lautet die Ausgabe Zeitachsentypen. Andernfalls ist die Ausgabe eine Gauge-Zeitachsenart.
Die Funktion add
für zwei Dauer-Argumente gibt die Dauer zurück, also deren Summe.
Die Funktion add
für die Argumente Datum und Dauer gibt das Datum zurück, das die Dauer später als das Argument Datum ist. Wenn die Dauer negativ ist, ist das Ergebnis früher als das eingegebene Date (geht in die Vergangenheit zurück).
Wenn die Argumente von add
numerisch sind und eines der Argumente Einheiten hat, müssen beide Argumente Einheiten haben. Wenn die Argumente Einheiten haben, müssen sie entweder äquivalent sein oder die hier aufgeführten Regeln müssen das Skalieren eines der Argumente erlauben, bevor add
angewendet wird, damit die Einheiten einander entsprechen.
Es gilt als Fehler, wenn nur ein Argument Einheiten enthält oder beide Argumente Einheiten haben, die nicht vereinheitlicht werden können.
Das Ergebnis von add
hat die Einheit des ersten Arguments, möglicherweise skaliert.
sub
Die Differenz zweier Zahlen.
Signatur:
sub(
Num.Delta,
Num.Delta )
→
Num.Delta
sub(
Num,
Num )
→ Num
sub(
Duration,
Duration )
→
Duration
sub(
Date,
Duration )
→ Date
sub(
Date,
Date )
→ Duration
Die Funktion sub
für zwei Num-Argumente gibt das erste Argument abzüglich des zweiten Arguments als Double-Wert zurück, wenn eine der beiden Eingaben ein Double-Wert ist, andernfalls als Int. Wenn beide Eingaben vom Typ Delta sind, ist die Ausgabe vom Typ Delta. Andernfalls ist die Ausgabe eine Gauge-Zeitachsenart.
Die Argumente der sub
-Funktion Dauer geben die Dauer als numerische Differenz zurück.
Die Funktion sub
für die Argumente Datum und Dauer gibt das Datum zurück, das die Dauer früher als das Argument Datum ist. Wenn das Argument Dauer negativ ist, liegt das Ergebnis nach dem Argument Date.
Wenn die Argumente von sub
numerisch sind und eines der Argumente Einheiten hat, müssen beide Argumente Einheiten haben. Wenn die Argumente Einheiten haben, müssen sie entweder äquivalent sein oder die hier aufgeführten Regeln müssen das Skalieren eines der Argumente erlauben, bevor sub
angewendet wird, damit die Einheiten einander entsprechen.
Es gilt als Fehler, wenn nur ein Argument Einheiten enthält oder beide Argumente Einheiten haben, die nicht vereinheitlicht werden können.
Das Ergebnis von sub
hat die Einheit des ersten Arguments, möglicherweise skaliert.
mul
Das Produkt zweier Zahlen.
Signatur:
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
Die mul
-Funktion für zwei numerische Argumente gibt das Produkt ihrer Argumente als Double-Wert zurück, wenn eine der Eingaben ein Double-Wert ist, andernfalls als Int-Wert. Wenn eine Eingabe die Zeitachse Delta ist und die andere Eingabe ein Literal ist, lautet die Ausgabe der Zeitachsentyp Delta. Andernfalls ist die Ausgabe eine Gauge-Zeitachsenart.
Die mul
-Funktion für eine Num und Dauer ist die Dauer multipliziert mit Num als Dauer-Typ.
Wenn eines der numerischen Argumente Einheiten enthält, müssen beide Argumente Einheiten enthalten und die Einheiten müssen äquivalent sein. Die Einheit des Ergebnisses ist das Produkt der Einheiten der beiden Argumente, sofern diese Einheiten haben. Die einzige Ausnahme ist die Multiplikation mit einem Literal: Das Literal hat möglicherweise keine explizite Maßeinheit. Wenn das andere Argument eine Maßeinheit hat, wird die Einheit 1
dem Literal zugewiesen, wodurch das Ergebnis die Einheiten des anderen Arguments hat.
div
Das Verhältnis zweier Zahlen.
Signatur:
div(
Num.Delta,
lit-Num )
→
Double.Delta
div(
Num,
Num )
→ Double
div(
Duration,
Num )
→ Duration
div(
Duration,
Duration )
→ Double
div(
Date,
Duration )
→ Double
Die Funktion div
teilt das erste Num-Argument durch das zweite Num-Argument und gibt das Verhältnis als Double-Wert zurück.
Es wird kein Ergebnis erzeugt, wenn das zweite Argument Num 0 ist.
Die Funktion div
teilt das erste Argument durch das zweite Argument auf und gibt das Verhältnis als Double-Wert zurück. Wenn ein Argument ein Date oder Dauer ist, wird der Wert als doppelter Wert dargestellt, der das Date oder die Dauer in Einheiten, ist die die vollständige interne Genauigkeit solcher Werte darstellen. Wenn das Ergebnis ein Datum oder eine Dauer ist, wird das Verhältnis als Wert mit denselben Einheiten interpretiert und gerundet auf den nächsten Wert, für den ein Date oder eine Dauer stehen.
Wenn ein Date-Wert durch einen Dauer-Wert geteilt wird, ist das Ergebnis der Double-Wert, der die Anzahl jener Dauer seit der Unix-Epoche (d'1970/01/01-00:00:00+00:00'
) ist. Daher ist d'2020/06/01-01:20:03' / 1s
die Anzahl der Sekunden seit d'1970/01/01-00:00:00+00:00'
bei d'2020/06/01-01:20:03'
.
Die Funktion div
erzeugt kein Ergebnis, wenn das zweite Argument 0 ist.
Wenn eines der numerischen Argumente Einheiten enthält, müssen beide Argumente Einheiten haben. Die Einheit des Ergebnisses, wenn die Argumente Einheiten haben, ist das Teilen der Einheit des ersten Arguments durch die Einheit des zweiten Arguments. Die einzige Ausnahme ist die Division durch ein Literal: Das Literal hat möglicherweise keine explizite Maßeinheit. Wenn das andere Argument also eine Maßeinheit hat, wird die Einheit 1
dem Literal zugewiesen. , wodurch das Ergebnis die Einheiten des anderen Arguments enthält.
int_div
Der Quotient aus der Teilung zweier Ganzzahlen.
Signatur:
int_div(
Int,
Int )
→ Int
int_div(
Duration,
Int )
→
Duration
int_div(
Duration,
Duration )
→
Int
int_div(
Date,
Duration )
→ Int
Die Funktion int_div
teilt ihr erstes Argument durch ihr zweites Argument und gibt den Quotient als Int-Wert zurück. Wenn ein Argument ein Date oder Dauer ist, wird der Wert als Ganzzahlwert dargestellt, der das Date oder die Dauer in Einheiten, ist die die vollständige interne Genauigkeit solcher Werte darstellen. Wenn das Ergebnis ein Date oder eine Dauer ist, wird der numerische Wert als Wert mit denselben Einheiten interpretiert.
Wenn ein Date-Wert durch einen Dauer-Wert geteilt wird, ist das Ergebnis der Int-Wert, der die Anzahl jener Dauer seit der Unix-Epoche (d'1970/01/01-00:00:00+00:00'
) ist. Daher ist d'2020/06/01-01:20:03' / 1s
die Anzahl der Sekunden seit d'1970/01/01-00:00:00+00:00'
bei d'2020/06/01-01:20:03'
.
Die Funktion int_div
erzeugt kein Ergebnis, wenn das zweite Argument 0 ist.
Wenn eines der numerischen Argumente Einheiten enthält, müssen beide Argumente Einheiten haben. Die Einheit des Ergebnisses, wenn die Argumente Einheiten haben, ist das Teilen der Einheit des ersten Arguments durch die Einheit des zweiten Arguments. Die einzige Ausnahme ist die Division durch ein Literal: Das Literal hat möglicherweise keine explizite Maßeinheit. Wenn das andere Argument also eine Maßeinheit hat, wird die Einheit 1
dem Literal zugewiesen. , wodurch das Ergebnis die Einheiten des anderen Arguments enthält.
abs
Absoluter Wert.
Signatur:
abs(
Num )
→ Num
Die abs
-Funktion verwendet eine numerische Eingabe (Int oder *Double) und gibt einen Wert desselben Typs zurück, der dieselbe Größe wie die Eingabe hat und nicht negativ ist.
Das Ergebnis von abs
nutzt dieselbe Maßeinheit.
neg
Der negative Wert einer Zahl.
Signatur:
neg(
Num )
→ Num
neg(
Duration )
→ Duration
Die neg
-Funktion gibt das negative Argument zurück.
pos
Identität für numerische Eingaben.
Signatur:
pos(
Num )
→ Num
pos(
Duration )
→ Duration
Die Funktion pos
gibt ein Argument zurück.
rem
Der Rest der Teilung zweier Ganzzahlen.
Signatur:
rem(
Int,
Int )
→ Int
rem(
Duration,
Duration )
→
Duration
Die Funktion rem
teilt das erste Int-Argument durch das zweite Int-Argument und gibt den Rest als Int-Wert zurück.
Es wird kein Ergebnis erzeugt, wenn das zweite Argument Num 0 ist.
Die mit dem Ergebnis von Rem
verbundene Maßeinheit ist die gleiche Einheit wie die Einheit des ersten Arguments, falls dies eine hat.
Mathematik
Einige mathematische Funktionen
sqrt
Quadratwurzel.
Signatur:
sqrt(
Num )
→ Double
Die sqrt
-Funktion gibt die Quadratwurzel des Num-Arguments als Double-Wert zurück.
Die sqrt
-Funktion erzeugt kein Ergebnis, wenn das Num-Argument kleiner als 0 ist.
Das Ergebnis von sqrt
hat keine Maßeinheit.
log
Natürlicher Logarithmus.
Signatur:
log(
Num )
→ Double
Die Funktion log
gibt den natürlichen Logarithmus des Num-Arguments als Double-Wert zurück.
log
erzeugt kein Ergebnis, wenn das Num-Argument kleiner oder gleich 0 ist.
Das Ergebnis von log
hat keine Maßeinheit.
exp
Potenziertes e.
Signatur:
exp(
Num )
→ Double
Der exp
gibt e (die Basis der natürlichen Logarithmen) zurück, der mit dem Argument Num als Double-Wert potenziert wird.
Die exp
-Funktionen geben bei Überlauf den Double-Wert "Infinity" zurück.
Das Ergebnis von exp
hat keine Maßeinheit.
power
Eine Zahl potenziert zu einer anderen Zahl.
Signatur:
power(
Num,
Num )
→ Double
Gibt den Wert des ersten Num-Arguments zurück, das mit dem zweiten Num-Argument als Double-Wert dargestellt wird. Wenn eines der Argumente ein Int ist, wird es vor dem Vorgang in ein Double konvertiert.
Das Ergebnis von power
hat keine Maßeinheit.
int_round
Nächste ganze Zahl.
Signatur:
int_round(
Double )
→ Int
Die int_round
-Funktion nimmt einen Double-Wert, rundet ihn auf die nächste Ganzzahl und gibt ihn als Int-Wert zurück. Wenn die Eingabe kein Wert ist oder das Ergebnis nicht als Int-Wert dargestellt werden kann, ist das Ergebnis no-value.
Das Ergebnis von int_round
hat dieselbe Maßeinheit wie die Eingabe.
int_floor
Ganzzahl der Untergrenze.
Signatur:
int_floor(
Double )
→ Int
Die int_floor
-Funktion nimmt einen Double-Wert, rundet ihn auf Minus bis zum nächsten ganzzahligen Wert und gibt ihn als Int-Wert zurück. Wenn die Eingabe kein Wert ist oder das Ergebnis nicht als Int-Wert dargestellt werden kann, ist das Ergebnis no-value.
Das Ergebnis von int_floor
hat dieselbe Maßeinheit wie die Eingabe.
int_ceil
Ganzzahl der Obergrenze.
Signatur:
int_ceil(
Double )
→ Int
Die Funktion int_ceil
nimmt einen Double-Wert, rundet ihn gegen die nächste Ganzzahl und gibt ihn als Int-Wert zurück. Wenn die Eingabe no-value ist oder das Ergebnis nicht als Int-Wert dargestellt werden kann, ist das Ergebnis no-value.
Das Ergebnis von int_ceil
hat keine Maßeinheit.
String
Funktionen, die String-Werte verarbeiten.
concatenate
String-Verkettung.
Signatur:
concatenate(
String,
String )
→
String
Die Funktion concatenate
gibt die Verkettung der beiden Argumente von String zurück.
string_to_double
String in Double umwandeln.
Signatur:
string_to_double(
String )
→ Double
Die string_to_double
-Funktion parst ihr String-Eingangsargument als Gleitkommazahl und gibt das Ergebnis als Double-Wert zurück.
Wenn der String kein gültiger Gleitkommawert ist, ist das Ergebnis no-value.
Das Ergebnis von string_to_double
hat keine Maßeinheit.
string_to_int64
String in Int umwandeln.
Signatur:
string_to_int64(
String )
→ Int
Die Funktion string_to_int64
parst das String-Eingabeargument als Ganzzahl und gibt das Ergebnis als Int-Wert zurück. Wenn der String kein gültiger ganzzahliger Wert ist oder nicht als Int-Wert dargestellt werden kann, lautet das Ergebnis no-value.
Das Ergebnis von string_to_int64
hat keine Maßeinheit.
ascii_to_lower
ASCII-Großbuchstaben in Kleinbuchstaben ändern.
Signatur:
ascii_to_lower(
String )
→ String
Die ascii_to_upper
-Funktion verwendet ein String-Argument und gibt einen String-Wert zurück, der identisch ist, mit der Ausnahme, dass jeder ASCII-Großbuchstabe in die entsprechenden ASCII-Kleinbuchstaben konvertiert wurde. Alle anderen Zeichen bleiben unverändert.
ascii_to_upper
Ändern der ASCII-Kleinbuchstaben in Großbuchstaben.
Signatur:
ascii_to_upper(
String )
→ String
Die Funktion ascii_to_upper
verwendet ein String-Argument und gibt einen String-Wert zurück, der identisch ist, mit der Ausnahme, dass jeder ASCII-Kleinbuchstaben in den entsprechenden Großbuchstaben umgewandelt wurde. Alle anderen Zeichen bleiben unverändert.
utf8_normalize
Unicode-String, der sich für den Vergleich der Groß-/Kleinschreibung eignet.
Signatur:
utf8_normalize(
String )
→ String
Die utf8_normalize
-Funktion verwendet ein String-Argument und gibt einen String-Wert zurück, der sich für einen Vergleich der Eingabewerte eignet, wenn die Eingabe ein gültiger UTF8-codierter String ist.
Reguläre Ausdrücke
Funktionen, die Übereinstimmungen, Extraktionen und Änderungen mithilfe regulärer RE2-Ausdrücke durchführen.
re_full_match
Wahr, wenn ein regulärer Ausdruck mit einem Stringwert teilweise übereinstimmt.
Signatur:
re_full_match(
String,
lit-String )
→
Bool
Die Funktion re_partial_match
verwendet eine reguläre Zeichenfolge und einen regulären Ausdruck für einen String und gibt true
zurück, wenn der gesamte Eingabestring mit dem regulären Ausdruck übereinstimmt. Andernfalls wird false
zurückgegeben, auch wenn das Eingabestringargument no-value ist.
Ein Abgleich mit regulären Ausdrücken in der Spalte resource.project_id
hat eine besondere Behandlung, um den Unterschied zwischen Projektnummern und Projektnamen zu behandeln, wie in Abgleich der Spalte resource.project_id
beschrieben.
re_partial_match
Wahr, wenn ein regulärer Ausdruck mit einem Stringwert teilweise übereinstimmt.
Signatur:
re_partial_match(
String,
lit-String )
→ Bool
Die Funktion re_partial_match
verwendet eine reguläre Zeichenfolge und einen regulären Ausdruck für einen String und gibt true
zurück, wenn ein Teil des Eingabestrings mit dem regulären Ausdruck übereinstimmt. Andernfalls wird false
zurückgegeben, auch wenn das Stringargument no-value ist.
re_extract
Werte extrahieren, die mit einem regulären Ausdruck in einem anderen String übereinstimmen.
Signatur:
re_extract(
String,
[ lit-String ],
[ lit-String ] )
→ String
Die Funktion re_extract
verwendet ein Eingabestringargument und zwei Literal-String-Argumente: einen regulären Ausdruck und einen Ersatzstring. Das Ergebnis wird durch Abgleich des Eingabestrings mit dem regulären Ausdruck und der ersetzenden Erfassungsgruppen im Ausdruck im Ersatzstring erstellt.
Der Ersatzstring durch die ersetzten Erfassungsgruppen ist das Ergebnis.
Wenn das Argument für einen regulären Ausdruck nicht angegeben ist, wird standardmäßig "(.*)" verwendet, sodass der gesamte erste Argumentstring in einer Erfassungsgruppe enthalten ist.
Wenn das Argument für den Ersetzungsstring nicht angegeben ist, wird standardmäßig R"\1" verwendet, sodass die erste Ersetzungsgruppe der Ausgabestring ist.
Wenn der Eingabestring no-value ist, wenn der reguläre Ausdruck nicht übereinstimmte oder die Substitution von Erfassungsgruppen nicht funktioniert, wird kein Wert zurückgegeben.
re_replace
Ersetzt die erste Übereinstimmung eines regulären Ausdrucks in einem anderen String.
Signatur:
re_replace(
String,
lit-String,
lit-String )
→ String
Die Funktion re_replace
verwendet ein String-Eingabeargument und zwei literale String-Argumente: einen regulären Ausdruck und einen Ersatzwert. Wenn der reguläre Ausdruck mit irgendeinem Teil des Eingabestrings übereinstimmt, wird der zurückgegebene Wert gebildet, indem die erste solche Übereinstimmung im Eingabestring durch den Ersatzstring ersetzt wird.
Wenn der Eingabestring no-value ist oder wenn es keine Übereinstimmung gibt, wird der Eingabestring der zurückgegebene Wert.
re_global_replace
Ersetzt alle Übereinstimmungen eines regulären Ausdrucks in einem anderen String.
Signatur:
re_global_replace(
String,
lit-String,
lit-String )
→ String
Die Funktion re_global_replace
verwendet ein Eingabestringargument und zwei literale String-Argumente: einen regulären Ausdruck und einen Ersatzwert.
Das Ergebnis wird aus dem Eingabestring erstellt, indem jede disjunkte Übereinstimmung des regulären Ausdrucks (von links nach rechts) durch den Ersatzstring ersetzt wird.
Wenn der Eingabestring no-value ist oder keine Übereinstimmung vorliegt, ist der Eingabestring der zurückgegebene Wert.
Aggregation
Eine Aggregationsfunktion kombiniert eine Reihe von Eingabewerten zu einem endgültigen Ausgabewert. Sie werden verwendet, wenn mehrere Eingabezeilen gruppiert und in einer einzigen Ausgabezeile zusammengefasst werden.
Eine Aggregationsfunktion verwaltet einen internen Aggregationsstatus. Der Argumentausdruck für die Aggregationsfunktion wird für jede der gruppierten Eingabezeilen einmal ausgewertet und der resultierende Wert (falls vorhanden) wird an die Aggregationsfunktion übergeben, um in seinem internen Status angesammelt zu werden. Sobald dies für alle Zeilen in der Gruppe erfolgt ist, erzeugt die Aggregationsfunktion ihren Ausgabewert, der zum Erstellen von Wertspalten in der einzelnen Ausgabezeile verwendet werden soll.
Zum Beispiel wertet mean(memory_usage)
, angewendet auf eine Reihe von Zeilen mit einer memory_usage
-Spalte, den Argumentausdruck memory_usage
für jede Zeile aus und integriert den resultierenden Wert (falls einer erzeugt wird) in den internen Zustand der Aggregationsfunktion mean
(die eine Summe von Werten und eine Anzahl von Werten sein kann).
Wenn alle Zeilen verarbeitet wurden, erzeugt der Reducer mean
einen Wert aus seinem internen Status (die Summe dividiert durch die Anzahl).
Die meisten Aggregatfunktionen, die mit numerischen Werten oder Verteilungswerten arbeiten, übertragen die Maßeinheit ihrer Eingabe auf die Ausgabe. Es gibt folgende Ausnahmen:
count
undrow_count
– die Ausgabe hat die Einheit1
.variance
– die Ausgabe ist das Quadrat der Eingabe.covariance
– die Ausgabe ist das Produkt der Einheiten der beiden Eingaben.fraction_less_than
undfraction_true
geben die Einheit10^2.%
ihrer Ausgabe.
sum
Die Summe einer Gruppe numerischer Werte.
Signatur:
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
Wenn der Argumentausdruck numerisch ist (Int oder *Double), wird die Summe der Werte zurückgegeben, die an ihn übergeben werden.
Wenn der Argumentausdruck ein Verteilungswert ist, gibt diese Funktion die Summe der Populationswerte in allen Verteilungswert zurück, die an sie übergeben werden.
Wenn der Argumentausdruck für eine Eingabezeile keinen Wert oder einen nicht endlichen Double-Wert ergibt, wirkt sich diese Eingabezeile nicht auf die Summe aus.
Bei numerischen Eingaben (Int oder Double) ist das Ergebnis der gleiche Typ (Int* oder Double) wie der Eingabeausdruck. Für Verteilungs-Eingabewerte ist der Ergebnistyp Double.
Die Ausgabe hat den Zeitachsentyp Delta, wenn nichtgleitende zeitliche Aggregationen oder nur eine räumliche Aggregation durchgeführt wird und der Typ der Eingabezeitachse ebenfalls Delta ist.
Die mit dem Ergebnis von sum
verbundene Maßeinheit entspricht der Einheit der Eingabe.
distribution
Eine Verteilung aus einer Gruppe numerischer Werte oder Verteilungswerte.
Signatur:
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
Wenn das erste Argument ein Num-Wert ist, werden die Eingabewerte in einem Verteilungsergebnis gesammelt, dessen Bucket-Spezifikation durch das Argument Lit-Bucketer angegeben wird.
Wenn das erste Argument ein Verteilungs-Wert ist, werden die Verteilungen zu einem Verteilungsergebnis zusammengeführt, das die Population aller Eingabeverteilungen enthält. Die resultierende Verteilungs-Bucket-Spezifikation wird anhand der Eingabeverteilung-Bucket-Spezifikationen bestimmt. Wenn die Bucket-Spezifikationen identisch sind, wird diese Bucket-Spezifikation verwendet. Wenn es eine andere Bucket-Spezifikation gibt, wird eine neue zusammengeführte Bucket-Spezifikation verwendet. Diese zusammengeführte Spezifikation ist in der Regel nicht genauer als die Eingabe-Bucket-Spezifikation mit der geringsten Genauigkeit.
Wenn jedoch der erste Argumentausdruck für eine Eingabezeile keinen Wert oder einen nicht endlichen Double ergibt, wirkt sich diese Eingabezeile nicht auf das Perzentil aus.
Die mit dem Ergebnis von distribution
verbundene Maßeinheit entspricht der Einheit der Eingabe.
count
Die Anzahl der Werte in einer Gruppe von Werten.
Signatur:
count(
ColumnValue )
→ Int.Delta
(nur zeitlich)
count(
ColumnValue )
→ Int.Gauge
Gibt die Anzahl der Werte zurück, die an die Funktion übergeben wurden. Wenn der Argumentausdruck für eine Eingabezeile keinen Wert ergibt oder einen nicht endlichen Double-Wert ergibt, wird er nicht gezählt.
Die Ausgabe hat den Zeitachsentyp Delta, wenn eine nichtgleitende zeitliche Aggregation durchgeführt wird.
Die mit dem Ergebnis von count
verbundene Maßeinheit ist 1
.
row_count
Die Anzahl der gefundenen Eingabezeilen.
Signatur:
ImplicitRowSetInput row_count(
)
→
Int.Delta (temporal only)
ImplicitRowSetInput row_count(
)
→
Int.Gauge
Die row_count
-Aggregationsfunktion gibt die Anzahl der Zeilen zurück, für die diese Aggregation erfolgt. Im Gegensatz zu count
verwendet row_count
kein Argument und es ist egal, ob ein Wert aus der Zeile berechnet werden könnte.
Die Ausgabe hat den Zeitachsentyp Delta, wenn eine nichtgleitende zeitliche Aggregation durchgeführt wird.
Die mit dem Ergebnis von count
verbundene Maßeinheit ist 1
.
count_true
Die Anzahl der wahren Werte in einer Gruppe boolescher Werte.
Signatur:
count_true(
Bool )
→ Int.Delta
(nur zeitlich)
count_true(
Bool )
→ Int
Die booleschen Eingabewerte werden erfasst und das Ergebnis ist die Anzahl der wahren Eingabewerte.
Wenn der Argumentausdruck für eine Eingabezeile keinen Wert ergibt, wirkt sich diese Eingabezeile nicht auf das Ergebnis aus.
Die Ausgabe hat den Zeitachsentyp Delta, wenn eine nichtgleitende zeitliche Aggregation durchgeführt wird.
Die mit dem Ergebnis von count_true
verbundene Maßeinheit ist 1
.
min
Das Minimum einer Gruppe numerischer Werte.
Signatur:
min(
Num )
→ Num
Dies erfasst die numerischen Werte, die an sie übergeben werden, und gibt den Mindestwert zurück. Wenn der Ergebnistyp dem Eingabetyp entspricht.
Wenn der Argumentausdruck für eine Eingabezeile keinen Wert ergibt, wirkt sich diese Eingabezeile nicht auf das Ergebnis aus.
Die mit dem Ergebnis von min
verbundene Maßeinheit entspricht der Einheit der Eingabe.
max
Das Maximum einer Gruppe numerischer Werte.
Signatur:
max(
Num )
→ Num
Diese erfasst die numerischen Werte, die an sie übergeben werden, und gibt den Höchstwert zurück. Wenn der Ergebnistyp dem Eingabetyp entspricht.
Wenn der Argumentausdruck für eine Eingabezeile keinen Wert ergibt, wirkt sich diese Eingabezeile nicht auf das Ergebnis aus.
Die mit dem Ergebnis von max
verbundene Maßeinheit entspricht der Einheit der Eingabe.
diameter
Das Maximum plus das Minimum einer Gruppe numerischer Werte.
Signatur:
diameter(
Num )
→ Num
Dadurch werden die numerischen Werte erfasst, die an sie übergeben werden, und die Differenz zwischen dem Maximum und dem Minimum der Werte zurückgegeben. Wenn der Ergebnistyp mit dem Eingabetyp übereinstimmt (Int oder Double).
Wenn der Argumentausdruck für eine Eingabezeile keinen Wert ergibt, wirkt sich diese Eingabezeile nicht auf das Ergebnis aus.
Die mit dem Ergebnis von diameter
verbundene Maßeinheit entspricht der Einheit der Eingabe.
mean
Der Mittelwert einer Gruppe numerischer Werte.
Signatur:
mean(
Summable )
→ Double
Wenn der Argumentausdruck numerisch ist (Int oder *Double), wird der Mittelwert der Werte zurückgegeben, die an ihn übergeben werden.
Wenn der Argumentausdruck vom Typ Verteilung ist, wird der Mittelwert aller Werte in allen Verteilungen zurückgegeben.
Wenn der Argumentausdruck für eine Eingabezeile keinen Wert oder einen nicht endlichen Double-Wert ergibt, wirkt sich diese Eingabezeile nicht auf den Mittelwert aus.
Die mit dem Ergebnis von mean
verbundene Maßeinheit entspricht der Einheit der Eingabe.
stddev
Die Standardabweichung einer Gruppe von Werten.
Signatur:
stddev(
Summable )
→ Double
Wenn der Argumentausdruck numerisch ist (Int oder *Double), gibt dies die Standardabweichung der an sie übergebenen Werte zurück.
Wenn der Argumentausdruck ein Verteilungs-Wert ist, wird die Standardabweichung aller Werte in allen Verteilungen zurückgegeben.
Wenn der Argumentausdruck für eine Eingabezeile keinen Wert oder einen nicht endlichen Double-Wert ergibt, wirkt sich diese Eingabezeile nicht auf die Standardabweichung aus.
Die mit dem Ergebnis von stddev
verbundene Maßeinheit entspricht der Einheit der Eingabe.
variance
Die Varianz einer Gruppe numerischer Werte.
Signatur:
variance(
Summable )
→ Double
Wenn der Argumentausdruck numerisch ist (Int oder *Double), wird die Varianz der Werte zurückgegeben, die an ihn übergeben werden.
Wenn der Argumentausdruck den Typ Verteilung hat, wird die Varianz aller Werte in allen Verteilungen zurückgegeben.
Wenn der Argumentausdruck für eine Eingabezeile keinen Wert oder einen nicht endlichen Double-Wert ergibt, wirkt sich diese Eingabezeile nicht auf die Varianz aus.
Mit dem Ergebnis der Funktion variance
ist keine Maßeinheit verbunden.
covariance
Die Kovarianz einer Gruppe von Wertpaaren
Signatur:
covariance(
Num,
Num )
→ Double
Dies gibt die Kovarianz der Paare numerischer Werte (Int oder *Double) zurück, die an sie übergeben werden.
Wenn für eine Eingabezeile einer der Argumentausdrücke keinen Wert oder einen nicht endlichen Double-Wert ergibt, wirkt sich diese Eingabezeile nicht auf die Kovarianz aus.
Mit dem Ergebnis der Funktion covariance
ist keine Maßeinheit verbunden.
median
Der Medianwert einer Gruppe numerischer Werte oder Verteilungswerte.
Signatur:
median(
Summable )
→ Double
Wenn der Argumentausdruck numerisch ist (Int oder *Double), gibt dies eine Schätzung der Medianwerte der Werte zurück, die an ihn übergeben werden. Der Medianwert wird berechnet, indem ein Verteilungswert aus den Werten der Population mit Bucket-Grenzen erstellt wird, die 10% voneinander entfernt sind, wodurch der Fehler in der Schätzung um diesen Betrag begrenzt wird.
Die Bucket-Spezifikation, mit der ein Distribution-Wert aus numerischer Eingabe abgeleitet wird, um ein Medianwert zu schätzen, lautet powers_of(1.05).num_buckets(500).lower(.01)
. Sie beinhaltet einen Wertebereich von .01
bis ca. 4e+8
. Obwohl sie viele Anwendungsfälle abdeckt, ist es möglicherweise erforderlich, die Funktion scale
zum Anpassen der Eingabe zu verwenden, z. B. von By
in MiBy
oder „MBy“, wenn der Bereich der Anzahl der Byte im Gigabyte- oder Terabyte-Bereich liegt.
Wenn der Argumentausdruck ein Verteilungs-Wert ist, wird eine Schätzung des Medianwerts der zusammengeführten Population von Werten aus allen Verteilungen zurückgegeben. Der Median wird berechnet, indem alle Eingabeverteilungen zu einer Verteilung zusammengeführt und der Median geschätzt wird. Die Genauigkeit des Medianwerts hängt von den Bucket-Grenzen der Eingabeverteilung ab.
Wenn der Argumentausdruck für eine Eingabezeile keinen Wert oder einen nicht endlichen Double-Wert ergibt, wirkt sich diese Eingabezeile nicht auf die Standardabweichung aus.
Die mit dem Ergebnis von median
verbundene Maßeinheit entspricht der Einheit der Eingabe.
percentile
Ein Perzentil einer Gruppe von numerischen Werten oder Verteilungswerten.
Signatur:
percentile(
Summable,
lit-Num )
→
Double
Das Argument lit-Num gibt ein Perzentil im Bereich von 0 bis 100 an.
Wenn der erste Argumentausdruck numerisch ist (Int oder Double), wird eine Schätzung des Perzentils der Population der Werte zurückgegeben, die an ihn übergeben werden. Der Perzentil wird berechnet, indem ein Verteilungswert aus den Werten der Population mit Bucket-Grenzen erstellt wird, die 10% voneinander entfernt sind, wodurch der Fehler in der Schätzung um diesen Betrag begrenzt wird.
Die Bucket-Spezifikation, mit der ein Distribution-Wert aus numerischer Eingabe abgeleitet wird, um ein Perzentil zu schätzen, lautet powers_of(1.05).num_buckets(500).lower(.01)
. Sie beinhaltet einen Wertebereich von .01
bis ca. 4e+8
. Obwohl sie viele Anwendungsfälle abdeckt, ist es möglicherweise erforderlich, die Funktion scale
zum Anpassen der Eingabe zu verwenden, z. B. von By
in MiBy
oder „MBy“, wenn der Bereich der Anzahl der Byte im Gigabyte- oder Terabyte-Bereich liegt.
Wenn der Argumentausdruck ein Distribution-Wert ist, wird eine Schätzung des Medianwerts der zusammengeführten Population von Werten aus allen Verteilungen zurückgegeben. Der Perzentil wird berechnet, indem alle Eingabeverteilungen zu einer Verteilung zusammengeführt und der Perzentil geschätzt wird. Die Genauigkeit des Perzentils hängt von den Bucket-Grenzen der Eingabeverteilungen ab.
Wenn jedoch der erste Argumentausdruck für eine Eingabezeile keinen Wert oder einen nicht endlichen Double ergibt, wirkt sich diese Eingabezeile nicht auf das Perzentil aus.
Die mit dem Ergebnis von percentile
verbundene Maßeinheit entspricht der Einheit der Eingabe.
fraction_less_than
Der Anteil einer Gruppe von Werten, die kleiner als ein fester Wert sind.
Signatur:
fraction_less_than(
Summable,
lit-Num )
→ Double
Wenn das erste Argument ein numerischer Wert (Int oder *Double) ist, gibt dies den Bruchteil der an das erste Argument übergebenen Wertesammlung zurück, der kleiner als das lit-Num-Argument ist. Beim Berechnen dieses Bruchteils werden unendliche Werte vom Typ Double und "Not-a-Value"-Werte vom Typ Int und Double ignoriert.
Wenn das erste Argument ein Verteilungs-Wert ist, kombiniert dies die Populationen aller übergebenen Verteilungen und schätzt den Anteil der Werte in der Gesamtheit dieser aggregierten Verteilung, die unter dem Wert des Arguments lit-Num liegen.
Die mit dem Ergebnis von fraction_less_than
verbundene Maßeinheit ist 10^2.%
.
fraction_true
Der Bruchteil einer Gruppe boolescher Werte, die wahr sind.
Signatur:
fraction_true(
Bool )
→ Double
Die booleschen Eingabewerte werden erfasst und das Ergebnis ist ein Double-Wert im Bereich von 0 bis 1, der dem Anteil der Eingabewerte entspricht, die wahr sind.
Wenn der Argumentausdruck für eine Eingabezeile keinen Wert ergibt, wirkt sich diese Eingabezeile nicht auf das Ergebnis aus.
Die mit dem Ergebnis von fraction_true
verbundene Maßeinheit ist 10^2.%
.
any_true
Die Disjunktion einer Gruppe boolescher Werte.
Signatur:
any_true(
Bool )
→ Bool
Die Funktion any_true
berechnet den Wert true
, wenn alle Eingabewerte true
sind, und gibt ansonsten false
zurück.
Wenn der Argumentausdruck für eine Eingabezeile keinen Wert ergibt, wirkt sich diese Eingabezeile nicht auf das Ergebnis aus.
all_true
Die Verknüpfung einer Gruppe von booleschen Werten.
Signatur:
all_true(
Bool )
→ Bool
Die Funktion all_true
berechnet den Wert true
, wenn alle zugehörigen Eingabewerte true
sind, und gibt ansonsten false
zurück.
Wenn der Argumentausdruck für eine Eingabezeile keinen Wert ergibt, wirkt sich diese Eingabezeile nicht auf das Ergebnis aus.
pick_any
Der Wert eines beliebigen Elements einer Gruppe von Werten (beliebig gewählt).
Signatur:
pick_any(
ColumnValue )
→ FirstArgType
Diese Funktion gibt einen der an sie übergebenen Werte zurück, der willkürlich ausgewählt wird.
Wenn der Argumentausdruck für eine Eingabezeile keinen Wert ergibt, wirkt sich diese Eingabezeile nicht auf das Ergebnis aus.
Die mit dem Ergebnis von pick_any
verbundene Maßeinheit entspricht der Einheit der Eingabe, falls vorhanden.
singleton
Der Wert des Elements einer Gruppe von Werten mit nur einem Element.
Signatur:
singleton(
ColumnValue )
→ FirstArgType
Diese Funktion gibt den Wert des Argumentausdrucks so zurück, wie er für eine einzelne Zeile ausgewertet wurde. Wenn der Argumentausdruck einen Evaluierung ergibt und einen Wert für mehr als eine Zeile erzeugt, ist dies ein Fehler, auch wenn er als zuvor erzeugter Wert ausgewertet wird.
Wenn der Argumentausdruck für eine Eingabezeile keinen Wert ergibt, wirkt sich diese Eingabezeile nicht auf das Ergebnis aus.
Die mit dem Ergebnis von singleton
verbundene Maßeinheit entspricht der Einheit der Eingabe.
unique
Der gemeinsame Wert einer Gruppe von Werten (die alle gleich sein müssen).
Signatur:
unique(
Comparable )
→ FirstArgType
Die Funktion unique
gibt den Wert zurück, der mit jedem Wert übereinstimmt, der ihr übergeben wurde. Wenn es einen solchen Wert nicht gibt (der Funktion wurden mindestens zwei verschiedene Werte übergeben), wird ein Fehler generiert und einer der an sie übergebenen Werte zurückgegeben.
Wenn der Argumentausdruck für eine Eingabezeile keinen Wert ergibt, wirkt sich diese Eingabezeile nicht auf das Ergebnis aus.
Die mit dem Ergebnis von unique
verbundene Maßeinheit entspricht der Einheit der Eingabe.
aggregate
Der Standardaggregatwert aus einer Gruppe von Werten eines beliebigen Typs
Signatur:
aggregate(
Num )
→ Num.Delta
(nur zeitlich)
aggregate(
Distribution )
→
Distribution.Delta (nur zeitlich)
aggregate(
Num )
→ Num.Gauge
(nur gleitend zeitlich)
aggregate(
Distribution )
→
Distribution.Gauge (nur gleitend zeitlich)
aggregate(
Num )
→ Num.FirstArgKind
aggregate(
Distribution )
→
Distribution.FirstArgKind
aggregate(
Bool )
→ Bool
aggregate(
String )
→ String
Die Funktion aggregate
führt eine Aggregation durch, die vom Typ der Eingabe abhängt.
Für Int- und Double-Eingaben ist dies mit dem Aggregator
sum
identisch.Für die Verteilungs-Eingabe ist dies mit dem Aggregator
distribution
identisch.Für die Bool-Eingabe ist dies mit dem Aggregator
any_true
identisch.Für die String-Eingabe ist dies derselbe wie der Aggregator
pick_any
.
weighted_distribution
Eine Verteilung aus einer Gruppe von gewichteten Werten.
Signatur:
weighted_distribution(
Num,
Int,
lit-BucketSpecification )
→
Distribution.Delta (nur zeitlich)
weighted_distribution(
Num,
Int,
lit-BucketSpecification )
→
Distribution.Gauge
Die Eingabewerte werden in einem Verteilungsergebnis erfasst, dessen Bucket-Spezifikation durch das Argument lit-Bucketer angegeben wird. Das erste Argument ist der Wert, der der Verteilung hinzugefügt werden soll, und das zweite Argument ist die Gewichtung dieses Werts. Ein Wert N
mit einer Gewichtung von M
wird durch M
-Instanzen des Werts N
in der Verteilung dargestellt.
Wenn jedoch der zweite Argumentausdruck für eine Eingabezeile keinen Wert oder einen nicht endlichen Double ergibt, wirkt sich diese Eingabezeile nicht auf das Perzentil aus.
Die mit dem Ergebnis von weighted_distribution
verbundene Maßeinheit entspricht der Einheit der Eingabe.
Ausrichten
Ausrichtungsfunktionen werden vom Tabellenvorgang align
verwendet, um eine ausgerichtete Tabelle zu erstellen, deren Zeitachse Punkte mit Zeitstempeln in regelmäßigen Intervallen hat.
Zusätzlich zum expliziten Argument Dauer verwendet eine Ausrichtungsfunktion eine Eingabezeitachse und einen Zeitpunkt und erzeugt einen Ausgabepunkt für diesen bestimmten Zeitpunkt.
Die Ausrichtungsfunktion interpolate
erzeugt einen Wert zu einem bestimmten Zeitpunkt, indem sie einen Wert von zwei angrenzenden Eingabepunkten interpoliert, deren Zeitstempel den Ausgabe-Zeitstempel überspannen.
Die Ausrichtungsfunktionen next_older
und next_younger
erzeugen den Wert aus dem einzelnen Punkt in der Eingabezeitachse, dessen Zeitstempel nur unmittelbar vor oder unmittelbar nach dem Ausgabezeitstempel liegt.
Die Ausrichtungsfunktionen delta
, rate
und delta_gauge
berechnen ihre Ausgabe anhand der Änderung des Werts der Eingabezeitachse für das Zeitfenster zwischen der Endzeit des Ausgabepunkts und dem Argument Dauer früher. Diese Wertänderung wird so berechnet:
Daher kann der Wert der Eingabezeitachse zu einem beliebigen Zeitpunkt durch lineare Interpolation zwischen dem nächsten Punkt vor und dem nächsten Punkt nach der Ausgabezeit berechnet werden. Die Änderung des Werts über ein bestimmtes Fenster ist die Differenz zwischen dem interpolierten Wert am früheren Zeitpunkt des Fensters und dem späteren Zeitpunkt.
Die Änderung im Fenster ist die Summe des Werts aller Punkte, deren Darstellung vollständig im Fenster liegt, und der Anteil der Anteile des Werts Punkte, deren Umfang das Fenster teilweise überschneidet.
Bei einer kumulativen Zeitachse wird die Interpolation eines Werts zwischen zwei aufeinanderfolgenden Punkten mit derselben Startzeit durch die lineare Interpolation zwischen den beiden Werten vorgenommen. Die Interpolation zwischen zwei aufeinanderfolgenden Punkten mit unterschiedlichen Startzeiten (so liegt die Startzeit des späteren Punkts zwischen den Endzeiten der beiden Punkte) wird so gemacht:
Wenn die Ausgabezeit zwischen der Endzeit des vorherigen Punkts und der Startzeit des späteren Punkts liegt, ist das Ergebnis der Wert des vorherigen Punkts. (Keine Änderung zwischen dem vorherigen Punkt und der Zurücksetzenszeit.)
Wenn die Ausgabezeit zwischen dem Beginn und dem Ende des späteren Punkts liegt, ist der Wert die lineare Interpolation zwischen null (beim Beginn) und dem Wert des Punkts.
Bei einer kumulativen Zeitachse ist die Wertänderung in einem bestimmten Fenster die Differenz zwischen dem interpolierten Wert am früheren Zeitpunkt des Fensters und dem späteren Zeitpunkt sowie einer Korrektur für das Zurücksetzen. Für jede Zurücksetzenszeit, die innerhalb des Zeitfensters liegt, wird der Wert des Punkts unmittelbar vor dieser Zurücksetzenszeit dem Änderungswert hinzugefügt, um zu berücksichtigen, dass der Zeitachsenwert zu diesem Zeitpunkt zurückgesetzt wird auf 0.
Die Aggregatorausrichter-Funktionen,
mean_aligner
,int_mean_aligner
, wenden eine Aggregationsfunktion auf die Eingabepunkte an, die in ein Zeitfenster fallen, dessen Breite durch das Argument Dauer gegeben ist und dessen späterer Zeitpunkt der Zeitstempel des Ausgabepunkts ist. Das Ergebnis dieser Aggregation ist der Wert des Ausgabepunkts.Die Maßeinheit der Ausgabe einer Ausrichtungsfunktion ist normalerweise identisch mit der der Eingabe. Es gibt folgende Ausnahmen:
Die Ausgabe von
rate
hat die Einheit der Eingabe geteilt durch die Einheit "s".Die Ausgabe von
count_true_aligner
hat die Einheit1
.Die Ausgabe von
fraction_true_aligner
hat die Einheit10^2.%
rate
Änderungsrate zu ausgerichteten Zeitpunkten berechnen.
Signatur:
ImplicitRowInput rate(
[ lit-Duration ] )
→ Double.Gauge (implizite Reiheneingabe)
Der rate
-Ausrichter arbeitet mit Eingabezeitachsen mit einer einzelnen Wertspalte vom Typ Int oder *Double. Es wird immer eine Ausgabetabelle mit einer einzelnen Wertspalte vom Typ Double und dem Zeitachsentyp Gauge erstellt.
Der rate
-Ausrichter berechnet die Änderung des Werts der Zeitachse über das Fenster (wie hier beschrieben) und teilt diese durch die Breite des Fensters in Sekunden ab. Das Fenster reicht von der Zeit des Ausgabepunkts bis zur früheren Zeit des Dauer-Parameters.
Der Standardwert für das Argument Dauer ist der Ausrichtungszeitraum. Anders als bei der Ausrichtungsfunktion 'delta' ist es nicht erforderlich, dass der Ausrichtungszeitraum und die Fensterbreite übereinstimmen.
delta
Wertänderung zu ausgerichteten Zeitpunkten berechnen.
Signatur:
ImplicitRowInput delta(
[ lit-Duration ] )
→ InputType.Delta
(implizite Reiheneingabe)
Der delta
-Ausrichter arbeitet mit Eingabezeitachsen mit einer einzelnen Wertspalte vom Typ Summable (Int, Double oder Verteilung) und die Ausgabe ist eine Zeitachse, deren Wertspalte vom gleichen Typ ist, aber den Zeitachsentyp Delta hat.
Der Aligner "Delta_Gauge" berechnet die Änderung des Werts der Eingabezeitachse für das Zeitfenster zwischen der Ausgabezeit und dem vorigen Argument Dauer. Der Beginn des Ausgabepunkts ist das Argument Dauer vor der Ausgabezeit liegend (Endzeit des Punkts).
Für den delta
-Ausrichter ist es erforderlich, dass das Argument Dauer dem Ausrichtungszeitraum entspricht, auf den er ausgerichtet wird. Der Standardwert für das Argument Dauer ist der Ausrichtungszeitraum.
any_true_aligner
Richten Sie eine Bool-Zeitachse aus, indem Sie einen wahren Wert in einem Fenster finden.
Signatur:
ImplicitRowInput any_true_aligner(
[ lit-Duration ] )
→ Bool.Gauge
(implizite Reiheneingabe)
Die Funktion any_true_aligner
wird für eine Eingabetabelle mit einer einzelnen Wertspalte vom Typ Bool ausgeführt und erzeugt eine Ausgabetabelle mit einer einzelnen Wertspalte vom Typ Bool und einem Zeitachsentyp Gauge.
Das Argument Dauer gibt die Breite eines Zeitfensters für jeden Ausgabepunkt an, der zum Zeitpunkt dieses Ausgabepunkts endet. Wenn das Argument Dauer nicht angegeben ist, wird standardmäßig der Ausrichtungszeitraum verwendet. Der Wert eines Ausgabepunktes ist true
, wenn ein beliebiger Eingabepunkt im Fenster auf wahr verweist, andernfalls ist er false
.
count_true_aligner
Richten Sie eine Bool-Zeitachse aus, indem Sie die wahren Werte in einem Fenster zählen.
Signatur:
ImplicitRowInput count_true_aligner(
[ lit-Duration ] )
→ Int.Gauge
(implizite Reiheneingabe)
Die Funktion count_true_aligner
wird für eine Eingabetabelle mit einer einzelnen Wertspalte vom Typ Bool ausgeführt und erzeugt eine Ausgabetabelle mit einer einzelnen Wertspalte vom Typ Int und einem Zeitachsentyp Gauge.
Das Argument Dauer gibt die Breite eines Zeitfensters für jeden Ausgabepunkt an, der zum Zeitpunkt dieses Ausgabepunkts endet. Wenn das Argument Dauer nicht angegeben ist, wird standardmäßig der Ausrichtungszeitraum verwendet. Der Wert eines Ausgabepunkts ist die Anzahl der Eingabepunkte im Fenster mit dem Wert true
.
delta_gauge
Änderung des Werts zu ausgerichteten Zeitpunkten als Gauge-Zeitachse berechnen.
Signatur:
ImplicitRowInput delta_gauge(
[ lit-Duration ] )
→ InputType.Gauge
(implizite Reiheneingabe)
Der delta_gauge
-Ausrichter arbeitet mit Eingabezeitachsen mit einer einzelnen Wertspalte vom Typ Summable (Int, Double oder Distribution) und die Ausgabe ist eine Zeitachse, deren Wertspalte vom gleichen Typ ist, aber den Zeitachsentyp Gauges hat.
Der delta_gauge
-Ausrichter berechnet die Änderung des Werts der Eingabezeitserie über das Fenster (wie hier beschrieben). Das Fenster reicht von der Zeit des Ausgabepunkts bis zur früheren Zeit des Dauer-Parameters.
Der Standardwert für das Argument Dauer ist der Ausrichtungszeitraum. Anders als bei der Ausrichtungsfunktion 'delta' ist es nicht erforderlich, dass der Ausrichtungszeitraum und die Fensterbreite übereinstimmen.
fraction_true_aligner
Richten Sie eine Bool-Zeitachse an dem Anteil der wahren Werte in einem Fenster aus.
Signatur:
ImplicitRowInput fraction_true_aligner(
[ lit-Duration ] )
→ Double.Gauge (implizite Reiheneingabe)
Die Funktion fraction_true_aligner
wird für eine Eingabetabelle mit einer einzelnen Wertspalte vom Typ Bool ausgeführt und erzeugt eine Ausgabetabelle mit einer einzelnen Wertspalte vom Typ Double und Art der Zeitachse
Das Argument Dauer gibt die Breite eines Zeitfensters für jeden Ausgabepunkt an, der zum Zeitpunkt dieses Ausgabepunkts endet. Wenn das Argument Dauer nicht angegeben ist, wird standardmäßig der Ausrichtungszeitraum verwendet. Der Wert eines Ausgabepunkts ist der Anteil aller Eingabepunkte im Fenster, die den Wert true
haben.
int_mean_aligner
Abgleichen durch Ermittlung des Mittelwerts von Int-Werten in einem Fenster.
Signatur:
ImplicitRowInput int_mean_aligner(
[ lit-Duration ] )
→ Int.Gauge
(implizite Reiheneingabe)
Die Funktion int_mean_aligner
wird für eine Eingabetabelle mit einer einzelnen Wertspalte vom Typ Int und dem Zeitachsentyp Gauge oder Delta ausgeführt. Es wird eine Ausgabetabelle mit einer einzelnen Wertspalte vom Typ Int und dem Zeitachsentyp Gauge erstellt.
Das Argument Dauer gibt die Breite eines Zeitfensters für jeden Ausgabepunkt an, der zum Zeitpunkt dieses Ausgabepunkts endet. Wenn das Argument Dauer nicht angegeben ist, wird standardmäßig der Ausrichtungszeitraum verwendet. Der Wert eines Ausgabepunktes ist der Mittelwert der Wertpunkte der Eingabetabelle, die auf dieses obige Fenster verweisen, gerundet auf den nächsten ganzzahligen Wert.
interpolate
Interpolierte Werte zu ausgerichteten Zeitpunkten berechnen.
Signatur:
ImplicitRowInput interpolate(
[ lit-Duration ] )
→ InputType.Gauge
(implizite Reiheneingabe)
Der interpolate
-Ausrichter bearbeitet eine Eingabetabelle mit einer einzelnen Wertspalte vom Typ (Int oder *Double) und dem Zeitachsentyp Gauge.
Es wird eine Ausgabetabelle mit einer einzelnen Wertspalte desselben Typs und desselben Zeitachsentyps erstellt.
Wenn die Ausgabezeit für die interpolate
-Ausrichter-Funktion mit der Endzeit eines Punkts in der Eingabezeitachse übereinstimmt, wird diese für den Ausgabepunkt verwendet. Andernfalls interpolate
Aligner berücksichtigt die Eingabepunkte, deren Endzeit der nächstgelegene frühere Punkt und spätere Punkt für die Ausgabezeit ist.
Wenn sie innerhalb des Dauer-Arguments des jeweils anderen liegen, ist der Ausgabewert die lineare Interpolation zwischen denjenigen zu Punkten zum Ausgabezeitpunkt. Wenn kein Eingabepunkt früher als die Ausgabezeit oder kein Eingabepunkt später als die Ausgabezeit ist oder wenn sich die beiden Eingabepunkte nicht innerhalb des Dauer-Arguments befinden, wird kein Ausgabewert erzeugt.
Der Standardwert für das Argument Duration ist doppelt der Ausrichtungszeitraum.
mean_aligner
Führen Sie die Ausrichtung durch, indem Sie den Mittelwert der Werte in einem Fenster ermitteln.
Signatur:
ImplicitRowInput mean_aligner(
[ lit-Duration ] )
→ Double.Gauge (implizite Reiheneingabe)
Die Funktion mean_aligner
wird für eine Eingabetabelle mit einer einzelnen Wertspalte des numerischen Typs verwendet. (Int oder Double) und Gauge- oder Delta-Zeitachsenart. Sie erzeugt eine Ausgabetabelle mit einer einzelnen Wertspalte des Typs Double und der Zeitachsenart Gauge.
Das Argument Dauer gibt die Breite eines Zeitfensters für jeden Ausgabepunkt an, der zum Zeitpunkt dieses Ausgabepunkts endet. Wenn das Argument Dauer nicht angegeben ist, wird standardmäßig der Ausrichtungszeitraum verwendet. Der Wert eines Ausgabepunktes ist der Mittelwert der Wertpunkte der Eingabetabelle, die in dieses obige Fenster fallen.
next_older
Angleichung der Zeitpunkte durch Übergang von einer früheren zu einer späteren Zeit.
Signatur:
ImplicitRowInput next_older(
[ lit-Duration ] )
→ InputType.Gauge
(implizite Reiheneingabe)
Der next_older
-Ausrichter wird für Zeitachsen mit einer beliebigen Anzahl von Wertspalten eines beliebigen Typs verwendet, jedoch alle mit dem Zeitachsentyp Gauge. Er erzeugt Ausgabespalten desselben Typs und derselben Art von Zeitachsen.
Der next_older
-Ausrichter erstellt einen Ausgabepunkt, indem er den spätestens Eingabepunkt ermittelt, dessen Endzeit nicht später als die Ausgabezeit ist und dessen Endzeit nicht weiter von der Ausgabezeit als das Argument Dauer entfernt ist. Wenn kein solcher Eingabepunkt vorhanden ist, wird kein Ausgabepunkt erstellt.
Der Standardwert für das Argument Duration ist doppelt der Ausrichtungszeitraum.
next_younger
Angleichung der Zeitpunkte durch Übergang von einer späteren zu einer früheren Zeit.
Signatur:
ImplicitRowInput next_younger(
[ lit-Duration ] )
→ InputType.Gauge
(implizite Reiheneingabe)
Der next_younger
-Ausrichter wird für Zeitachsen mit einer beliebigen Anzahl von Wertspalten eines beliebigen Typs verwendet, jedoch alle mit dem Zeitachsentyp Gauge. Er erzeugt Ausgabespalten desselben Typs und derselben Art von Zeitachsen.
Der next_younger
-Ausrichter erstellt einen Ausgabepunkt, indem er den frühesten Eingabepunkt ermittelt, dessen Endzeit nicht früher als die Ausgabezeit ist und dessen Endzeit nicht weiter von der Ausgabezeit als das Argument Dauer entfernt ist. Wenn kein solcher Eingabepunkt vorhanden ist, wird kein Ausgabepunkt erstellt.
Der Standardwert für das Argument Duration ist doppelt der Ausrichtungszeitraum.
Einheiten bearbeiten
Diese Funktionen ändern die Einheiten der Ausdrücke, auf die sie angewendet werden.
scale
Skaliert einen Wert auf eine andere Maßeinheit.
Signatur:
scale(
Num,
[ lit-String ] )
→
Double
scale(
Dauer,
[ lit-String ] )
→
Double
scale(
Date,
[ lit-String ] )
→
Double
Die Funktion scale
gibt den Wert des ersten Arguments zurück, gegebenenfalls in Double konvertiert und möglicherweise skaliert, sodass die Einheiten vom zweiten Argument übernommen werden.
Wird kein zweites Argument angegeben, wandelt die Funktion scale
das erste Argument nur in Double um, ohne die Einheiten zu ändern. Eine Ausnahme hiervon bilden Fälle, in denen die automatische Skalierung wie hier beschrieben aufgerufen wird. In diesem Fall wird das zweite Argument implizit bereitgestellt und scale
verhält sich genauso wie bei zwei Argumenten.
Das zweite Argument muss, falls vorhanden, ein gültiger UCUM-Codestring für die Einheit sein, auf die das erste Argument skaliert werden soll. In diesem Fall bezeichnet der zurückgegebene Wert die gleiche physische Menge wie der Eingabewert, nur in den vom zweiten Argument angegebenen Einheiten ausgedrückt. Dazu wird das Argument mit dem entsprechenden Skalierungsfaktor multipliziert.
Der Ausdruck scale(3 "min", "s")
wandelt beispielsweise den Wert 3
mit den Einheiten Minuten (min
) in den Wert 180
mit den Einheiten Sekunden (s
) um. Derselbe Zeitraum, ausgedrückt in unterschiedlichen Einheiten.
Es ist ein Fehler, wenn das erste Argument keine Einheit hat oder die Einheit des ersten Arguments nicht dieselbe Dimension wie der Einheitencode des zweiten Arguments hat, falls vorhanden. Wenn sie nicht dieselbe Dimension haben, kann das erste Argument nicht skaliert werden, um die Dimension des zweiten Arguments zu erhalten.
Beispiel: Die Angabe von scale(3 "km", "m/s")
, was 3 Kilometer auf eine Anzahl an Metern pro Sekunde skalieren möchte, wäre falsch, da Kilometer die Dimension "Distanz" und Meter pro Sekunde die Dimension "Distanz über Zeit" (Geschwindigkeit) hat. Es gibt keinen Skalierungsfaktor, der eine Entfernung in eine Geschwindigkeit umwandeln kann. Man müsste die Entfernung durch einen Wert mit Zeiteinheiten teilen, um dies zu erreichen. Beispiel: scale(3 "km" / 10
"min", "m/s")
skaliert .3 "km/min"
auf 5 "m/s"
.
Wenn das erste Argument ein Datums- oder Dauer-Argument ist, muss das zweite Argument eine Zeiteinheit enthalten (z. B. "s"
, "h"
oder "wk"
). Der zurückgegebene Wert ist ein Double-Wert, der die Zeit des ersten Argumentwerts in den vom zweiten Argument angegebenen Einheiten angibt. Für einen Datumswert ist dies die Dauer seit der Unix-Epoche.
scale(1m, "s")
ergibt beispielsweise den Wert 60.0
mit den Einheiten s
, und scale(d'1970/01/01-01:00:00+00', "h")
ergibt den Wert 1.0
mit den Einheiten "h" (eine Stunde in die Unix-Epoche hinein).
cast_units
Setzt die Maßeinheit eines Werts fest.
Signatur:
cast_units(
Summable,
lit-String )
→
FirstArgType
Die Funktion cast_units
gibt den unveränderten Wert des ersten Arguments zurück, legt die Maßeinheit für diesen Wert so fest, dass die Einheit vom zweiten Argumentstring angegeben wird.
Der String muss ein Wert-UCUM-Codestring für die gewünschte Einheit sein. Jede beliebige Einheit, die das erste Argument hätten haben könnte, bevor das Anwenden dieser Funktion ignoriert wird.
Regelmäßiges Fenster
Die regelmäßigen Fensterfunktionen werden verwendet, um ein tatsächlich übergebenes Dauer-Argument an ein WindowDuration zu annotieren, das eine Fensterbreite angibt, die zur Auswahl von Eingabepunkten für regelmäßige Berechnung verwendet wird. Ein solches Argument wird an den Tabellenvorgang group_by
übergeben, der ausgerichtete Zeitachsen ausgibt. Die Funktionen window
und sliding
beschränken die Breite des Eingabefensters auf den Ausrichtungszeitraum für die Ausgabe.
Die Funktion window
gibt an, dass der Ausrichtungszeitraum und die Fensterbreite identisch sein müssen, damit die Eingabepunktfenster nicht überlappen.
Die sliding
-Funktion gibt an, dass der Ausrichtungszeitraum kleiner als die Fensterbreite sein kann, wodurch sich Eingabefenster überlappen.
window
Gibt ein Fenster an, das mit dem Ausrichtungszeitraum übereinstimmt.
Signatur:
window(
[ lit-Duration ] )
→
lit-WindowDuration
Die window
-Funktion annotiert eine Dauer Das tatsächliche Argument, das an ein WindowDuration-Argument übergeben wird, das eine Fensterbreite angibt, die in einer Berechnung verwendet wird, die ausgerichtete Zeitachsen generiert. Es erfordert, dass die Fensterbreite und der Ausgabeausrichtungszeitraum dem Argument Dauer entsprechen.
Wenn das Argument Dauer nicht angegeben ist, gibt die Fensterbreite den Ausrichtungszeitraum für die Ausgabe an, der jedoch definiert ist.
Beispielsweise erzeugt der Tabellenvorgang |
group_by
window(5m), .mean
Ausgabepunkte, die dem Mittelwert der Eingabepunkte entsprechen, die innerhalb eines 5 Minuten-Fensters der Ausgabeendzeit liegen. Die window
-Funktion annotiert die Fensterbreite 5m
, sodass der Ausrichtungszeitraum von group_by
ebenfalls 5 Minuten betragen muss. Für den Tabellenvorgang | group_by window(), .mean
muss die Fensterbreite ebenfalls mit dem Ausrichtungszeitraum der Ausgabe übereinstimmen, es wird jedoch nicht festgelegt, was das sein muss.
sliding
Gibt ein Fenster an, das gleitend (überlappt) und nicht disjunkt ist.
Signatur:
sliding(
lit-Duration )
→ lit-SlidingDuration
Die sliding
-Funktion annotiert eine Dauer Das tatsächliche Argument, das an ein WindowDuration-Argument übergeben wird, das eine Fensterbreite angibt, die in einer Berechnung verwendet wird, die ausgerichtete Zeitachsen generiert. Die Fensterbreite muss dem Argument Dauer entsprechen und der Ausrichtungszeitraum darf nicht größer sein (darf aber kleiner sein).
Beispielsweise erzeugt der Tabellenvorgang |
group_by
sliding(5m), .mean
Ausgabepunkte, die dem Mittelwert der Eingabepunkte entsprechen, die innerhalb eines 5 Minuten-Fensters der Ausgabeendzeit liegen. Die sliding
-Funktion, die die 5m
-Fensterbreite annotiert, gibt an, dass der Ausrichtungszeitraum von group_by
nicht länger als 5 Minuten sein darf. Wenn ein | every 1m
-Tabellenvorgang eine 1-Minuten-Ausrichtung angibt, überlappen die 4 Minuten jedes 5-Minuten-Fensters das Fenster des nächst früheren Ausgabepunkts.
Vertrieb
count_from
Die Anzahl der Werte in einem Verteilungswert.
Signatur:
count_from(
Distribution.CumulativeOK )
→
Int.FirstArgKind
Die count_from
-Funktion gibt die Größe der Population von Werten im eingegebenen Verteilungswert zurück.
Die mit dem Ergebnis von count_from
verbundene Maßeinheit ist 1
.
sum_from
Die Summe der Werte in einem Verteilungswert.
Signatur:
sum_from(
Distribution.CumulativeOK )
→
Double.FirstArgKind
Die Funktion sum_from
gibt die Summe aller Werte zurück, die in ihrem Eingabeverteilungswert enthalten sind.
Das Ergebnis von sum_from
hat dieselbe Maßeinheit wie die Eingabe.
mean_from
Der Mittelwert der Werte in einem Verteilungswert.
Signatur:
mean_from(
Verteilung )
→ Double
Die Funktion mean_from
gibt das arithmetische Mittel aller Werte zurück, die in ihrem Eingabeverteilungswert enthalten sind.
Das Ergebnis von mean_from
hat dieselbe Maßeinheit wie die Eingabe.
stddev_from
Die Standardabweichung der Werte in einem Verteilungswert.
Signatur:
stddev_from(
Verteilung )
→ Double
Die Funktion stddev_from
gibt die Varianz der Gesamtheit der Werte zurück, die in ihrem Eingabeverteilungswert enthalten sind.
Das Ergebnis von stddev_from
hat dieselbe Maßeinheit wie die Eingabe.
variance_from
Die Varianz der Werte in einem Verteilungswert.
Signatur:
variance_from(
Verteilung )
→ Double
Die Funktion variance_from
gibt die Varianz der Gesamtheit der Werte zurück, die in ihrem Eingabeverteilungswert enthalten sind.
Das Ergebnis der Funktion "variance_from" hat keine Maßeinheit.
median_from
Der Mittelwert der Werte in einem Verteilungswert.
Signatur:
median_from(
Verteilung )
→ Double
Die median_from
-Funktion gibt eine Schätzung des Medianwerts der Gesamtheit der Werte zurück, die in ihrem Eingabeverteilungswert enthalten sind.
Das Ergebnis von median_from
hat dieselbe Maßeinheit wie die Eingabe.
percentile_from
Ein Perzentil der Werte in einem Verteilungswert.
Signatur:
percentile_from(
Verteilung,
lit-Num )
→ Double
Die percentile_from
-Funktion gibt eine Schätzung des Perzentils der Gesamtheit der Werte zurück, die in ihrem Eingabeverteilungswert enthalten sind. Das Argument Num gibt das Perzentil an, das als Zahl zwischen 0 und 100 schätzen wird.
Das Ergebnis von percentile_from
hat dieselbe Maßeinheit wie die Eingabe.
fraction_less_than_from
Der Anteil der Werte in einer Verteilung, die kleiner als ein fester Wert sind.
Signatur:
fraction_less_than_from(
Verteilung,
lit-Num )
→ Double
Die fraction_less_than_from
-Funktion gibt eine Schätzung des Populationsanteils der in ihrem Eingabeverteilungswert enthaltenen Werte zurück, die kleiner als ihr Num-Argument sind.
Die mit dem Ergebnis von fraction_less_than
verbundene Maßeinheit ist 10^2.%
.
bounded_percentile_from
Ein Perzentil der Werte innerhalb einer Grenze in einem Verteilungswert.
Signatur:
bounded_percentile_from(
Verteilung,
lit-Num,
[ lit-Num ],
[ lit-Num ] )
→
Double
Die Funktion bounded_percentile_from
wird für eine Teilmenge des in der Eingabeverteilung enthaltenen Werts ausgeführt. Es wird eine Schätzung der Grundgesamtheit der Werte vorgenommen, die größer als der zweite Num-Parameter, falls angegeben, und kleiner oder gleich dem dritten Num-Parameter, falls angegeben, sind. Es muss mindestens eines der Num-Argumente für das zweite und dritte Argument angegeben werden. Wenn beide Argumente angegeben sind, muss das zweite Argument kleiner als das dritte sein.
Dies gibt eine Schätzung des Perzentils dieser geschätzten Wertepopulation zurück. Das erste Num-Argument gibt das zu schätzende Perzentil als Zahl zwischen 0 und 100 an.
Das Ergebnis von bounded_percentile_from
hat dieselbe Maßeinheit wie die Eingabe.
rebucket
Verteilungswert, der in eine neue Bucket-Spezifikation umgewandelt wurde
Signatur:
rebucket(
Verteilung,
lit-BucketSpecification )
→ Verteilung
Dadurch wird der eingegebene Verteilungswert in einen Verteilungswert umgewandelt, dessen Bucket-Spezifikation die im zweiten Argument BucketSpecification angegebene ist.
Dadurch werden die Zählungen von jedem Bucket in der Eingabeverteilung auf die Buckets der Ausgabeverteilung unter der Annahme verteilt, dass die in einem Bucket gezählten Werte gleichmäßig über den Bereich des Buckets verteilt sind. Die Ausgabeverteilung hat die gleiche Gesamtzahl wie die Eingabeverteilung, aber die Anzahl wird anders auf die Ausgabe-Distributions-Buckets verteilt. Die Ausgabeverteilung hat dieselbe Summe, denselben Mittelwert und dieselbe Standardabweichung wie die Eingabeverteilung.
Bucket-Spezifizierer
Ein Verteilungswert hat ein Histogramm, das aus Buckets besteht. Jeder Bucket ist einem Wertebereich zugeordnet und enthält die Anzahl der Werte in der Verteilung, die in diesen Bereich fallen. Jede Verteilung hat eine Bucket-Spezifikation, die die Grenzen für die Buckets in einem Verteilungswert beschreibt. Die Funktionen in diesem Abschnitt generieren Bucket-Spezifikationen.
powers_of
Eine Bucket-Spezifikation mit exponentiell zunehmenden Bucket-Grenzen.
Signatur:
powers_of(
lit-Num )
→
lit-BucketSpecification
Die Funktion powers_of
gibt eine Bucket-Spezifikation zurück, bei der die Obergrenze jedes Buckets ein fester Faktor (gegeben durch das Num-Argument) mal der Untergrenze ist. Daher ist die Bucket-Größe exponentiell zu, und der Fehler bei der Berechnung der Perzentile wird durch einen konstanten Faktor des wahren Werts begrenzt.
Dadurch wird weder die Anzahl der Buckets noch die Untergrenze des ersten Buckets festgelegt, die entweder durch "num_buckets" und "lower" angegeben werden müssen, oder es werden die Standardwerte (30 Buckets, Untergrenze von 1,0) verwendet.
Wenn die Bucket-Spezifikation von powers_of
angegeben wird, muss die Untergrenze größer als 0 sein.
Im folgenden Beispiel wird eine Bucket-Spezifikation mit 50 Buckets zugewiesen, deren Größe exponentiell mit einer Rate von 1,1 steigt, beginnend bei 100. Die Bucket-Grenzen lauten also 1, 1,1, 1,21, 1.331 usw.
powers_of(1.1).num_buckets(30).lower(100.0)
fixed_width
Eine Bucket-Spezifikation mit gleich großen Buckets.
Signatur:
fixed_width(
lit-Num )
→
lit-BucketSpecification
Die fixed_width
-Funktion gibt eine Bucket-Spezifikation zurück, bei der die Obergrenze jedes Buckets (festgelegt durch das Argument Num) größer als die Untergrenze ist. Daher ist die Bucket-Größe fest.
Dadurch wird weder die Anzahl der Buckets noch die Untergrenze des ersten Buckets festgelegt, die entweder durch "num_buckets" und "lower" angegeben werden müssen, oder es werden die Standardwerte (30 Buckets, Untergrenze von 1,0) verwendet.
Im folgenden Beispiel wird eine Bucket-Spezifikation mit 100 Buckets der Größe 1 vergeben, die mit 1 markiert ist. Dies ist eine gute Spezifikation für eine Verteilung von Prozentwerten.
fixed_width(1).num_buckets(100)
custom
Eine Bucket-Spezifikation aus einer Liste von Bucket-Grenzen.
Signatur:
custom(
lit-Num... )
→
lit-BucketSpecification
Die Funktion custom
gibt eine Bucket-Spezifikation mit explizit angegebenen Bucket-Grenzen zurück. Die Funktion akzeptiert mehrere numerische Argumente, die in aufsteigender Reihenfolge angegeben werden müssen. Die Untergrenze des ersten Buckets wird durch das erste Argument und die Obergrenze des letzten Buckets durch das letzte Argument angegeben. Jedes Zwischenargument gibt die Obergrenze des vorherigen Buckets und die Obergrenze des nächsten Buckets an.
Dadurch wird die Bucket-Spezifikation vollständig bestimmt, d. h. die Anzahl der Buckets und die genaue Grenze jedes Buckets.
Im folgenden Beispiel wird eine Bucket-Spezifikation mit drei Buckets angegeben. Die erste hat die Grenzen 3 und 27, die zweite 27 und 105 und die dritte 105 und 277.
custom(3,27,105,277)
num_buckets
Legt die Anzahl der Buckets in einer Bucket-Spezifikation fest.
Signatur:
num_buckets(
lit-BucketSpecification,
lit-Num )
→ lit-BucketSpecification
Bei Anwendung auf eine Bucket-Spezifikation, die nicht über die ermittelte Anzahl von Buckets verfügt, gibt die Funktion num_buckets
eine Bucket-Spezifikation mit einer Anzahl von Buckets zurück, die durch das Argument Num angegeben wird. Alle anderen Aspekte der Eingabe-Bucket-Spezifikation bleiben erhalten.
Es ist ein Fehler, num_buckets
auf eine Bucket-Spezifikation anzuwenden, für die bereits die Anzahl der ermittelten Buckets festgelegt ist.
bounds
Legt die Untergrenze des ersten Buckets und die Obergrenze des letzten fest.
Signatur:
bounds(
lit-BucketSpecification,
lit-Num,
lit-Num )
→ lit-BucketSpecification
Bei Anwendung auf eine Bucket-Spezifikation, bei der weder die Untergrenze des ersten Buckets noch die Obergrenze des letzten Buckets ermittelt wurde, gibt die bounds
-Funktion eine Bucket-Spezifikation zurück, bei der die Untergrenze des ersten Buckets durch das erste Num-Argument und die Obergrenze des letzten Buckets durch das zweite Num-Argument gegeben ist. Alle anderen Aspekte der Eingabe-Bucket-Spezifikation bleiben erhalten.
Es ist ein Fehler, bounds
auf eine Bucket-Spezifikation anzuwenden, für die bereits die Untergrenze des ersten Buckets oder die Obergrenze des zuletzt ermittelten Buckets festgelegt ist.
lower
Legt die Untergrenze des ersten Buckets in einer Bucket-Spezifikation fest.
Signatur:
lower(
lit-BucketSpecification,
lit-Num )
→ lit-BucketSpecification
Bei Anwendung auf eine Bucket-Spezifikation, bei der die Untergrenze des ersten Buckets nicht bestimmt wurde, gibt die Funktion num_buckets
eine Bucket-Spezifikation zurück, bei der die Untergrenze des ersten Buckets durch das Num-Argument gegeben ist. Alle anderen Aspekte der Eingabe-Bucket-Spezifikation bleiben erhalten.
Wenn Sie lower
auf eine Bucket-Spezifikation anwenden, die bereits die Untergrenze des ersten Buckets hat, ist es ein Fehler.
Sonstiges
cast_double
Int-Wert in Double umwandeln.
Signatur:
cast_double(
Num.CumulativeOK )
→
Double.FirstArgKind
Die cast_double
-Funktion verwendet ein einzelnes Int-Argument und gibt den nächsten Double-Wert zurück.
Das Ergebnis von cast_double
hat dieselbe Maßeinheit wie die Eingabe.
cast_gauge
Einen kumulativen oder Delta-Zeitachsenwert in Gauge umwandeln.
Signatur:
cast_gauge(
ColumnValue.CumulativeOK )
→
FirstArgType.Gauge
Die cast_gauge
-Funktionen geben den Wert ihres Arguments zurück, ändern jedoch den Zeitachsentyp des Werts in Gauge.
Wenn dies zu einer Ausgabetabelle ohne Wertspalten mit dem Zeitachsentyp Delta führt, enthält die Ausgabetabelle keine Startzeitspalte.
Das Ergebnis von cast_gauge
hat dieselbe Maßeinheit wie die Eingabe.
within
Gibt das Fenster der Sortierwertberechnung an.
Signatur:
within(
ColumnValue,
[ lit-DateOrDuration ],
[ lit-DateOrDuration ] )
→
Windowed.FirstArgKind
Die within
-Funktion dekoriert den an das Windowed(Num)-Sortierwertargument gebundenen Ausdruck des top
- oder bottom
-Tabellenvorgangs. Sie gibt das Fenster an, in dem der Sortierwertausdruck ausgewertet wird, indem einer oder zwei von drei Werten angegeben werden: die älteste (Start-)Zeit des Fensters, die jüngste (End-)Zeit des Fensters oder die Dauer des Fensters.
Wenn eines der beiden Argumente von within
eine positive Dauer ist, wird die Breite des Fensters festgelegt. Es kann höchstens eines der Argumente eine solche Dauer sein.
Wenn das erste Argument ein Date ist, wird die Startzeit angegeben.
Wenn das zweite Argument ein Date ist, wird die Endzeit angegeben. Wenn beide Date-Werte sind, muss der zweite Wert zeitlich später als der erste sein. Ein Date-Argument kann als Date-Literal oder mit einem negativen Dauer-Literal angegeben werden. Im zweiten Fall ist die Zeit die angegebene Dauer vor der Endzeit des äußeren Abfragefensters (siehe within
-Tabellenvorgang).
Wenn das erste Argument nicht angegeben wird, wird standardmäßig die Startzeit des äußeren Abfragefensters verwendet. Wenn das zweite Argument nicht angegeben wird, wird standardmäßig die Endzeit des äußersten Abfragefensters verwendet.
.mean().within(1h,-2h)
gibt beispielsweise an, dass der Reducer max
auf alle Punkte in der Eingabezeitachse angewendet werden soll, deren Endzeit innerhalb eines Fensters mit einer Breite von 1 Stunde und der Beendigung von zwei Stunden liegt.
Der Aggregator mean
wird auf alle Eingabepunkte angewendet, deren Endzeit in diesem Fenster liegt.
Beispiel: max(val()).within(10m)
gibt an, dass der max
-Reducer auf alle Punkte in der Eingabezeitachse angewendet werden soll, deren Endzeit in die Zeitraum fällt zwischen der Abfrageendzeit und 10 Minuten früher liegt.
Der Aggregator max
wird auf alle Eingabepunkte angewendet, deren Endzeit in diesem Fenster liegt.
Index der Tabellenvorgänge und -funktionen
Es folgt ein Index aller Tabellenvorgänge und -funktionen.
abs
Absoluter Wert.absent_for
Bedingung für das Fehlen einer Eingabe erstellen.add
Die Summe zweier Zahlen.adjacent_delta
Die Wertänderung zwischen einem Eingabepunkt und dem nächst früheren Punkt.adjacent_rate
Die Änderungsrate zwischen den Eingaben und den nächsten früheren Punkten (Zeilen).aggregate
Der Standardaggregatwert aus einer Gruppe von Werten eines beliebigen Typsalign
Erzeugt eine ausgerichtete Tabelle mithilfe einer Ausrichtungsfunktion.all_true
Die Verknüpfung einer Gruppe von booleschen Werten.and
Das logische "und" von zwei booleschen Werten.any_true
Die Disjunktion einer Gruppe von booleschen Werten.any_true_aligner
Richten Sie eine Bool-Zeitachse aus, indem Sie einen echten Wert in einem Fenster finden.ascii_to_lower
ASCII-Großbuchstaben in Kleinbuchstaben ändern.ascii_to_upper
ASCII-Kleinbuchstaben in Großbuchstaben ändern.bottom
Unterste Zeitachse nach einem Sortierwertausdruck auswählen.bottom_by
Zeitachsen nach einem Sortierwertausdruck in verschiedenen Gruppen auswählen.bounded_percentile_from
Ein Perzentil der Werte innerhalb einer Grenze in einem Verteilungswert.bounds
Untergrenze des ersten Buckets und Obergrenze des letzten Buckets festlegen.cast_double
Int-Wert in Double umwandeln.cast_gauge
Einen kumulativen oder Delta-Zeitachsenwert in Gauge umwandeln.cast_units
Setzt die Maßeinheit eines Werts fest.concatenate
String-Verkettung.condition
Der Eingabetabelle eine boolesche Bedingungsspalte hinzufügen.count
Die Anzahl der Werte in einer Gruppe von Werten.count_from
Die Anzahl der Werte in einem Verteilungswert.count_true
Die Anzahl der wahren Werte in einer Gruppe boolescher Werte.count_true_aligner
Richten Sie eine Bool-Zeitachse aus, indem Sie die wahren Werte in einem Fenster zählen.covariance
Die Kovarianz einer Gruppe von Wertenpaaren.custom
Eine Bucket-Spezifikation aus einer Liste von Bucket-Grenzen.delta
Wertänderung zu ausgerichteten Zeitpunkten berechnen.delta_gauge
Wertänderung zu ausgerichteten Zeitpunkten als Gauge Zeitachse berechnen.diameter
Das Maximum plus das Minimum einer Gruppe numerischer Werte.distribution
Eine Verteilung aus einer Gruppe von numerischen Werten oder Verteilungswerten.div
Das Verhältnis zweier Zahlen.end
Die Endzeit des Eingabepunkts (Zeile).eq
Gleich.every
Zeitraum für die Ausgabe der ausgerichteten Tabelle angeben.exp
Potenziertes e.false
Der boolesche Wert "false"fetch
Erstellt eine Tabelle aus der Datenbank.fetch_cumulative
Erstellt eine Tabelle mit kumulativen Zeitachsen aus der Datenbank.filter
Filtert Zeilen aus einer Eingabetabelle anhand eines Prädikats.filter_ratio
Berechnet das Verhältnis zweier gefilterter Summen der Eingabewertspalte.filter_ratio_by
berechnet ein gruppiertes Verhältnis von zwei gefilterten Summenwerten der Spalte mit den Eingabewerten.fixed_width
Eine Bucket-Spezifikation mit gleich großen Buckets.fraction_less_than
Der Bruchteil einer Gruppe von Werten, die kleiner als ein fester Wert sind.fraction_less_than_from
Der Bruchteil der Werte in einer Verteilung, die kleiner als ein fester Wert sindfraction_true
Der Anteil einer Gruppe boolescher Werte, die wahr sind.fraction_true_aligner
Richten Sie eine Bool-Zeitachse mit dem Anteil der tatsächlichen Werte in einem Fenster aus.ge
Größer als oder gleich.graph_period
Gibt den bevorzugten Ausgabezeitraum zum Zeichnen von Zeitachsengrafiken an.group_by
Fasst Zeilen nach zugeordneter Zeitachsenkennzeichnung und Zeitfenster zusammen.gt
Größer als.has
"True", wenn ein Mengenargument einen bestimmten Wert enthält.has_value
"True", wenn ein Argumentausdruck einen Wert berechnet.hash_tsid
Gibt einen Hash der Spalten der Zeitachsenkennzeichnung zurück.ident
Identitätstabellenvorgang: keine Änderung an der Eingabetabelle.if
Ein Wert, der auf Basis einer Bedingung aus zwei Werten ausgewählt wirdint_ceil
Ganzzahl der Obergrenze.int_div
Der Quotient aus der Teilung zweier Ganzzahlen.int_floor
Ganzzahl der Untergrenze.int_mean_aligner
Führen Sie die Ausrichtung durch, indem Sie den Mittelwert von Int-Werten in einem Fenster ermitteln.int_round
Nächste ganze Zahl.interpolate
Interpolierte Werte zu ausgerichteten Zeitpunkten berechnen.join
Natural Join mehrerer Tabellen.le
Kleiner als oder gleich.log
Natürlicher Logarithmus.lower
Legt die Untergrenze des ersten Buckets in einer Bucket-Spezifikation fest.lt
Kleiner als.map
Schreibt die Zeitachsenkennzeichnungs- und wertspalten jeder Zeile in einer Tabelle neu.max
: Das Maximum einer Gruppe numerischer Wertemean
Der Mittelwert einer Gruppe numerischer Werte.mean_aligner
Gleichen Sie den Mittelwert der Werte in einem Fenster ab.mean_from
Der Mittelwert der Werte in einem Verteilungswert.median
Der Mittelwert einer Gruppe numerischer Werte oder Verteilungswerte.median_from
Der Mittelwert der Werte in einem Verteilungswert.metric
Erstellt die Tabelle für einen bestimmten Messwerttyp aus einer Reihe von Tabellen.min
Minimum einer Gruppe numerischer Werte.mul
Das Produkt zweier Zahlen.ne
Ungleich.neg
Der negative Wert einer Zahl.next_older
Angleichung der Zeitpunkte durch Übergang von einer früheren zu einer späteren Zeit.next_younger
Angleichung der Zeitpunkte durch Übergang von einer späteren zu einer früheren Zeit.not
Die logische Negation eines booleschen Werts.num_buckets
Legt die Anzahl der Buckets in einer Bucket-Spezifikation fest.older
Ein Wert aus dem nächsten früheren Punkt (Zeile) in einer Zeitachse.or
Das logische "oder" von zwei booleschen Werten.or_else
Ein Wert oder, wenn es sich nicht um einen Wert handelt, ein anderer Wert.outer_join
Äußeres Natural Join zweier Tabellen.percentile
Ein Perzentil einer Gruppe von numerischen Werten oder Verteilungswerten.percentile_from
Ein Perzentil der Werte in einem Verteilungswert.pick_any
Der Wert eines beliebigen Elements einer Gruppe von Werten (beliebig gewählt).pos
Identität für numerische Eingaben.power
Eine Zahl potenziert zu einer anderen Zahl.powers_of
Eine Bucket-Spezifikation mit exponentiell zunehmenden Bucket-Grenzen.rate
Die Änderungsrate zu ausgerichteten Zeitpunkten berechnen.ratio
Das Verhältnis der Wertspalten von zwei ausgerichteten Eingabetabellen berechnen.re_extract
Werte extrahieren, die mit einem regulären Ausdruck in einem anderen String übereinstimmen.re_full_match
Wahr, wenn ein regulärer Ausdruck mit einem Stringwert teilweise übereinstimmt.re_global_replace
Ersetzt alle Übereinstimmungen eines regulären Ausdrucks in einem anderen String.re_partial_match
Wahr, wenn ein regulärer Ausdruck mit einem Stringwert teilweise übereinstimmt.re_replace
Ersetzen Sie die erste Übereinstimmung eines regulären Ausdrucks in einem anderen String.rebucket
Der in eine neue Bucket-Spezifikation konvertierte Verteilungswert.rem
Der Rest der Division von zwei Ganzzahlen.row_count
Die Anzahl der gefundenen Eingabezeilen.scale
Skaliert einen Wert auf eine andere Maßeinheit.singleton
Der Wert des Elements einer Gruppe von Werten mit nur einem Element.sliding
Gibt ein Fenster an, das gleitend (überlappt) und nicht disjunkt ist.sqrt
Quadratwurzel.start
Die Startzeit des Eingabepunkts (Zeile).stddev
Die Standardabweichung einer Gruppe von Werten.stddev_from
Die Standardabweichung der Werte in einem Verteilungswert.string_to_double
String in Double umwandeln.string_to_int64
String in Int umwandeln.sub
Die Differenz zweier Zahlen.sum
Die Summe einer Gruppe numerischer Werte.sum_from
Die Summe der Werte in einem Verteilungswert.time_shift
Zeitachsen zeitlich vorwärts verschieben.top
Wählt die oberste Zeitachse nach einem Sortierwertausdruck aus.top_by
Zeitachsen nach einem Sortierwertausdruck in verschiedenen Gruppen auswählen.true
Der boolesche Wert "wahr".unaligned_group_by
Aggregiert Zeilen nach der zugeordneten Zeitachsenkennzeichnung ohne Ausrichtung.union
Union mehrerer Tabellen.union_group_by
Aggregiert Zeilen aus mehreren Tabellen.unique
Der gemeinsame Wert einer Gruppe von Werten (die alle gleich sein müssen).utf8_normalize
Unicode-String, der sich für den Vergleich der Groß-/Kleinschreibung eignet.val
Der Wert einer Wertspalte im Eingabepunkt (Zeile).value
Schreibt die Wertspalten jeder Zeile in einer Tabelle neu.variance
Die Varianz einer Gruppe von numerischen Werten.variance_from
Die Varianz der Werte in einem Verteilungswert.weighted_distribution
Eine Verteilung aus einer Gruppe gewichteter Werte.window
Gibt ein Fenster an, das dem Ausrichtungszeitraum entspricht.window
Gibt das Fenster für Ausrichtungsvorgänge an.within
Gibt das Fenster der Sortierwertberechnung an.within
Gibt den Zeitraum der Abfrageausgabe an.