Utilisation des données CSV dans AWS Glue
Cette page décrit comment utiliser AWS Glue pour créer un schéma à partir de fichiers CSV comportant des guillemets autour des valeurs de données pour chaque colonne ou à partir de fichiers CSV contenant des valeurs d’en-tête.
Gestion des données CSV entre guillemets
Supposons qu’un fichier CSV comporte des champs de données entre guillemets, comme dans l’exemple suivant.
"John","Doe","123-555-1231","John said \"hello\""
"Jane","Doe","123-555-9876","Jane said \"hello\""
Pour exécuter une requête dans Athena sur une table créée à partir d'un fichier CSV comportant des valeurs entre guillemets, vous devez modifier les propriétés de la table dans AWS Glue afin d'utiliser l'option OpenCSVSerDe. Pour de plus amples informations sur le SerDe OpenCSV, veuillez consulter SerDe Open CSV pour le traitement de données CSV.
Modification des propriétés d'une table dans la console AWS Glue
-
Dans le panneau de navigation de la console AWS Glue, choisissez Tables.
-
Choisissez le lien de la table que vous souhaitez modifier, puis sélectionnez Action, Modifier la table.
-
Sur la page Modifier le tableau, procédez au modifications suivantes :
-
Dans la Bibliothèque de sérialisation, saisissez
org.apache.hadoop.hive.serde2.OpenCSVSerde. -
Pour Serde parameters (Paramètres Serde), saisissez les valeurs suivantes pour les clés
escapeChar,quoteCharetseparatorChar:-
Pour
escapeChar, saisissez une barre oblique inverse (\). -
Pour
quoteChar, saisissez un guillemet double ("). -
Pour
separatorChar, saisissez une virgule (,).
-
-
-
Choisissez Enregistrer.
Pour en savoir plus, consultez Affichage et modification des détails de table dans le Guide du développeur AWS Glue.
Vous pouvez également mettre à jour les propriétés de table AWS Glue par programmation. Utilisez l’opération API UpdateTable d’AWS Glue ou la commande update-table de l’AWS CLI pour modifier le bloc SerDeInfo dans la définition de la table, comme dans l’exemple JSON suivant.
"SerDeInfo": {
"name": "",
"serializationLib": "org.apache.hadoop.hive.serde2.OpenCSVSerde",
"parameters": {
"separatorChar": ","
"quoteChar": "\""
"escapeChar": "\\"
}
},
Gestion des fichiers CSV avec en-têtes
Lorsque vous définissez une table dans Athena avec une instruction CREATE TABLE, vous pouvez utiliser la propriété de table skip.header.line.count pour ignorer les en-têtes dans vos données CSV, comme dans l'exemple suivant.
... STORED AS TEXTFILE LOCATION 's3://amzn-s3-demo-bucket/csvdata_folder/'; TBLPROPERTIES ("skip.header.line.count"="1")
Vous pouvez également supprimer les en-têtes CSV au préalable afin que les informations d'en-tête ne soient pas incluses dans les résultats des requêtes Athena. Pour cela, vous pouvez utiliser des tâches AWS Glue, qui exécutent le travail d'extraction, de transformation et de chargement (ETL). Vous pouvez écrire des scripts dans AWS Glue à l'aide d'un langage qui est une extension du dialecte Python PySpark. Pour plus d'informations, consultez Création de tâches dans AWS Glue dans le AWS Glue Guide du développeur.
L'exemple suivant montre une fonction d'un script AWS Glue qui enregistre une trame dynamique avec from_options et définit l'option de format writeHeader avec la valeur false, qui supprime les informations d'en-tête :
glueContext.write_dynamic_frame.from_options(frame = applymapping1, connection_type = "s3", connection_options = {"path": "s3://amzn-s3-demo-bucket/MYTABLEDATA/"}, format = "csv", format_options = {"writeHeader": False}, transformation_ctx = "datasink2")