Partitionering van aangepaste blob-uitvoer van Azure Stream Analytics

Azure Stream Analytics ondersteunt het partitioneren van aangepaste blob-uitvoer met aangepaste velden of kenmerken en aangepaste datum/tijdpadpatronen.

Aangepast veld of aangepaste kenmerken

Aangepaste veld- of invoerkenmerken verbeteren downstreamwerkstromen voor gegevensverwerking en rapportage door meer controle over de uitvoer mogelijk te maken.

Opties voor partitiesleutels

De partitiesleutel, of kolomnaam, die wordt gebruikt voor het partitioneren van invoergegevens, kan elk teken bevatten dat wordt geaccepteerd voor blobnamen. Het is niet mogelijk om geneste velden als partitiesleutel te gebruiken, tenzij deze worden gebruikt in combinatie met aliassen, maar u kunt bepaalde tekens gebruiken om een hiërarchie van bestanden te maken. U kunt bijvoorbeeld de volgende query gebruiken om een kolom te maken waarin gegevens uit twee andere kolommen worden gecombineerd om een unieke partitiesleutel te maken.

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

De partitiesleutel moet NVARCHAR(MAX), BIGINT, FLOAT of BIT (compatibiliteitsniveau 1,2 of hoger) zijn. De typen DateTime, Array en Records worden niet ondersteund, maar kunnen worden gebruikt als partitiesleutels als ze worden geconverteerd naar tekenreeksen. Zie Azure Stream Analytics-gegevenstypen voor meer informatie.

Voorbeeld

Stel dat een taak invoergegevens overneemt van live gebruikerssessies die zijn verbonden met een externe videogameservice, waarbij opgenomen gegevens een kolom bevatten client_id om de sessies te identificeren. Als u de gegevens wilt partitioneren op client_id, stelt u het veld Blobpadpatroon in op het opnemen van een partitietoken {client_id} in blobuitvoereigenschappen bij het maken van een taak. Als gegevens met verschillende client_id waarden door de Stream Analytics-taak stromen, worden de uitvoergegevens opgeslagen in afzonderlijke mappen op basis van één client_id waarde per map.

Padpatroon met client-id

Als de taakinvoer sensorgegevens van miljoenen sensoren was waarbij elke sensor een sensor_id had, zou het padpatroon {sensor_id} zijn om elke sensorgegevens te partitioneren in verschillende mappen.

Wanneer u de REST API gebruikt, kan de uitvoersectie van een JSON-bestand dat voor die aanvraag wordt gebruikt eruitzien als in de volgende afbeelding:

REST API-uitvoer

Zodra de taak wordt uitgevoerd, kan de clients container eruitzien als de volgende afbeelding:

Clientscontainer

Elke map kan meerdere blobs bevatten waarbij elke blob een of meer records bevat. In het bovenstaande voorbeeld bevindt zich één blob in een map met het label '06000000' met de volgende inhoud:

Blob-inhoud

U ziet dat elke record in de blob een client_id kolom heeft die overeenkomt met de mapnaam, omdat de kolom die wordt gebruikt voor het partitioneren van de uitvoer in het uitvoerpad client_id is.

Beperkingen

  1. Er is slechts één aangepaste partitiesleutel toegestaan in de blobuitvoereigenschap Padpatroon. Alle volgende padpatronen zijn geldig:

    • cluster1/{date}/{aFieldInMyData}
    • cluster1/{time}/{aFieldInMyData}
    • cluster1/{aFieldInMyData}
    • cluster1/{date}/{time}/{aFieldInMyData}
  2. Als klanten meer dan één invoerveld willen gebruiken, kunnen ze een samengestelde sleutel maken in een query voor een aangepaste padpartitie in blob-uitvoer met behulp van TEKSTCAT. Bijvoorbeeld: selecteer concat (col1, col2) als compositeColumn in blobOutput uit invoer. Vervolgens kunnen ze compositeColumn opgeven als het aangepaste pad in blobopslag.

  3. Partitiesleutels zijn niet hoofdlettergevoelig, dus partitiesleutels zoals John en john zijn gelijkwaardig. Expressies kunnen ook niet worden gebruikt als partitiesleutels. {columnA + columnB} werkt bijvoorbeeld niet.

  4. Wanneer een invoerstroom bestaat uit records met een partitiesleutelkardinaliteit van minder dan 8000, worden de records toegevoegd aan bestaande blobs en worden ze alleen nieuwe blobs gemaakt wanneer dat nodig is. Als de kardinaliteit meer dan 8000 is, is er geen garantie dat bestaande blobs worden geschreven en worden er geen nieuwe blobs gemaakt voor een willekeurig aantal records met dezelfde partitiesleutel.

  5. Als de blob-uitvoer is geconfigureerd als onveranderbaar, maakt Stream Analytics elke keer dat gegevens worden verzonden een nieuwe blob.

Aangepaste datum/tijd-padpatronen

Met aangepaste datetime-padpatronen kunt u een uitvoerindeling opgeven die overeenkomt met hive-streamingconventies, zodat Azure Stream Analytics gegevens naar Azure HDInsight en Azure Databricks kan verzenden voor downstreamverwerking. Aangepaste datetime-padpatronen kunnen eenvoudig worden geïmplementeerd met behulp van het datetime trefwoord in het veld Padvoorvoegsel van de blob-uitvoer, samen met de indelingsaanduiding. Bijvoorbeeld {datetime:yyyy}.

Ondersteunde tokens

De volgende notatieaanduidingstokens kunnen alleen of in combinatie worden gebruikt om aangepaste datum/tijd-notaties te bereiken:

Opmaakaanduiding Beschrijving Resultaten op voorbeeldtijd 2018-01-02T10:06:08
{datetime:yyyy} Het jaar als een viercijferig getal 2018
{datetime:MM} Maand van 01 tot 12 01
{datetime:M} Maand van 1 tot 12 1
{datetime:dd} Dag van 01 tot 31 02
{datetime:d} Dag van 1 tot 31 2
{datetime:UU} Uur met de 24-uursnotatie, van 00 tot 23 10
{datetime:mm} Minuten van 00 tot 60 06
{datetime:m} Minuten van 0 tot 60 6
{datetime:ss} Seconden van 00 tot 60 08

Als u geen aangepaste DateTime-patronen wilt gebruiken, kunt u het token {date} en/of {time} toevoegen aan het padvoorvoegsel om een vervolgkeuzelijst met ingebouwde datum/tijd-notaties te genereren.

Oude Datum/tijd-indelingen van Stream Analytics

Uitbreidbaarheid en beperkingen

U kunt zoveel tokens, {datetime:<specifier>}, gebruiken als u wilt in het padpatroon totdat u de tekenlimiet padvoorvoegsel bereikt. Opmaakaanduidingen kunnen niet worden gecombineerd binnen één token buiten de combinaties die al worden vermeld in de vervolgkeuzelijsten voor datum en tijd.

Voor een padpartitie van logs/MM/dd:

Geldige expressie Ongeldige expressie
logs/{datetime:MM}/{datetime:dd} logs/{datetime:MM/dd}

U kunt dezelfde notatieaanduiding meerdere keren gebruiken in het padvoorvoegsel. Het token moet elke keer worden herhaald.

Hive Streaming-conventies

Aangepaste padpatronen voor blobopslag kunnen worden gebruikt met de Hive Streaming-conventie, die verwacht dat mappen worden gelabeld met column= in de mapnaam.

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

Aangepaste uitvoer elimineert het gedoe van het wijzigen van tabellen en het handmatig toevoegen van partities aan poortgegevens tussen Azure Stream Analytics en Hive. In plaats daarvan kunnen veel mappen automatisch worden toegevoegd met behulp van:

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

Voorbeeld

Maak een opslagaccount, een resourcegroep, een Stream Analytics-taak en een invoerbron volgens de quickstartgids voor Azure Stream Analytics Azure Portal. Gebruik dezelfde voorbeeldgegevens die worden gebruikt in de snelstartgids, ook beschikbaar op GitHub.

Maak een blob-uitvoersink met de volgende configuratie:

Sink voor het maken van blobuitvoer in Stream Analytics

Het volledige padpatroon is als volgt:

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

Wanneer u de taak start, wordt er een mapstructuur gemaakt op basis van het padpatroon in uw blobcontainer. U kunt inzoomen op het dagniveau.

Uitvoer van Stream Analytics-blob met aangepast padpatroon

Volgende stappen