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.
Utilisez le bouton Open CSV 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 Open CSV SerDe estorg.apache.hadoop.hive.serde2.OpenCSVSerde
. Pour plus d'informations sur le code source, consultez CSV SerDe
Utiliser l'Open CSV 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 VPC de flux Amazon 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 chaînes de données :
-
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 CSV les fichiers.
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
etDOUBLE
. -
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 questring
et utiliser ensuiteCAST
pour convertir le champ dans une requête en un type de données numérique, en fournissant une valeur par défaut de0
pour les valeurs nulles. Pour plus d'informations, voir Lorsque j'interroge CSV des données dans Athena, je reçois l'erreur HIVE _ BAD _ DATA : Erreur lors de l'analyse de la valeur du champdans le AWS Knowledge Center. -
Pour les colonnes spécifiées avec le type de
timestamp
données dans votreCREATE TABLE
relevé, reconnaîtTIMESTAMP
les données si elles sont spécifiées au format UNIX numérique en millisecondes, par exemple.1579059880000
Pour obtenir un exemple, consultez Example: Using the TIMESTAMP type and DATE type specified in the UNIX numeric format.-
The Open CSV SerDe ne prend pas
TIMESTAMP
en charge lesjava.sql.Timestamp
formats JDBC compatibles, tels 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 instructionCREATE 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 valeur18276
dans une colonne avec le type de donnéesdate
est rendue comme2020-01-15
lorsqu'elle est interrogée. Dans ce UNIX format, chaque jour est considéré comme comptant 86 400 secondes.-
The Open CSV SerDe ne prend directement
DATE
en charge aucun autre format. Pour traiter les données d'horodatage dans d'autres formats, vous pouvez définir la colonne commestring
et ensuite utiliser les fonctions de conversion de temps pour retourner les résultats souhaités dans votre requêteSELECT
. Pour plus d'informations, consultez l'article Lorsque j'interroge une table dans Amazon Athena, le TIMESTAMP résultat est videdans le centre de AWS connaissances .
-
-
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 simples CSV
L'exemple suivant suppose que vous avez enregistré CSV des données à 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. OpenCSVSerde
Ré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 TIMESTAMP type et du DATE type spécifiés au UNIX format numérique
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