View a markdown version of this page

Accès complet aux tables de Lake Formation pour EMR Serverless - Amazon EMR

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Accès complet aux tables de Lake Formation pour EMR Serverless

Avec les versions 7.8.0 et supérieures d'Amazon EMR, vous pouvez tirer parti de AWS Lake Formation with Glue Data Catalog, dans lequel le rôle d'exécution des tâches dispose d'autorisations complètes sur les tables, sans les limites d'un contrôle d'accès précis. Cette fonctionnalité vous permet de lire et d'écrire sur des tables protégées par Lake Formation à partir de votre lot EMR Serverless Spark et de vos tâches interactives. Consultez les sections suivantes pour en savoir plus sur Lake Formation et sur son utilisation avec EMR Serverless.

Utilisation de Lake Formation avec accès complet aux tables

Vous pouvez accéder aux tables du catalogue Glue Data protégées par AWS Lake Formation à partir de jobs EMR Serverless Spark ou de sessions interactives dans lesquelles le rôle d'exécution de la tâche dispose d'un accès complet aux tables. Il n'est pas nécessaire d'activer AWS Lake Formation sur l'application EMR Serverless. Lorsqu'une tâche Spark est configurée pour un accès complet aux tables (FTA), les informations d'identification de AWS Lake Formation sont utilisées pour les données read/write S3 des tables enregistrées par AWS Lake Formation, tandis que les informations d'identification du rôle d'exécution de la tâche seront utilisées pour read/write les tables non enregistrées auprès de AWS Lake Formation.

Important

N'activez pas AWS Lake Formation pour un contrôle d'accès précis. Une tâche ne peut pas exécuter simultanément un accès complet aux tables (FTA) et un contrôle d'accès détaillé (FGAC) sur le même cluster ou application EMR.

Étape 1 : Activer l'accès complet à la table dans Lake Formation

Pour utiliser le mode Full Table Access (FTA), vous devez autoriser les moteurs de requêtes tiers à accéder aux données sans la validation des balises de session IAM dans AWS Lake Formation. Pour l’activer, suivez les étapes de la section Intégration des applications pour un accès complet aux tables.

Note

Lorsque vous accédez à des tables entre comptes, l'accès complet aux tables doit être activé à la fois dans les comptes de producteurs et de consommateurs. De la même manière, lors de l'accès aux tables interrégionales, ce paramètre doit être activé à la fois dans les régions productrices et consommatrices.

Étape 2 : configurer des autorisations IAM pour le rôle d’exécution des tâches

Pour accéder en lecture ou en écriture aux données sous-jacentes, outre les autorisations de Lake Formation, un rôle d'exécution de tâche nécessite l'autorisation lakeformation:GetDataAccess IAM. Avec cette autorisation, Lake Formation accède à la demande d'informations d'identification temporaires pour accéder aux données.

Voici un exemple de politique expliquant comment fournir des autorisations IAM pour accéder à un script dans Amazon S3, télécharger des journaux vers S3, autoriser l'API AWS Glue et accéder à Lake Formation.

JSON
{ "Version":"2012-10-17", "Statement": [ { "Sid": "ScriptAccess", "Effect": "Allow", "Action": [ "s3:GetObject" ], "Resource": [ "arn:aws:s3:::*.amzn-s3-demo-bucket/scripts" ] }, { "Sid": "LoggingAccess", "Effect": "Allow", "Action": [ "s3:PutObject" ], "Resource": [ "arn:aws:s3:::amzn-s3-demo-bucket/logs/*" ] }, { "Sid": "GlueCatalogAccess", "Effect": "Allow", "Action": [ "glue:Get*", "glue:Create*", "glue:Update*" ], "Resource": [ "*" ] }, { "Sid": "LakeFormationAccess", "Effect": "Allow", "Action": [ "lakeformation:GetDataAccess" ], "Resource": [ "*" ] } ] }

Étape 2.1 Configurer les autorisations de Lake Formation

  • Les tâches Spark qui lisent des données depuis S3 nécessitent l'autorisation de Lake Formation SELECT.

  • Les tâches Spark dont write/delete les données dans S3 nécessitent l'autorisation de Lake Formation ALL (SUPER).

  • Les tâches Spark qui interagissent avec le catalogue Glue Data nécessitent les autorisations DESCRIBE, ALTER, DROP, selon le cas.

Pour plus d'informations, reportez-vous à la section Octroi d'autorisations sur les ressources du catalogue de données.

Étape 3 : Initialisation d'une session Spark pour un accès complet à la table à l'aide de Lake Formation

Conditions préalables

AWS Le catalogue de données Glue doit être configuré en tant que métastore pour accéder aux tables de Lake Formation.

Définissez les paramètres suivants pour configurer le catalogue Glue en tant que métastore :

--conf spark.sql.catalogImplementation=hive --conf spark.hive.metastore.client.factory.class=com.amazonaws.glue.catalog.metastore.AWSGlueDataCatalogHiveClientFactory

Pour plus d'informations sur l'activation du catalogue de données pour EMR Serverless, reportez-vous à la section Configuration de Metastore pour EMR Serverless.

Pour accéder aux tables enregistrées auprès de AWS Lake Formation, les configurations suivantes doivent être définies lors de l'initialisation de Spark afin que Spark utilise les informations d'identification de AWS Lake Formation.

Hive
‐‐conf spark.hadoop.fs.s3.credentialsResolverClass=com.amazonaws.glue.accesscontrol.AWSLakeFormationCredentialResolver --conf spark.hadoop.fs.s3.useDirectoryHeaderAsFolderObject=true --conf spark.hadoop.fs.s3.folderObject.autoAction.disabled=true --conf spark.sql.catalog.skipLocationValidationOnCreateTable.enabled=true --conf spark.sql.catalog.createDirectoryAfterTable.enabled=true --conf spark.sql.catalog.dropDirectoryBeforeTable.enabled=true
Iceberg
--conf spark.sql.catalog.spark_catalog=org.apache.iceberg.spark.SparkSessionCatalog --conf spark.sql.catalog.spark_catalog.warehouse=S3_DATA_LOCATION --conf spark.sql.catalog.spark_catalog.client.region=REGION --conf spark.sql.catalog.spark_catalog.type=glue --conf spark.sql.catalog.spark_catalog.glue.account-id=ACCOUNT_ID --conf spark.sql.catalog.spark_catalog.glue.lakeformation-enabled=true --conf spark.sql.catalog.dropDirectoryBeforeTable.enabled=true
Delta Lake
‐‐conf spark.hadoop.fs.s3.credentialsResolverClass=com.amazonaws.glue.accesscontrol.AWSLakeFormationCredentialResolver --conf spark.hadoop.fs.s3.useDirectoryHeaderAsFolderObject=true --conf spark.hadoop.fs.s3.folderObject.autoAction.disabled=true --conf spark.sql.catalog.skipLocationValidationOnCreateTable.enabled=true --conf spark.sql.catalog.createDirectoryAfterTable.enabled=true --conf spark.sql.catalog.dropDirectoryBeforeTable.enabled=true
Hudi
‐‐conf spark.hadoop.fs.s3.credentialsResolverClass=com.amazonaws.glue.accesscontrol.AWSLakeFormationCredentialResolver --conf spark.hadoop.fs.s3.useDirectoryHeaderAsFolderObject=true --conf spark.hadoop.fs.s3.folderObject.autoAction.disabled=true --conf spark.sql.catalog.skipLocationValidationOnCreateTable.enabled=true --conf spark.sql.catalog.createDirectoryAfterTable.enabled=true --conf spark.sql.catalog.dropDirectoryBeforeTable.enabled=true --conf spark.jars=/usr/lib/hudi/hudi-spark-bundle.jar --conf spark.sql.extensions=org.apache.spark.sql.hudi.HoodieSparkSessionExtension --conf spark.sql.catalog.spark_catalog=org.apache.spark.sql.hudi.catalog.HoodieCatalog --conf spark.serializer=org.apache.spark.serializer.KryoSerializer
  • spark.hadoop.fs.s3.credentialsResolverClass=com.amazonaws.glue.accesscontrol.AWSLakeFormationCredentialResolver: Configurez le système de fichiers EMR (EMRFS) ou EMR S3A pour utiliser les informations d'identification de AWS Lake Formation S3 pour les tables enregistrées par Lake Formation. Si la table n’est pas enregistrée, utilisez les informations d’identification du rôle d’exécution de la tâche.

  • spark.hadoop.fs.s3.useDirectoryHeaderAsFolderObject=true et spark.hadoop.fs.s3.folderObject.autoAction.disabled=true : configurez EMRFS pour utiliser l’en-tête de type de contenu application/x-directory au lieu du suffixe $folder$ lors de la création de dossiers S3. Cela est nécessaire lors de la lecture des tables de Lake Formation, car les informations d'identification de Lake Formation ne permettent pas de lire les dossiers de tables portant le suffixe $folder$.

  • spark.sql.catalog.skipLocationValidationOnCreateTable.enabled=true : configurez Spark pour ignorer la validation de l’emplacement vide de la table avant sa création. Cela est nécessaire pour les tables enregistrées dans Lake Formation, car les informations d'identification de Lake Formation permettant de vérifier l'emplacement vide ne sont disponibles qu'après la création de la table Glue Data Catalog. Sans cette configuration, les informations d’identification du rôle d’exécution de la tâche valideront l’emplacement de la table vide.

  • spark.sql.catalog.createDirectoryAfterTable.enabled=true : configurez Spark pour créer le dossier Amazon S3 après la création de la table dans le métastore Hive. Cela est obligatoire pour les tables enregistrées dans Lake Formation, car les informations d'identification de Lake Formation permettant de créer le dossier S3 ne sont disponibles qu'après la création de la table Glue Data Catalog.

  • spark.sql.catalog.dropDirectoryBeforeTable.enabled=true: configurez Spark pour qu'il supprime le dossier S3 avant la suppression de la table dans le métastore Hive. Cela est nécessaire pour les tables enregistrées par Lake Formation, car les informations d'identification de Lake Formation permettant de supprimer le dossier S3 ne sont pas disponibles après la suppression des tables du catalogue de données Glue.

  • spark.sql.catalog.<catalog>.glue.lakeformation-enabled=true: Configurez le catalogue Iceberg pour utiliser les informations d'identification de AWS Lake Formation S3 pour les tables enregistrées par Lake Formation. Si la table n’est pas enregistrée, utilisez les informations d’identification d’environnement par défaut.

Configurer le mode d'accès complet aux tables dans SageMaker Unified Studio

Pour accéder aux tables enregistrées de Lake Formation à partir de sessions Spark interactives dans des JupyterLab blocs-notes, utilisez le mode d'autorisation de compatibilité. Utilisez la commande magique %%configure pour configurer votre configuration Spark. Choisissez la configuration en fonction de votre type de table :

For Hive tables
%%configure -f { "conf": { "spark.hadoop.fs.s3.credentialsResolverClass": "com.amazonaws.glue.accesscontrol.AWSLakeFormationCredentialResolver", "spark.hadoop.fs.s3.useDirectoryHeaderAsFolderObject": true, "spark.hadoop.fs.s3.folderObject.autoAction.disabled": true, "spark.sql.catalog.skipLocationValidationOnCreateTable.enabled": true, "spark.sql.catalog.createDirectoryAfterTable.enabled": true, "spark.sql.catalog.dropDirectoryBeforeTable.enabled": true } }
For Iceberg tables
%%configure -f { "conf": { "spark.sql.catalog.spark_catalog": "org.apache.iceberg.spark.SparkSessionCatalog", "spark.sql.catalog.spark_catalog.warehouse": "S3_DATA_LOCATION", "spark.sql.catalog.spark_catalog.client.region": "REGION", "spark.sql.catalog.spark_catalog.type": "glue", "spark.sql.catalog.spark_catalog.glue.account-id": "ACCOUNT_ID", "spark.sql.catalog.spark_catalog.glue.lakeformation-enabled": "true", "spark.sql.catalog.dropDirectoryBeforeTable.enabled": "true" } }
For Delta Lake tables
%%configure -f { "conf": { "spark.hadoop.fs.s3.credentialsResolverClass": "com.amazonaws.glue.accesscontrol.AWSLakeFormationCredentialResolver", "spark.hadoop.fs.s3.useDirectoryHeaderAsFolderObject": true, "spark.hadoop.fs.s3.folderObject.autoAction.disabled": true, "spark.sql.catalog.skipLocationValidationOnCreateTable.enabled": true, "spark.sql.catalog.createDirectoryAfterTable.enabled": true, "spark.sql.catalog.dropDirectoryBeforeTable.enabled": true } }
For Hudi tables
%%configure -f { "conf": { "spark.hadoop.fs.s3.credentialsResolverClass": "com.amazonaws.glue.accesscontrol.AWSLakeFormationCredentialResolver", "spark.hadoop.fs.s3.useDirectoryHeaderAsFolderObject": true, "spark.hadoop.fs.s3.folderObject.autoAction.disabled": true, "spark.sql.catalog.skipLocationValidationOnCreateTable.enabled": true, "spark.sql.catalog.createDirectoryAfterTable.enabled": true, "spark.sql.catalog.dropDirectoryBeforeTable.enabled": true, "spark.jars": "/usr/lib/hudi/hudi-spark-bundle.jar", "spark.sql.extensions": "org.apache.spark.sql.hudi.HoodieSparkSessionExtension", "spark.sql.catalog.spark_catalog": "org.apache.spark.sql.hudi.catalog.HoodieCatalog", "spark.serializer": "org.apache.spark.serializer.KryoSerializer" } }

Remplacez les espaces réservés :

  • S3_DATA_LOCATION: le chemin de votre compartiment S3

  • REGION: AWS région (par exemple, us-east-1)

  • ACCOUNT_ID: votre identifiant AWS de compte

Note

Vous devez définir ces configurations avant d’exécuter des opérations Spark dans votre bloc-notes.

Opérations prises en charge

Ces opérations utiliseront les informations d'identification de AWS Lake Formation pour accéder aux données de la table.

  • CREATE TABLE

  • ALTER TABLE

  • INSERT INTO

  • INSERT OVERWRITE

  • UPDATE

  • MERGE INTO

  • DELETE FROM

  • ANALYZE TABLE

  • REPAIR TABLE

  • DROP TABLE

  • Requêtes de source de données Spark

  • Écritures de source de données Spark

Note

Les opérations non répertoriées ci-dessus continueront à utiliser les autorisations IAM pour accéder aux données de la table.

Considérations

  • Si une table Hive est créée à l'aide d'une tâche pour laquelle l'accès complet à la table n'est pas activé et qu'aucun enregistrement n'est inséré, les lectures ou écritures suivantes à partir d'une tâche avec accès complet à la table échoueront. Cela est dû au fait qu'EMR Spark sans accès complet à la table ajoute le $folder$ suffixe au nom du dossier de la table. Pour résoudre cela, vous pouvez procéder comme suit :

    • Insérez au moins une ligne dans la table à partir d’une tâche pour laquelle FTA n’est pas activé.

    • Configurez la tâche pour laquelle FTA n'est pas activé pour ne pas utiliser de $folder$ suffixe dans le nom du dossier dans S3. Cela peut être réalisé en configurant spark.hadoop.fs.s3.useDirectoryHeaderAsFolderObject=true pour Spark.

    • Créez un dossier S3 à l'emplacement de la table à s3://path/to/table/table_name l'aide de la console AWS S3 ou de la CLI AWS S3.

  • L'accès complet aux tables est pris en charge avec le système de fichiers EMR (EMRFS) à partir de la version 7.8.0 d'Amazon EMR, et avec le système de fichiers S3A à partir de la version 7.10.0 d'Amazon EMR.

  • L'accès complet aux tables est pris en charge pour les tables Hive, Iceberg, Delta et Hudi.

  • Considérations relatives au support Hudi FTA Write :

    • Les écritures Hudi FTA doivent être utilisées HoodieCredentialedHadoopStorage pour la vente d'informations d'identification lors de l'exécution du travail. Définissez la configuration suivante lors de l'exécution des tâches Hudi : hoodie.storage.class=org.apache.spark.sql.hudi.storage.HoodieCredentialedHadoopStorage

    • La prise en charge de l'écriture Full Table Access (FTA) pour Hudi est disponible à partir de la version 7.12 d'Amazon EMR.

    • Le support d'écriture Hudi FTA ne fonctionne actuellement qu'avec les configurations Hudi par défaut. Les paramètres Hudi personnalisés ou autres que ceux par défaut peuvent ne pas être entièrement pris en charge et peuvent entraîner un comportement inattendu.

    • Le clustering pour les tables Hudi Merge-On-Read (MOR) n'est pas pris en charge à ce stade en mode d'écriture FTA.

  • Les tâches faisant référence à des tables conformes aux règles FGAC (Lake Formation Fine-Grained Access Control) ou à Glue Data Catalog Views échoueront. Pour interroger une table avec des règles FGAC ou une vue du catalogue Glue Data, vous devez utiliser le mode FGAC. Vous pouvez activer le mode FGAC en suivant les étapes décrites dans la AWS documentation : Utilisation d'EMR Serverless with Lake AWS Formation pour un contrôle d'accès précis.

  • L’accès complet aux tables ne prend pas en charge Spark Streaming.

  • Lorsque vous écrivez Spark DataFrame dans une table Lake Formation, seul le mode APPEND est pris en charge pour les tables Hive et Iceberg : df.write.mode("append").saveAsTable(table_name)

  • La création de tables externes nécessite des autorisations IAM.

  • Comme Lake Formation met temporairement en cache les informations d'identification dans une tâche Spark, une tâche par lots Spark ou une session interactive en cours d'exécution risque de ne pas refléter les modifications d'autorisation.

  • Vous devez utiliser un rôle défini par l'utilisateur et non un rôle lié à un service : Lake Formation requiert des rôles.

Hudi FTA Write Support - Opérations prises en charge

Le tableau suivant indique les opérations d'écriture prises en charge pour les tables Hudi Copy-On-Write (COW) et Merge-On-Read (MOR) en mode Accès complet aux tables :

Opérations d'écriture prises en charge par Hudi FTA
Type de table Opération Commande d'écriture SQL Statut
VACHE INSERT INSÉRER DANS LE TABLEAU Pris en charge
VACHE INSERT INSÉRER DANS LE TABLEAU - PARTITION (statique, dynamique) Pris en charge
VACHE INSERT INSERT OVERWRITE Pris en charge
VACHE INSERT INSERT OVERWRITE - PARTITION (statique, dynamique) Pris en charge
UPDATE UPDATE TABLE DE MISE À JOUR Pris en charge
VACHE UPDATE TABLE DE MISE À JOUR - Modifier la partition Non pris en charge
DELETE DELETE SUPPRIMER DU TABLEAU Pris en charge
ALTER ALTER MODIFIER LA TABLE - RENOMMER EN Non pris en charge
VACHE ALTER MODIFIER LA TABLE - DÉFINIR LES PROPRIÉTÉS DE LA TABLE Pris en charge
VACHE ALTER MODIFIER LA TABLE - DÉSACTIVER LES PROPRIÉTÉS DE LA TABLE Pris en charge
VACHE ALTER MODIFIER LA TABLE - MODIFIER LA COLONNE Pris en charge
VACHE ALTER MODIFIER LA TABLE - AJOUTER DES COLONNES Pris en charge
VACHE ALTER MODIFIER LA TABLE - AJOUTER UNE PARTITION Pris en charge
VACHE ALTER MODIFIER LA TABLE - SUPPRIMER LA PARTITION Pris en charge
VACHE ALTER MODIFIER LA TABLE - RÉCUPÉRER DES PARTITIONS Pris en charge
VACHE ALTER RÉPARER LES PARTITIONS DE SYNCHRONISATION DES TABLES Pris en charge
DROP DROP DROP TABLE Pris en charge
VACHE DROP DROP TABLE - PURGE Pris en charge
CREATE CREATE CRÉER UNE TABLE - Géré Pris en charge
VACHE CREATE CRÉER UNE TABLE - PARTITIONNER PAR Pris en charge
VACHE CREATE CRÉER UNE TABLE SI ELLE N'EXISTE PAS Pris en charge
VACHE CREATE CREATE TABLE LIKE Pris en charge
VACHE CREATE CREATE TABLE AS SELECT Pris en charge
CREATE CREATE CRÉER UNE TABLE avec EMPLACEMENT - Table externe Non pris en charge
DATAFRAME (INSÉRER) DATAFRAME (INSÉRER) saveAsTable.Remplacer Pris en charge
VACHE DATAFRAME (INSÉRER) saveAsTable.Ajouter Non pris en charge
VACHE DATAFRAME (INSÉRER) saveAsTable.Ignorer Pris en charge
VACHE DATAFRAME (INSÉRER) saveAsTable.ErrorIfExists Pris en charge
VACHE DATAFRAME (INSÉRER) saveAsTable - Table externe (Path) Non pris en charge
VACHE DATAFRAME (INSÉRER) enregistrer (chemin) - DF v1 Non pris en charge
MOR INSERT INSÉRER DANS LE TABLEAU Pris en charge
MOR INSERT INSÉRER DANS LE TABLEAU - PARTITION (statique, dynamique) Pris en charge
MOR INSERT INSERT OVERWRITE Pris en charge
MOR INSERT INSERT OVERWRITE - PARTITION (statique, dynamique) Pris en charge
UPDATE UPDATE TABLE DE MISE À JOUR Pris en charge
MOR UPDATE TABLE DE MISE À JOUR - Modifier la partition Non pris en charge
DELETE DELETE SUPPRIMER DU TABLEAU Pris en charge
ALTER ALTER MODIFIER LA TABLE - RENOMMER EN Non pris en charge
MOR ALTER MODIFIER LA TABLE - DÉFINIR LES PROPRIÉTÉS DE LA TABLE Pris en charge
MOR ALTER MODIFIER LA TABLE - DÉSACTIVER LES PROPRIÉTÉS DE LA TABLE Pris en charge
MOR ALTER MODIFIER LA TABLE - MODIFIER LA COLONNE Pris en charge
MOR ALTER MODIFIER LA TABLE - AJOUTER DES COLONNES Pris en charge
MOR ALTER MODIFIER LA TABLE - AJOUTER UNE PARTITION Pris en charge
MOR ALTER MODIFIER LA TABLE - SUPPRIMER LA PARTITION Pris en charge
MOR ALTER MODIFIER LA TABLE - RÉCUPÉRER DES PARTITIONS Pris en charge
MOR ALTER RÉPARER LES PARTITIONS DE SYNCHRONISATION DES TABLES Pris en charge
DROP DROP DROP TABLE Pris en charge
MOR DROP DROP TABLE - PURGE Pris en charge
CREATE CREATE CRÉER UNE TABLE - Géré Pris en charge
MOR CREATE CRÉER UNE TABLE - PARTITIONNER PAR Pris en charge
MOR CREATE CRÉER UNE TABLE SI ELLE N'EXISTE PAS Pris en charge
MOR CREATE CREATE TABLE LIKE Pris en charge
MOR CREATE CREATE TABLE AS SELECT Pris en charge
CREATE CREATE CRÉER UNE TABLE avec EMPLACEMENT - Table externe Non pris en charge
DATAFRAME (BOULEVERSÉ) DATAFRAME (BOULEVERSÉ) saveAsTable.Remplacer Pris en charge
MOR DATAFRAME (BOULEVERSÉ) saveAsTable.Ajouter Non pris en charge
MOR DATAFRAME (BOULEVERSÉ) saveAsTable.Ignorer Pris en charge
MOR DATAFRAME (BOULEVERSÉ) saveAsTable.ErrorIfExists Pris en charge
MOR DATAFRAME (BOULEVERSÉ) saveAsTable - Table externe (Path) Non pris en charge
MOR DATAFRAME (BOULEVERSÉ) enregistrer (chemin) - DF v1 Non pris en charge
DATAFRAME (SUPPRIMER) DATAFRAME (SUPPRIMER) saveAsTable.Ajouter Non pris en charge
MOR DATAFRAME (SUPPRIMER) saveAsTable - Table externe (Path) Non pris en charge
MOR DATAFRAME (SUPPRIMER) enregistrer (chemin) - DF v1 Non pris en charge
TRAME DE DONNÉES (BULK_INSERT) TRAME DE DONNÉES (BULK_INSERT) saveAsTable.Remplacer Pris en charge
MOR TRAME DE DONNÉES (BULK_INSERT) saveAsTable.Ajouter Non pris en charge
MOR TRAME DE DONNÉES (BULK_INSERT) saveAsTable.Ignorer Pris en charge
MOR TRAME DE DONNÉES (BULK_INSERT) saveAsTable.ErrorIfExists Pris en charge
MOR TRAME DE DONNÉES (BULK_INSERT) saveAsTable - Table externe (Path) Non pris en charge
MOR TRAME DE DONNÉES (BULK_INSERT) enregistrer (chemin) - DF v1 Non pris en charge