Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
In diesem Artikel erfahren Sie, wie Sie mit der Neupartitionierung Ihre Azure Stream Analytics-Abfrage für Szenarien skalieren, die nicht vollständig parallelisiert werden können.
Die Verwendung der Parallelisierung ist in folgenden Situationen möglicherweise nicht möglich:
- Sie verfügen nicht über den Partitionsschlüssel für den Eingabestream.
- Ihre Quelle verteilt die Eingaben auf mehrere Partitionen, die später zusammengeführt werden müssen.
Eine Neupartitionierung oder „Umsortierung“ ist erforderlich, wenn Sie Daten in einem Stream verarbeiten, der nicht nach einem natürlichen Eingabeschema, wie der PartitionId für Event Hubs, gesharded ist. Nach einer Neupartitionierung kann jeder Shard unabhängig verarbeitet werden, sodass Sie die Streamingpipeline linear skalieren können.
Wie man neu partitioniert
Sie können Ihre Eingabe auf zwei Arten neu partitionieren:
- Verwenden eines separaten Stream Analytics-Auftrags für die Neupartitionierung
- Verwenden Sie einen einzelnen Auftrag, aber führen Sie zuerst die Neupartitionierung durch, bevor Sie Ihre benutzerdefinierte Analyselogik anwenden.
Erstellen eines separaten Stream Analytics-Auftrags zum Neupartitionieren der Eingabe
Sie können einen Job erstellen, der Eingaben liest und mithilfe eines Partitionsschlüssels in eine Event Hub-Ausgabe schreibt. Dieser Event Hub kann dann als Eingabe für einen anderen Stream Analytics-Auftrag verwendet werden, in dem Sie Ihre Analyselogik implementieren. Wenn Sie diese Event Hub-Ausgabe in Ihrem Auftrag konfigurieren, müssen Sie den Partitionsschlüssel angeben, auf dessen Grundlage Ihre Daten von Stream Analytics neu partitioniert werden sollen.
-- For compat level 1.2 or higher
SELECT *
INTO output
FROM input
--For compat level 1.1 or lower
SELECT *
INTO output
FROM input PARTITION BY PartitionId
Neupartitionieren der Eingabe innerhalb eines einzelnen Stream Analytics-Auftrags
Sie können auch einen Schritt in Ihre Abfrage einfügen, durch den die Eingabe zunächst neu partitioniert wird. Das Ergebnis kann dann von anderen Schritten in der Abfrage verwendet werden. Wenn Sie also beispielsweise die Eingabe auf der Grundlage der Geräte-ID (DeviceId) neu partitionieren möchten, lautet Ihre Abfrage wie folgt:
WITH RepartitionedInput AS
(
SELECT *
FROM input PARTITION BY DeviceID
)
SELECT DeviceID, AVG(Reading) as AvgNormalReading
INTO output
FROM RepartitionedInput
GROUP BY DeviceId, TumblingWindow(minute, 1)
In der folgenden Beispielabfrage werden zwei Streams mit neu partitionierten Daten verknüpft. Beim Verbinden von zwei Streams mit neu partitionierten Daten müssen diese Streams denselben Partitionsschlüssel und dieselbe Anzahl von Partitionen aufweisen. Das Ergebnis ist ein Stream, der über das gleiche Partitionsschema verfügt.
WITH step1 AS
(
SELECT * FROM input1
PARTITION BY DeviceID
),
step2 AS
(
SELECT * FROM input2
PARTITION BY DeviceID
)
SELECT * INTO output
FROM step1 PARTITION BY DeviceID
UNION step2 PARTITION BY DeviceID
Das Ausgabeschema muss mit dem Partitionsschlüssel des Streams und der Partitionsanzahl übereinstimmen, damit jeder Teilstream unabhängig geleert werden kann. Der Stream kann auch vor dem Leeren zusammengeführt und mit einem anderen Schema neu partitioniert werden. Sie sollten diese Methode jedoch vermeiden, da sie die allgemeine Latenz bei der Verarbeitung und die Ressourcennutzung erhöht.
Streaming-Einheiten für Repartitionierungen
Experimentieren Sie, und beobachten Sie die Ressourcennutzung Ihres Auftrags, um die genaue Anzahl der benötigten Partitionen zu ermitteln. Die Anzahl der Streamingeinheiten (SU) muss an die physischen Ressourcen angepasst werden, die für die einzelnen Partitionen benötigt werden. Im Allgemeinen sind für jede Partition sechs SUs erforderlich. Wenn dem Auftrag nicht genügend Ressourcen zugewiesen sind, wendet das System die Neupartitionierung nur an, wenn es für den Auftrag von Vorteil ist.
Neupartitionierungen für SQL-Ausgaben
Wenn Ihr Job eine SQL-Datenbank für die Ausgabe nutzt, verwenden Sie eine explizite Umverteilung, um die optimale Anzahl der Partitionen für maximalen Durchsatz festzulegen. Da SQL am besten mit acht Schreibern funktioniert, kann die Neuaufteilung des Flows auf acht vor dem Flushing (oder weiter oben im Prozess) die Jobleistung steigern.
Wenn mehr als acht Eingabepartitionen vorliegen, ist das Erben des Eingabepartitionierungsschemas möglicherweise keine geeignete Option. Erwägen Sie die Verwendung von INTO in Ihrer Abfrage, um die Zahl der Ausgabeschreiber explizit anzugeben.
Das folgende Beispiel liest die Eingabe, unabhängig davon, ob sie natürlich partitioniert ist, und partitioniert den Datenstrom in zehn Partitionen entsprechend der DeviceID-Dimension neu und leitet die Daten zur Ausgabe weiter.
SELECT * INTO [output]
FROM [input]
PARTITION BY DeviceID INTO 10
Weitere Informationen finden Sie unter Azure Stream Analytics-Ausgabe an Azure SQL-Datenbank.