J'essaie de créer une table externe sur des fichiers CSV avec Aws Athena avec le code ci-dessous, mais la ligne TBLPROPERTIES ("skip.header.line.count"="1")
ne fonctionne pas: elle ne saute pas la première ligne (en-tête) du fichier CSV.
CREATE EXTERNAL TABLE mytable
(
colA string,
colB int
)
ROW FORMAT SERDE 'org.Apache.hadoop.Hive.serde2.OpenCSVSerde'
WITH SERDEPROPERTIES (
'separatorChar' = ',',
'quoteChar' = '\"',
'escapeChar' = '\\'
)
STORED AS TEXTFILE
LOCATION 's3://mybucket/mylocation/'
TBLPROPERTIES (
"skip.header.line.count"="1")
Un conseil?
Juste essayé le "skip.header.line.count"="1"
et semble fonctionner correctement maintenant.
C'est une fonctionnalité qui n'a pas encore été implémentée. Voir la réponse de Abhishek @ AWS ici :
"Nous y travaillons et ferons rapport dès que nous aurons un résultat Je suis désolé pour cela encore. Cela a pris plus de temps que ce que nous avions prévu."
Ma solution de contournement a été de prétraiter les données avant de créer la table:
sed -e 1d -e 's/\"//g' file.csv > file-2.csv
J'ai récemment essayé:
TBLPROPERTIES ('skip.header.line.count'='1')
Et cela fonctionne bien maintenant. Ce problème est survenu lorsque l'en-tête de colonne sous forme de chaîne (horodatage) et les enregistrements contenant les horodatages réels. Mes requêtes bombarderaient car elles scanneraient la table et trouveraient une chaîne au lieu de timestamp
.
Quelque chose comme ça:
ts
2015-06-14 14: 45: 19.537
2015-06-14 14: 50: 20.546
Lorsque cette question a été posée, il n'y avait pas de support pour sauter les en-têtes, et quand a été introduit plus tard c'était seulement pour le OpenCSVSerDe , pas pour LazySimpleSerDe , ce que vous obtenez lorsque vous spécifiez ROW FORMAT DELIMITED FIELDS …
. Je pense que c'est ce qui a créé une certaine confusion quant à savoir si cela fonctionne ou non dans les réponses à cette question.