Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.
Möglicherweise haben Sie einen Anwendungsfall, in dem Sie Dashboards haben, in denen Sie die Einzelwerte von Dimensionen als Variablen verwenden möchten, um die Metriken zu untersuchen, die einem bestimmten Datensegment entsprechen. Der folgende Snapshot ist ein Beispiel, bei dem das Dashboard die Einzelwerte verschiedener Dimensionen wie Region, Zelle, Silo, Microservice und Availability_Zone vorab ausfüllt. Hier zeigen wir ein Beispiel dafür, wie Sie geplante Abfragen verwenden können, um die Berechnung dieser unterschiedlichen Werte dieser Variablen anhand der Messwerte, die Sie verfolgen, erheblich zu beschleunigen.
Themen
Zu Rohdaten
Sie können SELECT DISTINCT verwenden, um die unterschiedlichen Werte zu berechnen, die sich aus Ihren Daten ergeben. Wenn Sie beispielsweise die unterschiedlichen Werte der Region ermitteln möchten, können Sie die Abfrage in diesem Formular verwenden.
SELECT DISTINCT region
FROM "raw_data"."devops"
WHERE time > ago(1h)
ORDER BY 1
Möglicherweise verfolgen Sie Millionen von Geräten und Milliarden von Zeitreihen. In den meisten Fällen beziehen sich diese interessanten Variablen jedoch auf Dimensionen mit niedrigerer Kardinalität, bei denen es sich um einige bis zehn Werte handelt. Die Berechnung von DISTINCT aus Rohdaten kann das Scannen großer Datenmengen erfordern.
Eindeutige Dimensionswerte vorab berechnen
Sie möchten, dass diese Variablen schnell geladen werden, damit Ihre Dashboards interaktiv sind. Darüber hinaus werden diese Variablen häufig bei jedem Ladevorgang des Dashboards berechnet, sodass sie auch kostengünstig sein sollten. Sie können die Suche nach diesen Variablen optimieren, indem Sie geplante Abfragen verwenden und sie in einer abgeleiteten Tabelle materialisieren.
Zunächst müssen Sie die Dimensionen identifizieren, für die Sie die DISTINCT-Werte oder Spalten berechnen müssen, die Sie bei der Berechnung des DISTINCT-Werts in den Prädikaten verwenden werden.
In diesem Beispiel können Sie sehen, dass das Dashboard unterschiedliche Werte für die Dimensionen Region, Zelle, Silo, Availability_Zone und Microservice auffüllt. Sie können also die folgende Abfrage verwenden, um diese eindeutigen Werte vorab zu berechnen.
SELECT region, cell, silo, availability_zone, microservice_name,
min(@scheduled_runtime) AS time, COUNT(*) as numDataPoints
FROM raw_data.devops
WHERE time BETWEEN @scheduled_runtime - 15m AND @scheduled_runtime
GROUP BY region, cell, silo, availability_zone, microservice_name
Hier sind einige wichtige Dinge zu beachten.
-
Sie können eine geplante Berechnung verwenden, um Werte für viele verschiedene Abfragen vorab zu berechnen. Beispielsweise verwenden Sie die vorherige Abfrage, um Werte für fünf verschiedene Variablen vorab zu berechnen. Sie benötigen also nicht für jede Variable einen. Sie können dasselbe Muster verwenden, um gemeinsame Berechnungen in mehreren Panels zu identifizieren und so die Anzahl der geplanten Abfragen zu optimieren, die Sie verwalten müssen.
-
Bei den Einzelwerten der Dimensionen handelt es sich nicht grundsätzlich um Zeitreihendaten. Sie konvertieren dies also mit dem @scheduled_runtime in Zeitreihen. Indem Sie diese Daten mit dem @scheduled_runtime -Parameter verknüpfen, können Sie auch verfolgen, welche Einzelwerte zu einem bestimmten Zeitpunkt erschienen sind, und so Zeitreihendaten daraus erstellen.
-
Im vorherigen Beispiel sehen Sie, wie ein Metrikwert verfolgt wird. In diesem Beispiel wird COUNT (*) verwendet. Sie können andere aussagekräftige Aggregate berechnen, wenn Sie sie für Ihre Dashboards verfolgen möchten.
Im Folgenden finden Sie eine Konfiguration für eine geplante Berechnung unter Verwendung der vorherigen Abfrage. In diesem Beispiel ist sie so konfiguriert, dass sie alle 15 Minuten mit dem Zeitplanausdruck cron (0/15 * * *? *).
{
"Name": "PT15mHighCardPerUniqueDimensions",
"QueryString": "SELECT region, cell, silo, availability_zone, microservice_name, min(@scheduled_runtime) AS time, COUNT(*) as numDataPoints FROM raw_data.devops WHERE time BETWEEN @scheduled_runtime - 15m AND @scheduled_runtime GROUP BY region, cell, silo, availability_zone, microservice_name",
"ScheduleConfiguration": {
"ScheduleExpression": "cron(0/15 * * * ? *)"
},
"NotificationConfiguration": {
"SnsConfiguration": {
"TopicArn": "******"
}
},
"TargetConfiguration": {
"TimestreamConfiguration": {
"DatabaseName": "derived",
"TableName": "hc_unique_dimensions_pt15m",
"TimeColumn": "time",
"DimensionMappings": [
{
"Name": "region",
"DimensionValueType": "VARCHAR"
},
{
"Name": "cell",
"DimensionValueType": "VARCHAR"
},
{
"Name": "silo",
"DimensionValueType": "VARCHAR"
},
{
"Name": "availability_zone",
"DimensionValueType": "VARCHAR"
},
{
"Name": "microservice_name",
"DimensionValueType": "VARCHAR"
}
],
"MultiMeasureMappings": {
"TargetMultiMeasureName": "count_multi",
"MultiMeasureAttributeMappings": [
{
"SourceColumn": "numDataPoints",
"MeasureValueType": "BIGINT"
}
]
}
}
},
"ErrorReportConfiguration": {
"S3Configuration" : {
"BucketName" : "******",
"ObjectKeyPrefix": "errors",
"EncryptionOption": "SSE_S3"
}
},
"ScheduledQueryExecutionRoleArn": "******"
}
Berechnung der Variablen aus der abgeleiteten Tabelle
Sobald bei der geplanten Berechnung die Einzelwerte in der abgeleiteten Tabelle hc_unique_dimensions_pt15m vormaterialisiert wurden, können Sie die abgeleitete Tabelle verwenden, um die Einzelwerte der Dimensionen effizient zu berechnen. Im Folgenden finden Sie Beispielabfragen zur Berechnung der Einzelwerte und zur Verwendung anderer Variablen als Prädikate in diesen Einzelwertabfragen.
Region
SELECT DISTINCT region
FROM "derived"."hc_unique_dimensions_pt15m"
WHERE time > ago(1h)
ORDER BY 1
Zelle
SELECT DISTINCT cell
FROM "derived"."hc_unique_dimensions_pt15m"
WHERE time > ago(1h)
AND region = '${region}'
ORDER BY 1
Silo
SELECT DISTINCT silo
FROM "derived"."hc_unique_dimensions_pt15m"
WHERE time > ago(1h)
AND region = '${region}' AND cell = '${cell}'
ORDER BY 1
Mikroservice
SELECT DISTINCT microservice_name
FROM "derived"."hc_unique_dimensions_pt15m"
WHERE time > ago(1h)
AND region = '${region}' AND cell = '${cell}'
ORDER BY 1
Availability Zone
SELECT DISTINCT availability_zone
FROM "derived"."hc_unique_dimensions_pt15m"
WHERE time > ago(1h)
AND region = '${region}' AND cell = '${cell}' AND silo = '${silo}'
ORDER BY 1