Sortie Stockage Blob Azure et Data Lake Storage Gen2 de Stream Analytics

Azure Data Lake Storage Gen2 se sert de Stockage Azure comme base pour créer des lacs de données d’entreprise sur Azure. Data Lake Storage Gen2 est conçu pour traiter plusieurs pétaoctets d’informations tout en conservant un débit de centaines de gigabits. Vous pouvez l’utiliser pour gérer facilement de grandes quantités de données. Une caractéristique fondamentale de Data Lake Storage Gen2 est l’ajout d’un espace de noms hiérarchique à Stockage Blob Azure.

Stockage Blob offre une solution peu coûteuse et évolutive pour stocker de grandes quantités de données non structurées dans le cloud. Pour une introduction à stockage Blob et à son utilité, consultez Démarrage rapide : Charger, télécharger et répertorier des objets blob à l’aide du portail Microsoft Azure.

Remarque

Pour plus d’informations sur les comportements spécifiques aux formats Avro et Parquet, consultez les sections connexes de la vue d’ensemble.

Configuration de la sortie

Le tableau suivant répertorie les noms de propriétés et leur description pour la création d’une sortie Data Lake Storage Gen2 ou d’objet blob.

Nom de la propriété Description
Alias de sortie Nom convivial utilisé dans les requêtes pour diriger la sortie de requête vers cet objet blob.
Compte de stockage Nom du compte de stockage où vous envoyez votre sortie.
Clé du compte de stockage Clé secrète associée au compte de stockage.
Conteneur Regroupement logique des objets blob stockés dans Stockage Blob. Lorsque vous téléchargez un objet blob dans le stockage d'objets Blob, vous devez spécifier un conteneur pour cet objet blob.

Un nom de conteneur dynamique est facultatif. Il prend en charge une et une seule dynamique {field} dans le nom du conteneur. Le champ doit exister dans les données de sortie et doit suivre la stratégie de nom de conteneur.

Le type de données de champ doit être string. Pour utiliser plusieurs champs dynamiques ou combiner du texte statique avec un champ dynamique, vous pouvez le définir dans la requête avec des fonctions de chaîne intégrées, telles que CONCAT et LTRIM.
Format de sérialisation de l’événement Format de sérialisation pour les données de sortie. JSON, CSV, Avro et Parquet sont pris en charge. Delta Lake est répertorié comme option ici. Les données sont au format Parquet si Delta Lake est sélectionné. Découvrez-en davantage sur Delta Lake.
Nom du chemin d’accès Delta Requis lorsque le format de sérialisation des événements est Delta Lake. Chemin d’accès utilisé pour écrire la table Delta Lake dans le conteneur spécifié. Il inclut le nom de la table. Pour plus d’informations et d’exemples, consultez Écrire dans une table Delta Lake.
Mode écriture Le mode Écriture contrôle la façon dont Azure Stream Analytics écrit dans un fichier de sortie. La remise « exactement une fois » se produit uniquement lorsque le mode Écriture est Une seule fois. Pour plus d'informations, consultez la section suivante.
Colonne de partition facultatif. Nom {field} de vos données de sortie à partitionner. Une seule colonne de partition est prise en charge.
Modèle de chemin d’accès Requis lorsque le format de sérialisation des événements est Delta Lake. Modèle de chemin d’accès au fichier utilisé pour écrire vos objets blob dans le conteneur spécifié.

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 : {date}, {time}.

Si votre mode Écriture est Une seule fois, vous devez utiliser {date} et {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. Le nom du champ est alphanumérique et peut inclure des espaces, des traits d’union et des traits de soulignement. Les restrictions qui s’appliquent aux champs personnalisés sont les suivantes :
  • Aucun nom {field} personnalisé dynamique n’est autorisé si votre mode Écriture est Une seule fois.
  • Les noms de champs ne respectent pas la casse. Par exemple, le service ne peut pas faire la différence entre la colonne ID et la colonne id.
  • Les champs imbriqués ne sont pas autorisés. Utilisez plutôt un alias dans la requête du travail pour « aplatir » le champ.
  • Des expressions ne peuvent pas être utilisées comme nom de champ.

Cette fonctionnalité permet également d’utiliser des configurations de spécificateur de format de date/heure personnalisé dans le chemin d’accès. Les formats de date/heure personnalisés doivent être spécifiés un par un et délimités par le mot clé {datetime:\<specifier>}. Les entrées autorisées pour \<specifier> sont yyyy, MM, M, dd, d, HH, H, mm, m, ss ou s. Le mot-clé {datetime:\<specifier>} peut être utilisé plusieurs fois dans le chemin pour former des configurations date/heure personnalisées.

Exemples :
  • Exemple 1 : cluster1/logs/{date}/{time}
  • Exemple 2 : cluster1/logs/{date}
  • Exemple 3 : cluster1/{client_id}/{date}/{time}
  • Exemple 4 : cluster1/{datetime:ss}/{myField} lorsque la requête est SELECT data.myField AS myField FROM Input;
  • Exemple 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. System.Timestamp est l’heure utilisée pour tout partitionnement basé sur le temps.

La convention suivante est utilisée pour l’attribution de noms :

{Path Prefix Pattern}/schemaHashcode_Guid_Number.extension

Ici, Guid représente l’identificateur unique affecté à un enregistreur interne créé pour écrire dans un fichier bob. Le nombre représente l’index du bloc d’objets blob.

Exemples de fichier de sortie :
  • Myoutput/20170901/00/45434_gguid_1.csv
  • Myoutput/20170901/01/45434_gguid_1.csv

Pour plus d’informations sur cette fonctionnalité, consultez Partitionnement personnalisé de sortie BLOB dans Azure Stream Analytics.
Format de la date Requis lorsque le format de sérialisation des événements est Delta Lake. 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. par exemple YYYY/MM/DD.
Format de l’heure Requis lorsque le format de sérialisation des événements est Delta Lake. 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.
Nombre minimal de lignes Le nombre minimum de lignes par lot. Pour Parquet, chaque lot crée un fichier. La valeur par défaut actuelle est de 2 000 lignes et la valeur maximum autorisée est de 10 000 lignes.
Durée maximale Le délai d’attente maximum par lot. À 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. La valeur par défaut actuelle est de 1 minute et la valeur maximum autorisée est de 2 heures. Si la sortie de votre 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.
Encodage Si vous utilisez le format CSV ou JSON, vous devez spécifier un encodage. UTF-8 est le seul format de codage actuellement pris en charge.
Délimiteur Applicable uniquement pour la sérialisation CSV. Stream Analytics prend en charge de nombreux délimiteurs communs pour sérialiser des données CSV. Valeurs prises en charge : virgule, point-virgule, espace, tabulation et barre verticale.
Format Applicable uniquement pour la sérialisation JSON. 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. Si vous sélectionnez Séparé par une ligne, le JSON est lu un objet à la fois. Le contenu entier seul ne serait pas un JSON valide. Le terme Tableau indique que la sortie est mise en forme en tant que tableau d’objets JSON. Ce tableau se ferme uniquement lorsque le travail s’arrête ou que Stream Analytics est passé à la période suivante. 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 lors de l’écriture du fichier de sorite.

Remise exactement une fois (préversion publique)

Une remise de bout en bout exactement une fois lors de la lecture d’une entrée de streaming signifie que les données traitées sont écrites dans la sortie Data Lake Storage Gen2 une fois sans doublons. Lorsque la fonctionnalité est activée, votre travail Stream Analytics garantit qu’aucune donnée n’est perdue et qu’aucun doublon n’est généré en tant que sortie, entre le redémarrage initié par l’utilisateur à partir de la dernière heure de sortie. Cela simplifie votre pipeline de streaming en n’ayant pas à implémenter ni à dépanner la logique de déduplication.

Mode écriture

Il existe deux façons dont Stream Analytics écrit dans votre compte de Stockage Blob ou Data Lake Storage Gen2. L’une consiste à ajouter des résultats au même fichier ou à une séquence de fichiers à mesure que les résultats arrivent. L’autre consiste à écrire après tous les résultats de la partition de temps lorsque toutes les données de la partition de temps sont disponibles. La remise exactement une fois est activée lorsque le mode Écriture est Une seule fois.

Il n’existe aucune option de mode Écriture pour Delta Lake. Toutefois, la sortie Delta Lake fournit également exactement une fois des garanties à l’aide du journal Delta. Cela ne nécessite pas de partition de temps et écrit en continu les résultats en fonction des paramètres de traitement par lots définis par l’utilisateur.

Remarque

Si vous préférez ne pas utiliser la fonctionnalité d’évaluation de la remise exactement une fois, sélectionnez Ajouter lors de l’arrivée des résultats.

Configuration

Pour recevoir la remise exactement une fois pour votre compte Stockage Blob ou Data Lake Storage Gen2, vous devez configurer les paramètres suivants :

  • Sélectionnez Une fois que tous les résultats de la partition de temps sont disponibles pour votre mode écriture.
  • Spécifiez {date} et {time} pour Modèle de chemin d’accès.
  • Spécifiez le format de date et l’heure.

Limites

  • Le sous-flux n’est pas pris en charge.
  • Le modèle de chemin devient une propriété obligatoire et doit contenir à la fois {date} et {time}. Aucun nom {field} personnalisé dynamique n’est autorisé. En savoir plus sur le modèle de chemin personnalisé.
  • Si le travail est démarré à une heure personnalisée avant ou après la dernière heure de sortie, le fichier risque d’être remplacé. Par exemple, lorsque le format d’heure est défini sur HH, le fichier est généré toutes les heures. Si vous arrêtez le travail à 8 h 15 et redémarrez le travail à 8 h 30, le fichier généré entre 8 h et 9 h ne couvre que les données comprises entre 8 h 30 et 9 h 00. Les données de 8 h à 8 h 15 sont perdues, car elles sont remplacées.

Fichiers de sortie d’objets blob

Lorsque vous utilisez le stockage d’objets blob en tant que sortie, un fichier est créé dans l’objet blob dans les cas suivants :

  • Le fichier dépasse le nombre maximal de blocs autorisés (50 000 actuellement). Vous pouvez atteindre cette limite sans atteindre la taille maximale d’objet blob autorisée. 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. S’il est faible, chaque bloc comporte moins de données et cette taille est inférieure.) ;
  • Le schéma est modifié dans la sortie et le format de cette dernière requiert un schéma fixe (CSV, Avro ou Parquet).
  • Un travail est relancé, de façon externe par un utilisateur qui l’arrête et le relance, ou en interne à des fins de maintenance système ou de récupération sur erreur.
  • La requête est entièrement partitionnée et un fichier est créé pour chaque partition de sortie. Cela provient de l’utilisation de PARTITION BY, ou de la parallélisation native introduite dans le niveau de compatibilité 1.2.
  • L’utilisateur supprimer un fichier ou un conteneur du compte de stockage.
  • La sortie fait l’objet d’un partitionnement temporel via le modèle de préfixe de chemin d’accès et un nouvel objet blob est utilisé lorsque la requête passe à l’heure suivante.
  • La sortie est partitionnée par un champ personnalisé et un nouvel objet blob est créé par clé de partition s’il n’y en a pas.
  • La sortie est partitionnée par un champ personnalisé où la cardinalité des clés de partition est supérieure à 8 000 et un nouvel objet blob est créé par clé de partition.

Partitionnement

Pour une clé de partition, utilisez les jetons {date} et {time} de vos champs d’événement dans le modèle de chemin. Choisissez le format de date, tel que YYYY/MM/DD, DD/MM/YYYYou MM-DD-YYYY. HH est utilisé pour le format de l’heure. La sortie d’objet blob peut être partitionnée par un seul attribut d’événement personnalisé {fieldname} ou {datetime:\<specifier>}. Le nombre d’enregistreurs de sortie suit le partitionnement d’entrée de requêtes entièrement parallélisables.

Taille de lot de sortie

Pour obtenir la taille maximale du message, consultez Limites de stockage Azure. 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.

Limites

  • Si un symbole de barre oblique (/) est utilisé dans le modèle de chemin d’accès (par exemple, /folder2/folder3) les dossiers vides sont créés et ne sont pas visibles dans Explorateur Stockage.
  • Stream Analytics ajoute au même fichier dans les cas où un nouveau fichier blob n’est pas nécessaire. Cela peut entraîner la génération d’un plus grand nombre de déclencheurs si des services Azure comme Event Grid sont configurés pour être déclenchés sur la mise à jour des fichiers blob.
  • Stream Analytics est ajouté à un objet blob par défaut. Lorsque le format de sortie est un tableau JSON, il termine le fichier lors de l’arrêt ou lorsque la sortie passe à la partition suivante pour les sorties partitionnées dans le temps. Notez que, dans certains cas, tels qu’un redémarrage sans nettoyage, le crochet fermant (]) pour le tableau JSON peut être absent.