Benutzerdefinierte Blobausgabepartitionierung in Azure Stream Analytics

Azure Stream Analytics unterstützt die benutzerdefinierte Blobausgabepartitionierung mit benutzerdefinierten Feldern oder Attributen und benutzerdefinierten DateTime-Pfadmustern.

Benutzerdefiniertes Feld oder Attribute

Durch Verwendung eines benutzerdefinierten Felds oder von Eingabeattributen ist eine größere Kontrolle über die Ausgabe möglich, sodass Workflows zur Verarbeitung von Downstreamdaten und zur Berichterstellung verbessert werden.

Optionen für den Partitionsschlüssel

Der Partitionsschlüssel oder Spaltenname zum Partitionieren von Eingabedaten kann alle Zeichen enthalten, die für Blobnamen akzeptiert werden. Geschachtelte Felder können nur in Verbindung mit Aliasen als Partitionsschlüssel verwendet werden, Sie können jedoch bestimmte Zeichen verwenden, um eine Dateienhierarchie zu erstellen. Beispielsweise können Sie mit der folgenden Abfrage eine Spalte erstellen, in der Daten aus zwei anderen Spalten kombiniert werden, um einen eindeutigen Partitionsschlüssel zu erzeugen.

SELECT name, id, CONCAT(name, "/", id) AS nameid

Der Partitionsschlüssel muss einen der Typen NVARCHAR(MAX), BIGINT, FLOAT oder BIT (Kompatibilitätsgrad 1.2 oder höher) aufweisen. DateTime-, Array- und Datensatztypen werden nicht unterstützt, können aber als Partitionsschlüssel verwendet werden, wenn sie in Zeichenfolgen konvertiert werden. Weitere Informationen finden Sie unter Azure Stream Analytics-Datentypen.

Beispiel

Angenommen, in einem Auftrag werden Eingabedaten von Live-Benutzersitzungen erfasst, die mit einem externen Dienst für Videospiele verbunden sind, wobei die erfassten Daten zum Identifizieren der Sitzungen die Spalte client_id enthalten. Zum Partitionieren der Daten nach client_id legen Sie das Feld für das Blobpfadmuster so fest, dass es beim Erstellen eines Auftrags das Partitionstoken {client_id} in Blobausgabeeigenschaften enthält. Da Daten mit verschiedenen Werten für client_id durch den Stream Analytics-Auftrag geleitet werden, erfolgt die Speicherung der Ausgabedaten basierend auf einem einzelnen client_id-Wert pro Ordner in separaten Ordnern.

Pfadmuster mit Client-ID

Wenn es sich bei der Auftragseingabe um Sensordaten von Millionen Sensoren handelt und jedem Sensor ein sensor_id-Wert zugewiesen ist, lautet das Pfadmuster analog zum Beispiel oben {sensor_id} , um die jeweiligen Sensordaten in unterschiedlichen Ordnern zu partitionieren.

Bei Verwendung der REST-API sieht der Ausgabeausschnitt einer für diese Anforderung verwendeten JSON-Datei beispielsweise wie folgt aus:

REST-API-Ausgabe

Sobald der Auftrag ausgeführt wird, sieht der clients-Container z.B. wie folgt aus:

clients-Container

Jeder Ordner kann mehrere Blobs enthalten, und jedes Blob enthält einen oder mehrere Datensätze. Im Beispiel oben ist ein einzelnes Blob in einem Ordner mit der Bezeichnung „06000000“ mit den folgenden Inhalten enthalten:

Blobinhalte

Beachten Sie, dass jeder Datensatz im Blob die Spalte client_id enthält, die mit dem Ordnernamen übereinstimmt, da client_id die Spalte war, die für die Partitionierung der Ausgabe im Ausgabepfad verwendet wurde.

Einschränkungen

  1. Nur ein benutzerdefinierter Partitionsschlüssel ist in der Blobausgabeeigenschaft des Pfadmusters zulässig. Alle der folgenden Pfadmuster sind gültig:

    • cluster1/{date}/{aFieldInMyData}
    • cluster1/{time}/{aFieldInMyData}
    • cluster1/{aFieldInMyData}
    • cluster1/{date}/{time}/{aFieldInMyData}
  2. Wenn Kunden mehr als ein Eingabefeld verwenden möchten, können sie mit CONCAT einen zusammengesetzten Schlüssel in der Abfrage für eine benutzerdefinierte Pfadpartition in der Blobausgabe erstellen. Beispiel: select concat (col1, col2) as compositeColumn into blobOutput from input. Anschließend können sie compositeColumn als benutzerdefinierten Pfad im Blobspeicher angeben.

  3. Bei Partitionsschlüsseln wird die Groß- und Kleinschreibung nicht beachtet, sodass Partitionsschlüssel wie John und john identisch sind. Außerdem können Ausdrücke nicht als Partitionsschlüssel verwendet werden. Beispielsweise kann {columnA + columnB} nicht verwendet werden.

  4. Wenn ein Eingabestream aus Datensätzen besteht, deren Partitionsschlüssel eine Kardinalität unter 8000 besitzt, werden die Datensätze an vorhandene Blobs angefügt und neue Blobs nur bei Bedarf erstellt. Wenn die Kardinalität über 8000 liegt, gibt es keine Garantie dafür, dass Daten in vorhandene Blobs geschrieben und neue Blobs nicht für eine beliebige Anzahl von Datensätzen mit dem gleichen Partitionsschlüssel erstellt werden.

  5. Wenn die Blobausgabe als unveränderlich konfiguriert ist, erstellt Stream Analytics bei jedem Senden von Daten ein neues Blob.

Benutzerdefinierte DateTime-Pfadmuster

Mit benutzerdefinierten DateTime-Pfadmustern können Sie ein Ausgabeformat festlegen, das mit den Hive Streaming-Konventionen übereinstimmt, damit Azure Stream Analytics Daten an Azure HDInsight und Azure Databricks zur weiteren Verarbeitung senden kann. Benutzerdefinierte DateTime-Pfadmuster können einfach mit dem Schlüsselwort datetime im Feld „Pfadpräfix“ der Blobausgabe und dem Formatbezeichner implementiert werden. Beispiel: {datetime:yyyy}.

Unterstützte Token

Die folgenden Formatbezeichnertoken können einzeln oder in Kombination verwendet werden, um benutzerdefinierte DateTime-Formate zu erhalten:

Formatbezeichner BESCHREIBUNG Ergebnisse zur Beispielzeit 2018-01-02T10:06:08
{datetime:yyyy} Das Jahr als vierstellige Zahl 2018
{datetime:MM} Monat von 01 bis 12 01
{datetime:M} Monat von 1 bis 12 1
{datetime:dd} Tag von 01 bis 31 02
{datetime:d} Tag von 1 bis 31 2
{datetime:HH} Stunde im 24-Stunden-Format, von 00 bis 23 10
{datetime:mm} Minuten von 00 bis 60 06
{datetime:m} Minuten von 0 bis 60 6
{datetime:ss} Sekunden von 00 bis 60 08

Wenn Sie keine benutzerdefinierten DateTime-Muster verwenden möchten, können Sie das Token {date} und/oder {time} zum Pfadpräfix hinzufügen, um eine Dropdownliste mit integrierten DateTime-Formaten zu generieren.

Alte DateTime-Formate von Stream Analytics

Erweiterbarkeit und Einschränkungen

Sie können beliebig viele Token, {datetime:<specifier>}, im Pfadmuster verwenden, bis Sie den Zeichengrenzwert für das Pfadpräfix erreichen. Formatbezeichner können innerhalb eines einzelnen Tokens nicht über die bereits in den Dropdownlisten für Datum und Uhrzeit aufgeführten Kombinationen hinaus kombiniert werden.

Für eine Pfadpartition von logs/MM/dd:

Gültiger Ausdruck Ungültiger Ausdruck
logs/{datetime:MM}/{datetime:dd} logs/{datetime:MM/dd}

Sie können denselben Formatbezeichner mehrmals im Pfadpräfix verwenden. Das Token muss jedes Mal wiederholt werden.

Hive-Streaming-Konventionen

Benutzerdefinierte Pfadmuster für Blob Storage können mit der Hive-Streaming-Konvention verwendet werden, die erwartet, dass Ordner im Ordnernamen mit column= gekennzeichnet sind.

Beispiel: year={datetime:yyyy}/month={datetime:MM}/day={datetime:dd}/hour={datetime:HH}.

Die benutzerdefinierte Ausgabe erübrigt das mühevolle Ändern von Tabellen und das manuelle Hinzufügen von Partitionen zu Portdaten zwischen Azure Stream Analytics und Hive. Stattdessen können viele Ordner automatisch wie folgt hinzugefügt werden:

MSCK REPAIR TABLE while hive.exec.dynamic.partition true

Beispiel

Erstellen Sie ein Speicherkonto, eine Ressourcengruppe, einen Stream Analytics-Auftrag und eine Eingabequelle gemäß der Schnellstartanleitung Schnellstart: Erstellen eines Stream Analytics-Auftrags mithilfe des Azure-Portals. Verwenden Sie dieselben Beispieldaten wie in der Schnellstartanleitung, die auch auf GitHub verfügbar sind.

Erstellen Sie eine Blobausgabesenke mit der folgenden Konfiguration:

Stream Analytics erstellt Blobausgabesenke

Das vollständige Pfadmuster sieht wie folgt aus:

year={datetime:yyyy}/month={datetime:MM}/day={datetime:dd}

Wenn Sie den Auftrag starten, wird in Ihrem Blobcontainer eine Ordnerstruktur basierend auf dem Pfadmuster erstellt. Sie können einen Drilldown bis zur Tagesebene ausführen.

Stream Analytics-Blobausgabe mit benutzerdefiniertem Pfadmuster

Nächste Schritte