Share via


Uitvoer van Azure Blob Storage en Data Lake Storage Gen2 van Stream Analytics

Azure Data Lake Storage Gen2 maakt Azure Storage de basis voor het bouwen van zakelijke data lakes in Azure. Data Lake Storage Gen2 is ontworpen om meerdere petabytes aan informatie te verwerken terwijl honderden gigabits aan doorvoer worden ondersteund. U kunt deze gebruiken om eenvoudig enorme hoeveelheden gegevens te beheren. Een fundamenteel onderdeel van Data Lake Storage Gen2 is het toevoegen van een hiërarchische naamruimte aan Azure Blob Storage.

Blob Storage biedt een rendabele en schaalbare oplossing voor het opslaan van grote hoeveelheden ongestructureerde gegevens in de cloud. Zie Blobs uploaden, downloaden en vermelden met behulp van Azure Portal voor een inleiding over Blob Storage en het gebruik ervan.

Notitie

Zie de gerelateerde secties in het overzicht voor informatie over het gedrag dat specifiek is voor de Avro- en Parquet-indelingen.

Uitvoerconfiguratie

De volgende tabel bevat de eigenschapsnamen en de bijbehorende beschrijvingen voor het maken van een blob of Data Lake Storage Gen2-uitvoer.

Eigenschapsnaam Beschrijving
Uitvoeralias Een beschrijvende naam die wordt gebruikt in query's om de queryuitvoer naar deze blob te leiden.
Opslagaccount De naam van het opslagaccount waar u de uitvoer verzendt.
Opslagaccountsleutel De geheime sleutel die is gekoppeld aan het opslagaccount.
Container Een logische groepering voor blobs die zijn opgeslagen in Blob Storage. Wanneer u een blob uploadt naar Blob Storage, moet u een container voor die blob opgeven.

Een dynamische containernaam is optioneel. Het ondersteunt één en slechts één dynamische {field} naam in de containernaam. Het veld moet aanwezig zijn in de uitvoergegevens en het containernaambeleid volgen.

Het gegevenstype van het veld moet zijn string. Als u meerdere dynamische velden wilt gebruiken of statische tekst wilt combineren met een dynamisch veld, kunt u deze definiëren in de query met ingebouwde tekenreeksfuncties, zoals CONCAT en LTRIM.
Serialisatie-indeling voor gebeurtenissen De serialisatie-indeling voor uitvoergegevens. JSON, CSV, Avro en Parquet worden ondersteund. Delta Lake wordt hier vermeld als een optie. De gegevens hebben de Parquet-indeling als Delta Lake is geselecteerd. Meer informatie over Delta Lake.
Delta-padnaam Vereist wanneer de indeling van de gebeurtenisserialisatie Delta Lake is. Het pad dat wordt gebruikt voor het schrijven van de Delta Lake-tabel in de opgegeven container. Deze bevat de tabelnaam. Zie Schrijven naar een Delta Lake-tabel voor meer informatie en voorbeelden.
Write mode De schrijfmodus bepaalt de manier waarop Azure Stream Analytics naar een uitvoerbestand schrijft. Exactly-once levering vindt alleen plaats wanneer de schrijfmodus eenmaal is. Zie de volgende sectie voor meer informatie.
Partitiekolom Optioneel. De {field} naam van de uitvoergegevens naar de partitie. Er wordt slechts één partitiekolom ondersteund.
Padpatroon Vereist wanneer de indeling van de gebeurtenisserialisatie Delta Lake is. Het bestandspadpatroon dat wordt gebruikt voor het schrijven van uw blobs in de opgegeven container.

In het padpatroon kunt u ervoor kiezen om een of meer exemplaren van de datum- en tijdvariabelen te gebruiken om de frequentie op te geven waarmee blobs worden geschreven: {date}, {time}.

Als de schrijfmodus Eenmaal is, moet u zowel als {date} {time}.

U kunt aangepaste blobpartitionering gebruiken om één aangepaste {field} naam op te geven van uw gebeurtenisgegevens naar partitie-blobs. De veldnaam is alfanumeriek en kan spaties, afbreekstreepjes en onderstrepingstekens bevatten. Beperkingen voor aangepaste velden omvatten de volgende:
  • Er is geen dynamische aangepaste {field} naam toegestaan als de schrijfmodus eenmaal is.
  • Veldnamen zijn niet hoofdlettergevoelig. De service kan bijvoorbeeld geen onderscheid maken tussen kolom ID en kolom id.
  • Geneste velden zijn niet toegestaan. Gebruik in plaats daarvan een alias in de taakquery om het veld te 'plat maken'.
  • Expressies kunnen niet worden gebruikt als veldnaam.

Deze functie maakt het gebruik van aangepaste datum-/tijdnotatieconfiguraties in het pad mogelijk. Aangepaste datum-/tijdnotaties moeten één voor één worden opgegeven en tussen het {datetime:\<specifier>} trefwoord staan. Toegestane invoer \<specifier> is , , MM, M, dd, d, HH, , H, mm, , m, of sss.yyyy Het {datetime:\<specifier>} trefwoord kan meerdere keren worden gebruikt in het pad om aangepaste datum-/tijdconfiguraties te vormen.

Voorbeelden:
  • Voorbeeld 1: cluster1/logs/{date}/{time}
  • Voorbeeld 2: cluster1/logs/{date}
  • Voorbeeld 3: cluster1/{client_id}/{date}/{time}
  • Voorbeeld 4: cluster1/{datetime:ss}/{myField} waarbij de query zich bevindt SELECT data.myField AS myField FROM Input;
  • Voorbeeld 5: cluster1/year={datetime:yyyy}/month={datetime:MM}/day={datetime:dd}

Het tijdstempel van de gemaakte mapstructuur volgt UTC en niet op de lokale tijd. System.Timestamp is de tijd die wordt gebruikt voor partitionering op basis van tijd.

Bestandsnaamgeving maakt gebruik van de volgende conventie:

{Path Prefix Pattern}/schemaHashcode_Guid_Number.extension

Guid Hier geeft u de unieke id aan die is toegewezen aan een interne schrijver die is gemaakt om naar een blobbestand te schrijven. Het getal vertegenwoordigt de index van het blobblok.

Voorbeeld van uitvoerbestanden:
  • Myoutput/20170901/00/45434_gguid_1.csv
  • Myoutput/20170901/01/45434_gguid_1.csv

Zie voor meer informatie over deze functie aangepaste blob-uitvoerpartitionering van Azure Stream Analytics.
Datumnotatie Vereist wanneer de indeling van de gebeurtenisserialisatie Delta Lake is. Als het datumtoken wordt gebruikt in het voorvoegselpad, kunt u de datumnotatie selecteren waarin uw bestanden zijn ingedeeld. Een voorbeeld is YYYY/MM/DD.
Tijdnotatie Vereist wanneer de indeling van de gebeurtenisserialisatie Delta Lake is. Als het tijdtoken wordt gebruikt in het voorvoegselpad, geeft u de tijdnotatie op waarin uw bestanden zijn ingedeeld.
Minimumrijen Het aantal minimumrijen per batch. Voor Parquet maakt elke batch een nieuw bestand. De huidige standaardwaarde is 2000 rijen en het toegestane maximum is 10.000 rijen.
Maximale tijd De maximale wachttijd per batch. Na deze tijd wordt de batch naar de uitvoer geschreven, zelfs als niet aan de minimumvereisten voor rijen wordt voldaan. De huidige standaardwaarde is 1 minuut en het toegestane maximum is 2 uur. Als de blob-uitvoer de frequentie van het padpatroon heeft, kan de wachttijd niet hoger zijn dan het tijdsbereik van de partitie.
Codering Als u een CSV- of JSON-indeling gebruikt, moet codering worden opgegeven. UTF-8 is momenteel de enige ondersteunde coderingsindeling.
Scheidingsteken Alleen van toepassing op CSV-serialisatie. Stream Analytics ondersteunt veel algemene scheidingstekens voor het serialiseren van CSV-gegevens. Ondersteunde waarden zijn komma's, puntkomma's, spatiebalk, tabblad en verticale balk.
Notatie Alleen van toepassing op JSON-serialisatie. Regel gescheiden geeft aan dat de uitvoer is opgemaakt door elk JSON-object gescheiden door een nieuwe regel. Als u Regel gescheiden selecteert, wordt de JSON één object tegelijk gelezen. De hele inhoud zelf zou geen geldige JSON zijn. Matrix geeft aan dat de uitvoer is opgemaakt als een matrix van JSON-objecten. Deze matrix wordt alleen gesloten wanneer de taak stopt of Stream Analytics naar het volgende tijdvenster is verplaatst. Over het algemeen is het raadzaam om met regel gescheiden JSON te gebruiken, omdat er geen speciale verwerking nodig is terwijl het uitvoerbestand nog steeds naar wordt geschreven.

Exactly-once levering (openbare preview)

End-to-end exact-eenmaal levering bij het lezen van streaming-invoer betekent dat verwerkte gegevens eenmaal zonder duplicaten naar Data Lake Storage Gen2-uitvoer worden geschreven. Wanneer de functie is ingeschakeld, garandeert uw Stream Analytics-taak geen gegevensverlies en worden er geen duplicaten geproduceerd als uitvoer, bij door de gebruiker geïnitieerde herstart vanaf de laatste uitvoertijd. Het vereenvoudigt uw streaming-pijplijn door ontdubbelingslogica niet te implementeren en problemen op te lossen.

Write mode

Er zijn twee manieren waarop Stream Analytics schrijft naar uw Blob Storage- of Data Lake Storage Gen2-account. Een manier is om resultaten toe te voegen aan hetzelfde bestand of aan een reeks bestanden als resultaten binnenkomen. De andere manier is om na alle resultaten voor de tijdpartitie te schrijven wanneer alle gegevens voor de tijdpartitie beschikbaar zijn. Exactly-once levering is ingeschakeld wanneer de schrijfmodus eenmaal is.

Er is geen optie voor de schrijfmodus voor Delta Lake. Delta Lake-uitvoer biedt echter ook exact één keer garanties met behulp van het Delta-logboek. Het vereist geen tijdpartitie en schrijft continu resultaten op basis van de batchparameters die de gebruiker heeft gedefinieerd.

Notitie

Als u de preview-functie liever niet gebruikt voor exact één levering, selecteert u Toevoegen als resultaten binnenkomen.

Configuratie

Als u exact eenmaal levering wilt ontvangen voor uw Blob Storage- of Data Lake Storage Gen2-account, moet u de volgende instellingen configureren:

  • Selecteer Eenmaal nadat alle resultaten van tijdpartitie beschikbaar zijn voor uw schrijfmodus.
  • Geef padpatroon op met beide {date} en {time} opgegeven.
  • Geef de datumnotatie en tijdnotatie op.

Beperkingen

  • Substream wordt niet ondersteund.
  • Padpatroon wordt een vereiste eigenschap en moet beide {date} en {time}bevatten. Er is geen dynamische aangepaste {field} naam toegestaan. Meer informatie over aangepast padpatroon.
  • Als de taak op een aangepast tijdstip vóór of na de laatste uitvoertijd wordt gestart, bestaat het risico dat het bestand wordt overschreven. Wanneer de tijdnotatie bijvoorbeeld is ingesteld op UU, wordt het bestand elk uur gegenereerd. Als u de taak om 8:15 uur stopt en de taak om 8:30 uur opnieuw start, omvat het bestand dat is gegenereerd tussen 8:00 en 9:00 uur alleen gegevens van 8:30 tot 9:00 uur. De gegevens van 8:00 tot 8:15 uur gaan verloren als ze worden overschreven.

Blob-uitvoerbestanden

Wanneer u Blob Storage als uitvoer gebruikt, wordt in de blob een nieuw bestand gemaakt in de volgende gevallen:

  • Het bestand overschrijdt het maximum aantal toegestane blokken (momenteel 50.000). Mogelijk bereikt u het maximaal toegestane aantal blokken zonder de maximaal toegestane blobgrootte te bereiken. Als de uitvoersnelheid bijvoorbeeld hoog is, ziet u meer bytes per blok en is de bestandsgrootte groter. Als de uitvoersnelheid laag is, heeft elk blok minder gegevens en is de bestandsgrootte kleiner.
  • Er is een schemawijziging in de uitvoer en de uitvoerindeling vereist een vast schema (CSV, Avro of Parquet).
  • Een taak wordt extern opnieuw gestart door een gebruiker die deze stopt en intern start voor systeemonderhoud of foutherstel.
  • De query is volledig gepartitioneerd en er wordt een nieuw bestand gemaakt voor elke uitvoerpartitie. Het komt van het gebruik PARTITION BY of de systeemeigen parallelle uitvoering die is geïntroduceerd in compatibiliteitsniveau 1.2.
  • Gebruiker verwijdert een bestand of een container van het opslagaccount.
  • Uitvoer is tijd gepartitioneerd met behulp van het padvoorvoegselpatroon en er wordt een nieuwe blob gebruikt wanneer de query naar het volgende uur wordt verplaatst.
  • De uitvoer wordt gepartitioneerd door een aangepast veld en er wordt per partitiesleutel een nieuwe blob gemaakt als deze niet bestaat.
  • De uitvoer wordt gepartitioneerd door een aangepast veld waarin de kardinaliteit van de partitiesleutel groter is dan 8000 en een nieuwe blob wordt gemaakt per partitiesleutel.

Partitionering

Gebruik {date} en {time} tokens van uw gebeurtenisvelden in het padpatroon voor partitiesleutels. Kies de datumnotatie, zoals YYYY/MM/DD, DD/MM/YYYYof MM-DD-YYYY. HH wordt gebruikt voor de tijdnotatie. Blob-uitvoer kan worden gepartitioneerd door één aangepast gebeurteniskenmerk {fieldname} of {datetime:\<specifier>}. Het aantal uitvoerschrijvers volgt de invoerpartitionering voor volledig parallelliseerbare query's.

Grootte van uitvoerbatch

Zie Azure Storage-limieten voor de maximale berichtgrootte. De maximale blobblokgrootte is 4 MB en het maximumaantal blobblokken is 50.000.

Beperkingen

  • Als er een slashsymbool (/) wordt gebruikt in het padpatroon (bijvoorbeeld /folder2/folder3), worden lege mappen gemaakt en zijn ze niet zichtbaar in Storage Explorer.
  • Stream Analytics voegt toe aan hetzelfde bestand in gevallen waarin een nieuw blobbestand niet nodig is. Dit kan ertoe leiden dat er meer triggers worden gegenereerd als Azure-services zoals Azure Event Grid zijn geconfigureerd om te worden geactiveerd bij een update van een blobbestand.
  • Stream Analytics voegt standaard toe aan een blob. Wanneer de uitvoerindeling een JSON-matrix is, wordt het bestand voltooid bij het afsluiten of wanneer de uitvoer naar de volgende tijdpartitie voor gepartitioneerde uitvoer gaat. In sommige gevallen, zoals een onreine herstart, is het mogelijk dat de vierkante haak sluiten (]) voor de JSON-matrix ontbreekt.