Sortie de stockage d’objets blob et Azure Data Lake Gen2 à partir d’Azure Stream AnalyticsBlob storage and Azure Data Lake Gen2 output from Azure Stream Analytics

Data Lake Storage Gen2 fait du stockage Azure la base pour créer des dépôts Data Lake d’entreprise sur Azure.Data Lake Storage Gen2 makes Azure Storage the foundation for building enterprise data lakes on Azure. Conçu dès le départ pour traiter plusieurs téraoctets d’informations tout en assurant des centaines de gigaoctets de débit, Data Lake Storage Gen2 vous permet de facilement gérer d'importants volumes de données.Designed from the start to service multiple petabytes of information while sustaining hundreds of gigabits of throughput, Data Lake Storage Gen2 allows you to easily manage massive amounts of data. Une caractéristique fondamentale de Data Lake Storage Gen2 est l’ajout d’un espace de noms hiérarchique au stockage Blob.A fundamental part of Data Lake Storage Gen2 is the addition of a hierarchical namespace to Blob storage.

Le stockage d’objets blob Azure offre une solution peu coûteuse et évolutive pour stocker de grandes quantités de données non structurées dans le cloud.Azure Blob storage offers a cost-effective and scalable solution for storing large amounts of unstructured data in the cloud. Pour une introduction au stockage d’objets blob et à son utilisation, consultez Démarrage rapide : Charger, télécharger et répertorier des objets blob à l’aide du portail Microsoft Azure.For an introduction on Blob storage and its usage, see Upload, download, and list blobs with the Azure portal.

Configuration de la sortieOutput configuration

Le tableau suivant répertorie les noms de propriétés et leur description pour la création d’une sortie d’objet blob ou ADLS Gen2.The following table lists the property names and their descriptions for creating a blob or ADLS Gen2 output.

Nom de la propriétéProperty name DescriptionDescription
Alias de sortieOutput alias Nom convivial utilisé dans les requêtes pour diriger la sortie de requête vers ce stockage d’objets blob.A friendly name used in queries to direct the query output to this blob storage.
Compte de stockageStorage account Nom du compte de stockage où vous envoyez votre sortie.The name of the storage account where you're sending your output.
Clé du compte de stockageStorage account key Clé secrète associée au compte de stockage.The secret key associated with the storage account.
Conteneur de stockageStorage container Regroupement logique des objets blob stockés dans le service BLOB Azure.A logical grouping for blobs stored in the Azure Blob service. Lorsque vous téléchargez un objet blob dans le service d'objets Blob, vous devez spécifier un conteneur pour cet objet blob.When you upload a blob to the Blob service, you must specify a container for that blob.
Modèle de chemin d’accèsPath pattern facultatif.Optional. Modèle de chemin d’accès au fichier utilisé pour écrire vos objets blob dans le conteneur spécifié.The file path pattern that's used to write your blobs within the specified container.

Dans le modèle de chemin d’accès, vous pouvez choisir d’utiliser une ou plusieurs instances des variables de date et d’heure pour spécifier la fréquence d’écriture des objets blob :In the path pattern, you can choose to use one or more instances of the date and time variables to specify the frequency that blobs are written:
{date}, {time}{date}, {time}

Vous pouvez utiliser le partitionnement d’objet blob personnalisé afin de spécifier un nom personnalisé {field} de vos données d’événement aux objets blob de partition.You can use custom blob partitioning to specify one custom {field} name from your event data to partition blobs. Le nom du champ est alphanumérique et peut inclure des espaces, des traits d’union et des traits de soulignement.The field name is alphanumeric and can include spaces, hyphens, and underscores. Voici les restrictions qui s’appliquent aux champs personnalisés :Restrictions on custom fields include the following:
  • Les noms de champs ne sont pas sensibles à la casse.Field names aren't case-sensitive. Par exemple, le service ne peut pas faire la différence entre la colonne « ID » et la colonne « id ».For example, the service can't differentiate between column "ID" and column "id."
  • Les champs imbriqués ne sont pas autorisés.Nested fields are not permitted. Utilisez plutôt un alias dans la requête du travail pour « aplatir » le champ.Instead, use an alias in the job query to "flatten" the field.
  • Des expressions ne peuvent pas être utilisées comme nom de champ.Expressions can't be used as a field name.

Cette fonctionnalité permet également d’utiliser des configurations de spécificateur de format de date/heure personnalisé dans le chemin d’accès.This feature enables the use of custom date/time format specifier configurations in the path. Les formats de date et d’heure personnalisés doivent être spécifiés un par un et délimités par le mot clé {datetime:<specifier>}.Custom date and time formats must be specified one at a time, enclosed by the {datetime:<specifier>} keyword. Les entrées autorisées pour <specifier> sont yyyy, MM, M, dd, d, HH, H, mm, m, ss ou s.Allowable inputs for <specifier> are yyyy, MM, M, dd, d, HH, H, mm, m, ss, or s. Le mot-clé {datetime:<specifier>} peut être utilisé plusieurs fois dans le chemin pour former des configurations de date/d’heure personnalisées.The {datetime:<specifier>} keyword can be used multiple times in the path to form custom date/time configurations.

Exemples :Examples:
  • Exemple 1 : cluster1/logs/{date}/{time}Example 1: cluster1/logs/{date}/{time}
  • Exemple 2 : cluster1/logs/{date}Example 2: cluster1/logs/{date}
  • Exemple 3 : cluster1/{client_id}/{date}/{time}Example 3: cluster1/{client_id}/{date}/{time}
  • Exemple 4 : cluster1/{datetime:ss}/{myField}, où la requête est : SELECT data.myField AS myField FROM Input;Example 4: cluster1/{datetime:ss}/{myField} where the query is: SELECT data.myField AS myField FROM Input;
  • Exemple 5 : cluster1/année = {datetime:yyyy} / mois = {datetime:MM} / jour = {datetime:dd}Example 5: cluster1/year={datetime:yyyy}/month={datetime:MM}/day={datetime:dd}

L’horodatage de la structure de dossiers créée suit l’heure UTC et pas l’heure locale.The time stamp of the created folder structure follows UTC and not local time. System.Timestamp est l’heure utilisée pour tout partitionnement basé sur le temps.System.Timestamp is the time used for all time based partitioning.

La convention suivante est utilisée pour l’attribution de noms :File naming uses the following convention:

{Modèle de préfixe de chemin d’accès}/Code_hachage_schéma_Numéro_Guid.extension{Path Prefix Pattern}/schemaHashcode_Guid_Number.extension

Ici, le GUID représente l’identificateur unique affecté à un writer interne créé pour écrire dans un fichier bob.Here Guid represents the unique identifier assigned to an internal writer that is created to write to a blob file. Le nombre représente l’index du bloc d’objets blob.The number represents index of the blob block.

Exemples de fichier de sortie :Example output files:
  • Myoutput/20170901/00/45434_gguid_1.csvMyoutput/20170901/00/45434_gguid_1.csv
  • Myoutput/20170901/01/45434_gguid_1.csvMyoutput/20170901/01/45434_gguid_1.csv

Pour plus d’informations sur cette fonctionnalité, consultez Partitionnement personnalisé de sortie BLOB dans Azure Stream Analytics.For more information about this feature, see Azure Stream Analytics custom blob output partitioning.
Format de la dateDate format facultatif.Optional. Si le jeton de la date est utilisé dans le chemin d’accès du préfixe, vous pouvez sélectionner le format de date dans lequel vos fichiers sont organisés.If the date token is used in the prefix path, you can select the date format in which your files are organized. Exemple : AAAA/MM/JJExample: YYYY/MM/DD
Format de l’heureTime format facultatif.Optional. Si le jeton de l’heure est utilisé dans le chemin d’accès du préfixe, spécifiez le format d’heure dans lequel vos fichiers sont organisés.If the time token is used in the prefix path, specify the time format in which your files are organized. Actuellement, la seule valeur possible est HH.Currently the only supported value is HH.
Format de sérialisation de l’événementEvent serialization format Format de sérialisation pour les données de sortie.Serialization format for output data. JSON, CSV, Avro et Parquet sont pris en charge.JSON, CSV, Avro, and Parquet are supported.
Nombre minimal de lignesMinimum rows Le nombre minimum de lignes par lot.The number of minimum rows per batch. Pour Parquet, chaque lot crée un nouveau fichier.For Parquet, every batch will create a new file. La valeur par défaut actuelle est de 2 000 lignes et la valeur maximum autorisée est de 10 000 lignes.The current default value is 2,000 rows and the allowed maximum is 10,000 rows.
Durée maximaleMaximum time Le délai d’attente maximum par lot.The maximum wait time per batch. À l’issue de cette période, le lot est écrit dans la sortie même si l’exigence de lignes minimum n’est pas remplie.After this time, the batch will be written to the output even if the minimum rows requirement is not met. La valeur par défaut actuelle est de 1 minute et la valeur maximum autorisée est de 2 heures.The current default value is 1 minute and the allowed maximum is 2 hours. Si la sortie de votre objet BLOB a une fréquence de modèle de chemin d’accès, le délai d’attente ne peut pas être supérieur à l’intervalle de temps de la partition.If your blob output has path pattern frequency, the wait time cannot be higher than the partition time range.
EncodageEncoding Si vous utilisez le format CSV ou JSON, vous devez spécifier un encodage.If you're using CSV or JSON format, an encoding must be specified. UTF-8 est le seul format de codage actuellement pris en charge.UTF-8 is the only supported encoding format at this time.
DélimiteurDelimiter Applicable uniquement pour la sérialisation CSV.Applicable only for CSV serialization. Stream Analytics prend en charge un certain nombre de délimiteurs communs pour sérialiser des données CSV.Stream Analytics supports a number of common delimiters for serializing CSV data. Valeurs prises en charge : virgule, point-virgule, espace, tabulation et barre verticale.Supported values are comma, semicolon, space, tab, and vertical bar.
FormatFormat Applicable uniquement pour la sérialisation JSON.Applicable only for JSON serialization. L’expression Séparé par une ligne indique que la sortie est mise en forme de sorte que tous les objets JSON soient séparés par une nouvelle ligne.Line separated specifies that the output is formatted by having each JSON object separated by a new line. Si vous sélectionnez Séparé par une ligne, le JSON est lu un objet à la fois.If you select Line separated, the JSON is read one object at a time. Le contenu entier seul ne serait pas un JSON valide.The whole content by itself would not be a valid JSON. Le terme Tableau indique que la sortie est mise en forme en tant que tableau d’objets JSON.Array specifies that the output is formatted as an array of JSON objects. Ce tableau se ferme uniquement lorsque le travail s’arrête ou que Stream Analytics est passé à la période suivante.This array is closed only when the job stops or Stream Analytics has moved on to the next time window. En règle générale, il est préférable d’utiliser du code JSON séparé par des lignes, car il ne requiert aucun traitement spécial pendant que le fichier de sortie est écrit.In general, it's preferable to use line-separated JSON, because it doesn't require any special handling while the output file is still being written to.

Fichiers de sortie d’objets blobBlob output files

Lorsque vous utilisez le stockage d’objets blob en tant que sortie, un fichier est créé dans l’objet blob dans les cas suivants :When you're using Blob storage as output, a new file is created in the blob in the following cases:

  • si le fichier actuel dépasse le nombre maximal de blocs autorisés (50 000 actuellement)If the file exceeds the maximum number of allowed blocks (currently 50,000). Vous pouvez atteindre cette limite sans atteindre la taille maximale d’objet blob autorisée.You might reach the maximum allowed number of blocks without reaching the maximum allowed blob size. Par exemple, si le taux de sortie est élevé, vous voyez apparaître davantage d’octets par bloc, et la taille de fichier est supérieure.For example, if the output rate is high, you can see more bytes per block, and the file size is larger. S’il est faible, chaque bloc comporte moins de données et cette taille est inférieure.) ;If the output rate is low, each block has less data, and the file size is smaller.
  • si le schéma est modifié dans la sortie et que le format de cette dernière requiert un schéma fixe (CSV, Avro, Parquet).If there's a schema change in the output, and the output format requires fixed schema (CSV, Avro, Parquet).
  • si un travail est relancé, de façon externe par un utilisateur ou en interne à des fins de maintenance système ou de récupération sur erreur ;If a job is restarted, either externally by a user stopping it and starting it, or internally for system maintenance or error recovery.
  • si la requête est entièrement partitionnée et qu’un fichier est créé pour chaque partition de sortie ;If the query is fully partitioned, and a new file is created for each output partition.
  • si un fichier ou un conteneur du compte de stockage est supprimé par l’utilisateur ;If the user deletes a file or a container of the storage account.
  • si la sortie fait l’objet d’un partitionnement temporel via le modèle de préfixe de chemin d’accès et qu’un nouvel objet blob est utilisé lorsque la requête passe à l’heure suivante ;If the output is time partitioned by using the path prefix pattern, and a new blob is used when the query moves to the next hour.
  • si la sortie est partitionnée par un champ personnalisé et qu’un nouvel objet blob est créé par clé de partition s’il n’y en a pas ;If the output is partitioned by a custom field, and a new blob is created per partition key if it does not exist.
  • si la sortie est partitionnée par un champ personnalisé où la cardinalité des clés de partition est supérieure à 8 000 et qu’un nouvel objet blob est créé par clé de partition.If the output is partitioned by a custom field where the partition key cardinality exceeds 8,000, and a new blob is created per partition key.

PartitionnementPartitioning

Pour une clé de partition, utilisez les jetons {date} et {time} de vos champs d’événement dans le modèle de chemin.For partition key, use {date} and {time} tokens from your event fields in the path pattern. Choisissez le format de date, par exemple, YYYY/MM/DD, DD/MM/YYYY ou MM-DD-YYYY.Choose the date format, such as YYYY/MM/DD, DD/MM/YYYY, or MM-DD-YYYY. HH est utilisé pour le format de l’heure.HH is used for the time format. La sortie d’objet blob peut être partitionnée par un seul attribut d’événement personnalisé {fieldname} ou par {datetime:<specifier>}.Blob output can be partitioned by a single custom event attribute {fieldname} or {datetime:<specifier>}. Le nombre d’enregistreurs de sortie suit le partitionnement d’entrée de requêtes entièrement parallélisables.The number of output writers follows the input partitioning for fully parallelizable queries.

Taille de lot de sortieOutput batch size

Pour obtenir la taille maximale du message, consultez Limites de stockage Azure.For the maximum message size, see Azure Storage limits. La taille maximale des blocs d’objets blob est de 4 Mo et le nombre maximal des blobs d’objets blob est de 50 000.The maximum blob block size is 4 MB and the maximum blob bock count is 50,000. |

Étapes suivantesNext steps