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. Es ist nicht möglich, geschachtelte Felder als Partitionsschlüssel zu verwenden, es sei denn, sie werden zusammen mit Aliasen verwendet. Sie können jedoch bestimmte Zeichen verwenden, um eine Hierarchie von Dateien 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 NVARCHAR(MAX)
, BIGINT
, FLOAT
oder BIT
(Kompatibilitätsstufe 1.2 oder höher) sein. Die Typen DateTime
, Array
und Records
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 Pfadmuster des Blobs 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.
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:
Nachdem der Auftrag ausgeführt wurde, sieht der clients
-Container z.B. wie folgt aus:
Jeder Ordner kann mehrere Blobs enthalten, und jedes Blob enthält einen oder mehrere Datensätze. Im vorherigen Beispiel ist ein einzelnes Blob in einem Ordner mit der Bezeichnung „"06000000"
“ mit den folgenden Inhalten enthalten:
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.
Begrenzungen
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}
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. z. B.select concat (col1, col2) as compositeColumn into blobOutput from input
. Anschließend können siecompositeColumn
als benutzerdefinierten Pfad in Azure Blob Storage angeben.Bei Partitionsschlüsseln wird die Groß- und Kleinschreibung nicht beachtet, sodass Partitionsschlüssel wie
John
undjohn
identisch sind. Außerdem können Ausdrücke nicht als Partitionsschlüssel verwendet werden. Beispielsweise funktioniert{columnA + columnB}
nicht.Wenn ein Eingabestream aus Datensätzen besteht, deren Partitionsschlüssel eine Kardinalität unter 8,000 besitzt, werden die Datensätze an vorhandene Blobs angefügt. Neue Blobs werden nur nach Bedarf erstellt. Wenn die Kardinalität über 8.000 liegt, gibt es keine Garantie dafür, dass in vorhandene Blobs geschrieben wird. Für eine beliebige Anzahl von Datensätzen mit demselben Partitionsschlüssel werden keine neuen Blobs erstellt.
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 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. z. B. {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 Feld Pfadpräfix hinzufügen, um eine Dropdownliste mit integrierten DateTime
-Formaten zu generieren.
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.
z. B. 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 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. Beispieldaten ist auch auf GitHub verfügbar.
Erstellen Sie eine Blobausgabesenke mit der folgenden Konfiguration:
Das vollständige Pfadmuster ist:
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.