Ouvrez le fichier CSV SerDe pour le traitement du fichier CSV - Amazon Athena

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.

Ouvrez le fichier CSV SerDe pour le traitement du fichier CSV

Utilisez le fichier CSV ouvert SerDe pour créer des tables Athena à partir de données séparées par des virgules (CSV).

Nom de la bibliothèque de sérialisation

Le nom de la bibliothèque de sérialisation pour le fichier Open CSV SerDe estorg.apache.hadoop.hive.serde2.OpenCSVSerde. Pour obtenir des informations sur le code source, voir CSV SerDe dans la documentation d'Apache.

Utilisation du fichier CSV ouvert SerDe

Pour l'utiliser SerDe, spécifiez son nom de classe complet aprèsROW FORMAT SERDE. Spécifiez également les délimiteurs à l'intérieurSERDEPROPERTIES, comme dans l'exemple suivant.

... ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde' WITH SERDEPROPERTIES ( "separatorChar" = ",", "quoteChar" = "`", "escapeChar" = "\\" )

Ignorer les en-têtes

Pour ignorer les en-têtes dans vos données lorsque vous définissez une table, vous pouvez utiliser la propriété de table skip.header.line.count, comme dans l'exemple suivant.

TBLPROPERTIES ("skip.header.line.count"="1")

Pour des exemples, voir les instructions CREATE TABLE dans Interrogez les journaux de flux Amazon VPC et Interrogez les CloudFront journaux d'Amazon.

Considérations relatives aux données sous forme de chaîne

L'Open CSV SerDe présente les caractéristiques suivantes pour les données sous forme de chaîne :

  • Utilise des guillemets (") en tant que caractère par défaut et vous permet de spécifier des séparateurs, des guillemets et des caractères d'échappement, tels que :

    WITH SERDEPROPERTIES ("separatorChar" = ",", "quoteChar" = "`", "escapeChar" = "\\" )
  • Vous ne pouvez pas vous échapper \t ou \n directement. Pour ce faire, utilisez "escapeChar" = "\\". Pour obtenir un exemple, consultez Example: Escaping \t or \n.

  • L'Open CSV SerDe ne prend pas en charge les sauts de ligne intégrés dans les fichiers CSV.

Considérations relatives aux données autres que des chaînes

Pour les types de données autres queSTRING, l'Open CSV SerDe se comporte comme suit :

  • Reconnaît les de données BOOLEAN, BIGINT, INT et DOUBLE.

  • Ne reconnaît pas les valeurs vides ou nulles dans les colonnes définies en tant que type de données numériques, et les conserve en tant que string. Une solution consiste à créer la colonne avec les valeurs nulles en tant que string et utiliser ensuite CAST pour convertir le champ dans une requête en un type de données numérique, en fournissant une valeur par défaut de 0 pour les valeurs nulles. Pour plus d'informations, voir Lorsque j'interroge des données CSV dans Athena, je reçois l'erreur HIVE_BAD_DATA : Erreur lors de l'analyse de la valeur du champ dans le Knowledge Center. AWS

  • Pour les colonnes spécifiées avec le type de données timestamp dans votre instruction CREATE TABLE, il reconnaît les données TIMESTAMP si elles sont spécifiées dans le format numérique UNIX en millisecondes, par exemple, 1579059880000. Pour obtenir un exemple, consultez Example: Using the TIMESTAMP type and DATE type specified in the UNIX numeric format.

    • L'Open CSV SerDe ne prend pas TIMESTAMP en charge le java.sql.Timestamp format compatible JDBC, tel que "YYYY-MM-DD HH:MM:SS.fffffffff" (précision à 9 décimales).

  • Pour les colonnes spécifiées avec le type de données DATE dans votre instruction CREATE TABLE, il reconnaît les valeurs comme des dates si les valeurs représentent le nombre de jours qui se sont écoulés depuis le 1er janvier 1970. Par exemple, la valeur 18276 dans une colonne avec le type de données date est rendue comme 2020-01-15 lorsqu'elle est interrogée. Dans ce format UNIX, chaque jour est considéré comme ayant 86 400 secondes.

  • Pour mieux convertir les colonnes en le type souhaité dans une table, vous pouvez créer une vue sur la table et utiliser CAST pour la conversion.

Exemples

Exemple : interrogation de données CSV simples

L'exemple suivant suppose que vous avez enregistré des données CSV à l'emplacement s3://amzn-s3-demo-bucket/mycsv/ avec le contenu suivant :

"a1","a2","a3","a4" "1","2","abc","def" "a","a1","abc3","ab4"

Utilisez une instruction CREATE TABLE pour créer une table Athena basée sur les données. OpenCSVSerdeRéférencez (notez le « d » en minuscules) après ROW FORMAT SERDE et spécifiez le séparateur de caractères, le guillemet et le caractère d'échappementWITH SERDEPROPERTIES, comme dans l'exemple suivant.

CREATE EXTERNAL TABLE myopencsvtable ( col1 string, col2 string, col3 string, col4 string ) ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde' WITH SERDEPROPERTIES ( 'separatorChar' = ',', 'quoteChar' = '"', 'escapeChar' = '\\' ) STORED AS TEXTFILE LOCATION 's3://amzn-s3-demo-bucket/mycsv/';

Interrogez toutes les valeurs de la table :

SELECT * FROM myopencsvtable;

La requête renvoie les valeurs suivantes :

col1 col2 col3 col4 ----------------------------- a1 a2 a3 a4 1 2 abc def a a1 abc3 ab4
Exemple : utilisation du type TIMESTAMP et du type DATE spécifiés au format numérique UNIX

Considérez les trois colonnes suivantes de données séparées par des virgules. Les valeurs de chaque colonne sont placées entre guillemets.

"unixvalue creationdate 18276 creationdatetime 1579059880000","18276","1579059880000"

L'instruction suivante crée une table dans Athena à partir de l'emplacement du compartiment Simple Storage Service (Amazon S3) spécifié.

CREATE EXTERNAL TABLE IF NOT EXISTS testtimestamp1( `profile_id` string, `creationdate` date, `creationdatetime` timestamp ) ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde' LOCATION 's3://amzn-s3-demo-bucket'

Ensuite, exécutez la requête suivante :

SELECT * FROM testtimestamp1

La requête renvoie le résultat suivant, affichant les données de date et d'heure :

profile_id creationdate creationdatetime unixvalue creationdate 18276 creationdatetime 1579146280000 2020-01-15 2020-01-15 03:44:40.000
Exemple : échapper à \ t ou\n

Examinez les données de test suivantes :

" \\t\\t\\n 123 \\t\\t\\n ",abc " 456 ",xyz

L'instruction suivante crée une table dans Athena, en spécifiant que "escapeChar" = "\\".

CREATE EXTERNAL TABLE test1 ( f1 string, s2 string) ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde' WITH SERDEPROPERTIES ("separatorChar" = ",", "escapeChar" = "\\") LOCATION 's3://amzn-s3-demo-bucket/dataset/test1/'

Ensuite, exécutez la requête suivante :

SELECT * FROM test1;

Elle renvoie ce résultat, en échappant correctement \t ou \n :

f1 s2 \t\t\n 123 \t\t\n abc 456 xyz