Sortie de stockage d’objets blob et Azure Data Lake Gen2 à partir d’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. 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. Une caractéristique fondamentale de Data Lake Storage Gen2 est l’ajout d’un espace de noms hiérarchique au stockage Blob.

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. 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.

Notes

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 d’objet blob ou Azure Data Lake Storage Gen2.

Nom de la propriété Description
Alias de sortie Nom convivial utilisé dans les requêtes pour diriger la sortie de requête vers ce stockage d’objets 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 le service BLOB Azure. Lorsque vous téléchargez un objet blob dans le service d'objets Blob, vous devez spécifier un conteneur pour cet objet blob.

Le nom du 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 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, LTRIM, etc.
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é. En savoir plus 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. Plus d’informations détaillées et d’exemples.
Mode écriture Le mode d’écriture contrôle la façon dont Azure Stream Analytics écrit dans le fichier de sortie. Exactement une remise se produit uniquement lorsque le mode d’écriture est Une seule fois. Plus d’informations dans 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, vous pouvez choisir une ou plusieurs instances des variables de date et d’heure afin de spécifier la fréquence d’écriture de ces blobs : {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 sont pas sensibles à 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 et d’heure personnalisés doivent être spécifiés un par un et délimités par le mot clé {DateHeure :<spécificateur>}. 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 d’accès pour former des configurations de date/d’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} où la requête est : SELECT data.myField AS myField FROM Input;
  • Exemple 5 : cluster1/année = {datetime:yyyy} / mois = {datetime:MM} / jour = {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 :

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

Ici, le GUID représente l’identificateur unique affecté à un writer 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. Exemple : AAAA/MM/JJ
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 pendant que le fichier de sortie est écrit.

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 Azure 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 considérablement votre pipeline de streaming en n’ayant pas à implémenter et à dépanner la logique de déduplication.

Mode écriture

Il existe deux façons pour que Stream Analytics écrive dans votre compte de stockage Blob ou ADLS Gen2. L’un 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. Exactement une remise 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 seule 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.

Notes

Si vous préférez ne pas utiliser la fonctionnalité d’évaluation pour une remise exactement une fois (Exactly-Once-Delivery), sélectionnez Ajouter à l’arrivée des résultats.

Configuration

Pour recevoir exactement une remise de votre compte de stockage Blob ou ADLS 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.
  • Indiquez le modèle de chemin d’accès avec {date} et {time} spécifié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 {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, il y a un risque de remplacement du fichier. Par exemple, lorsque le format d’heure est 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 de 8 h 30 à 9 h. 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, 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, par exemple, YYYY/MM/DD, DD/MM/YYYY ou 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 par {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 l’Explorateur Stockage
  • Azure 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.
  • Azure Stream Analytics est ajouté au 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, il est possible que le symbole de fermeture « ] » pour le tableau JSON soit manquant.

Étapes suivantes