Ingestion à partir du stockage
S’applique à : ✅Microsoft Fabric✅Azure Data Explorer
La commande .ingest into
ingère les données dans une table en « tirant » (pull) les données d’un ou de plusieurs fichiers de stockage cloud.
Par exemple, la commande peut récupérer 1 000 objets blob au format CSV à partir du Stockage blob Azure, les analyser puis les ingérer dans une table cible.
Les données sont ajoutées à la table sans affecter les enregistrements existants, et sans modifier le schéma de la table.
Remarque
Cette méthode d’ingestion est destinée à l’exploration et au prototypage. Ne l’utilisez pas dans des scénarios de production ou de volume élevé.
autorisations
Vous devez disposer au moins des autorisations d’ingestion de table pour exécuter cette commande.
Syntaxe
.ingest
[async
] into
table
NomTable LocalisateurDonnéesSources [with
(
NomPropriétéIngestion =
ValeurPropriétéIngestion [,
...] )
]
En savoir plus sur les conventions de syntaxe.
Paramètres
Nom | Type | Requise | Description |
---|---|---|---|
async |
string |
Si elle est spécifiée, la commande retourne immédiatement et continue l’ingestion en arrière-plan. Les résultats de la commande incluent une OperationId valeur qui peut ensuite être utilisée avec la .show operation commande pour récupérer l’état d’achèvement de l’ingestion et les résultats. |
|
TableName | string |
✔️ | Nom de la table dans laquelle ingérer des données. Le nom de la table est toujours relatif à la base de données dans le contexte. Si aucun objet de mappage de schéma n’est fourni, le schéma de la base de données dans le contexte est utilisé. |
SourceDataLocator | string |
✔️ | Liste unique ou séparée par des virgules de chaîne de connexion de stockage. Une chaîne de connexion ne doit référencer qu’un seul fichier hébergé par un compte de stockage. L’ingestion de plusieurs fichiers peut être effectuée en spécifiant plusieurs chaîne de connexion s, ou en ingérée à partir d’une requête d’une table externe. |
Remarque
Nous vous recommandons d’utiliser des littéraux de chaîne obfusqués pour les SourceDataLocators. Le service nettoie les informations d’identification dans les traces internes et les messages d’erreur.
Propriétés d’ingestion
Important
Dans les données d’ingestion mises en file d’attente, les données sont traitées par lot à l’aide de propriétés d’ingestion. Les propriétés de mappage d’ingestion plus distinctes utilisées, telles que différentes valeurs ConstValue, sont plus fragmentées l’ingestion devient, ce qui peut entraîner une dégradation des performances.
Le tableau suivant répertorie et décrit les propriétés prises en charge et fournit des exemples :
Propriété | Description | Exemple |
---|---|---|
ingestionMapping |
Valeur de chaîne qui indique comment mapper les données du fichier source aux colonnes réelles de la table. Définissez la valeur format avec le type de mappage approprié. Consultez Mappages de données. |
with (format="json", ingestionMapping = "[{\"column\":\"rownumber\", \"Properties\":{\"Path\":\"$.RowNumber\"}}, {\"column\":\"rowguid\", \"Properties\":{\"Path\":\"$.RowGuid\"}}]") (sont dépréciés : avroMapping , csvMapping , jsonMapping ) |
ingestionMappingReference |
Valeur de chaîne qui indique comment mapper les données du fichier source aux colonnes réelles de la table en utilisant un objet de stratégie de mappage nommé. Définissez la valeur format avec le type de mappage approprié. Consultez Mappages de données. |
with (format="csv", ingestionMappingReference = "Mapping1") (sont dépréciés : avroMappingReference , csvMappingReference , jsonMappingReference ) |
creationTime |
Valeur DateHeure (sous forme de chaîne ISO8601) à utiliser comme heure de création des étendues de données ingérées. Si elle n’est pas spécifiée, la valeur actuelle (now() ) est utilisée. La substitution de la valeur par défaut est utile lors de l’ingestion de données plus anciennes, afin que la stratégie de rétention soit appliquée correctement. Lorsqu’elle est spécifiée, assurez-vous que la propriété Lookback de la stratégie de fusion des étendues effective de la table cible est alignée sur la valeur spécifiée. |
with (creationTime="2017-02-13") |
extend_schema |
Valeur booléenne qui, si elle est spécifiée, indique à la commande d’étendre le schéma de la table (la valeur par défaut est false ). Cette option s’applique uniquement aux commandes .append et .set-or-append . Les seules extensions de schéma autorisées ont plus de colonnes ajoutées à la table à la fin. |
Si le schéma de la table d’origine est (a:string, b:int) , une extension de schéma valide est (a:string, b:int, c:datetime, d:string) et non (a:string, c:datetime) |
folder |
Pour les commandes ingest-from-query, dossier à attribuer à la table. Si la table existe déjà, cette propriété remplace le dossier de la table. | with (folder="Tables/Temporary") |
format |
Format des données (voir formats de données pris en charge). | with (format="csv") |
ingestIfNotExists |
Valeur de chaîne qui, si elle est spécifiée, empêche l’ingestion de s’effectuer correctement si la table a déjà des données balisées avec une balise ingest-by: de la même valeur. Cela garantit une ingestion des données idempotent. Pour plus d’informations, consultez Étiquettes ingest-by:. |
Les propriétés with (ingestIfNotExists='["Part0001"]', tags='["ingest-by:Part0001"]') indiquent que si des données existent déjà avec l’étiquette ingest-by:Part0001 , vous ne devez pas effectuer l’ingestion actuelle. Si elles n’existent pas déjà, l’étiquette doit être définie dans la nouvelle ingestion (au cas où une future ingestion tente d’ingérer une nouvelle fois les mêmes données). |
ignoreFirstRecord |
Valeur booléenne qui, si elle a la valeur true , indique que l’ingestion doit ignorer le premier enregistrement de chaque fichier. Cette propriété est utile pour les fichiers au format CSV (et similaires) si le premier enregistrement dans le fichier représente les noms de colonne. Par défaut, la valeur false est supposée. |
with (ignoreFirstRecord=false) |
policy_ingestiontime |
Valeur booléenne qui, si elle est spécifiée, indique d’activer ou non la stratégie de durée d’ingestion sur une table créée par cette commande. Par défaut, il s’agit de true . |
with (policy_ingestiontime=false) |
recreate_schema |
Valeur booléenne qui, si elle est spécifiée, indique si la commande peut recréer ou non le schéma de la table. Cette propriété s’applique uniquement à la commande .set-or-replace . Cette propriété est prioritaire sur la propriété extend_schema si les deux sont définies. |
with (recreate_schema=true) |
tags |
Liste d’étiquettes à associer aux données ingérées, sous forme de chaîne JSON | with (tags="['Tag1', 'Tag2']") |
TreatGzAsUncompressed |
Valeur booléenne qui, si elle est définie true sur , indique que les fichiers avec l’extension .gz ne sont pas compressés. Cet indicateur est parfois nécessaire lors de l’ingestion à partir d’Amazon AWS S3. |
with (treatGzAsUncompressed=true) |
validationPolicy |
Chaîne JSON qui indique les validations à exécuter pendant l’ingestion des données représentées au format CSV. Consultez Ingestion des données pour avoir une explication des différentes options. | with (validationPolicy='{"ValidationOptions":1, "ValidationImplications":1}') (il s’agit de la stratégie par défaut) |
zipPattern |
Utilisez cette propriété en cas d’ingestion des données à partir d’un stockage qui a une archive ZIP. Il s’agit d’une valeur de chaîne indiquant l’expression régulière à utiliser pour sélectionner les fichiers de l’archive ZIP à ingérer. Tous les autres fichiers de l’archive sont ignorés. | with (zipPattern="*.csv") |
Authentification et autorisation
Chaque chaîne de connexion de stockage indique la méthode d’autorisation à utiliser pour l’accès au stockage. Selon la méthode d’autorisation, le principal peut avoir besoin d’autorisations sur le stockage externe pour effectuer l’ingestion.
Le tableau suivant répertorie les méthodes d’authentification prises en charge et les autorisations nécessaires pour l’ingestion de données à partir d’un stockage externe.
Méthode d'authentification | Stockage Blob Azure / Data Lake Storage Gen2 | Data Lake Storage Gen 1 |
---|---|---|
Emprunt d'identité | Lecteur des données blob du stockage | Lecteur |
Jeton d’accès partagé (SAS) | Liste + Lecture | Cette méthode d’authentification n’est pas prise en charge dans Gen1. |
Jeton d’accès Microsoft Entra | ||
Clé d’accès au compte de stockage | Cette méthode d’authentification n’est pas prise en charge dans Gen1. | |
Identité gérée | Lecteur des données blob du stockage | Lecteur |
Retours
Le résultat de la commande est une table avec autant d’enregistrements qu’il y a de partitions de données (« étendues ») générées par la commande. Si aucune partition de données n’a été générée, un seul enregistrement est retourné avec un ID d’étendue vide (zéro).
Nom | Type | Description |
---|---|---|
ExtentId | guid |
Identificateur unique pour la partition de données qui a été générée par la commande. |
ItemLoaded | string |
Un ou plusieurs fichiers de stockage associés à cet enregistrement. |
Durée | timespan |
Durée du processus d’ingestion. |
HasErrors | bool |
Indique si cet enregistrement constitue ou non un échec d’ingestion. |
OperationId | guid |
ID unique représentant l’opération. Peut être utilisé avec la commande .show operation . |
Remarque
Cette commande ne modifie pas le schéma de la table en cours d’ingestion. Si nécessaire, les données sont « forcées » dans ce schéma lors de l’ingestion. Toutefois, cela n’est pas possible dans l’autre sens (les colonnes supplémentaires sont ignorées, et les colonnes manquantes sont traitées comme des valeurs Null).
Exemples
Stockage Blob Azure avec signature d’accès partagé
L’exemple suivant indique à votre base de données de lire deux objets blob à partir de Stockage Blob Azure en tant que fichiers CSV et d’ingérer leur contenu dans la tableT
. ...
représente une signature d’accès partagé (SAS) du Stockage Azure qui donne un accès en lecture à chaque objet blob. Notez également l’utilisation de chaînes obfusquées (le h
devant les valeurs de chaîne) qui permet de garantir que la signature d’accès partagé ne sera jamais enregistrée.
.ingest into table T (
h'https://contoso.blob.core.windows.net/container/file1.csv?...',
h'https://contoso.blob.core.windows.net/container/file2.csv?...'
)
Stockage Blob Azure avec une identité managée
L’exemple suivant montre comment lire un fichier CSV à partir de Stockage Blob Azure et ingérer son contenu dans une table T
à l’aide de l’authentification d’identité managée. Pour plus d’informations sur la méthode d’authentification d’identité managée, consultez Vue d’ensemble de l’authentification d’identité managée.
.ingest into table T ('https://StorageAccount.blob.core.windows.net/Container/file.csv;managed_identity=802bada6-4d21-44b2-9d15-e66b29e4d63e')
Azure Data Lake Storage Gen 2
L’exemple suivant permet d’ingérer des données à partir d’Azure Data Lake Storage Gen2 (ADLSv2). Les informations d’identification utilisées ici (...
) sont celles du compte de stockage (clé partagée), et nous utilisons l’obfuscation des chaînes uniquement pour la partie secrète de la chaîne de connexion.
.ingest into table T (
'abfss://myfilesystem@contoso.dfs.core.windows.net/path/to/file1.csv;...'
)
Azure Data Lake Storage
L’exemple suivant ingère un fichier unique à partir d’Azure Data Lake Storage (ADLS). Il utilise les informations d’identification de l’utilisateur pour accéder à ADLS (de sorte qu’il n’est pas nécessaire de traiter l’URI de stockage comme s’il contenait un secret). Il montre également comment spécifier les propriétés d’ingestion.
.ingest into table T ('adl://contoso.azuredatalakestore.net/Path/To/File/file1.ext;impersonate')
with (format='csv')
Amazon S3 avec une clé d’accès
L’exemple suivant ingère un seul fichier à partir d’Amazon S3 à l’aide d’un ID de clé d’accès et d’une clé d’accès secrète.
.ingest into table T ('https://bucketname.s3.us-east-1.amazonaws.com/path/to/file.csv;AwsCredentials=AKIAIOSFODNN7EXAMPLE,wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY')
with (format='csv')
Amazon S3 avec une URL présignée
L’exemple suivant ingère un seul fichier à partir d’Amazon S3 à l’aide d’une URL présignée.
.ingest into table T ('https://bucketname.s3.us-east-1.amazonaws.com/file.csv?<<pre signed string>>')
with (format='csv')