Lavorare con dati CSV in AWS Glue
Questa pagina descrive come utilizzare AWS Glue per creare uno schema da file CSV che contengono virgolette attorno ai valori dei dati per ogni colonna o da file CSV che includono valori di intestazione.
Gestire dati CSV tra virgolette
Immaginiamo di avere un file CSV che dispone di campi dati racchiusi tra virgolette doppie come nell'esempio seguente:
"John","Doe","123-555-1231","John said \"hello\""
"Jane","Doe","123-555-9876","Jane said \"hello\""
Per eseguire una query in Athena su una tabella creata da un file CSV con valori tra virgolette, è necessario modificare le proprietà della tabella in AWS Glue per utilizzare OpenCSVSerDe. Per ulteriori informazioni sul SerDe OpenCSV, consulta OpenCSVSerDe per elaborare file CSV.
Per modificare le proprietà della tabella nella console AWS Glue
-
Nel pannello di navigazione della console AWS Glue seleziona Tabelle.
-
Scegli il collegamento per la tabella che desideri modificare, quindi scegli Actions (Operazioni), Edit table details (Modifica tabella).
-
Nella pagina Edit table (Modifica tabella), apporta le modifiche seguenti:
-
Per Serialization lib (Libreria serializzazione), inserisci
org.apache.hadoop.hive.serde2.OpenCSVSerde. -
Per Parametri Serde, inserisci i seguenti valori per le chiavi
escapeChar,quoteChareseparatorChar:-
Per
escapeChar, inserire una barra rovesciata (\). -
Per
quoteChar, inserire una virgoletta doppia ("). -
Per
separatorChar, inserire una virgola (,).
-
-
-
Selezionare Salva.
Per ulteriori informazioni, consulta la sezione relativa alla visualizzazione e modifica dei dettagli tabella nella Guida per sviluppatori AWS Glue.
È possibile aggiornare le proprietà delle tabelle AWS Glue a livello di programmazione. Utilizzare l'operazione dell'API AWS Glue UpdateTable o il comando AWS CLI update-table per modificare il blocco SerDeInfo nella definizione della tabella, come nell'esempio seguente JSON.
"SerDeInfo": {
"name": "",
"serializationLib": "org.apache.hadoop.hive.serde2.OpenCSVSerde",
"parameters": {
"separatorChar": ","
"quoteChar": "\""
"escapeChar": "\\"
}
},
Gestione dei file CSV con intestazioni
Quando definisci una tabella in Athena con un'istruzione CREATE TABLE, puoi utilizzare la proprietà tabella skip.header.line.count per ignorare gli header nei dati CSV, come nell'esempio seguente.
... STORED AS TEXTFILE LOCATION 's3://amzn-s3-demo-bucket/csvdata_folder/'; TBLPROPERTIES ("skip.header.line.count"="1")
In alternativa, puoi rimuovere gli header CSV in anticipo in modo che le informazioni degli header non siano incluse nei risultati delle query di Athena di Athena. Un metodo per procedere è utilizzare i processi AWS Glue che eseguono le operazioni di estrazione, trasformazione e caricamento (ETL). È possibile scrivere script in AWS Glue utilizzando un linguaggio che è un'estensione del sottolinguaggio PySpark Python. Per ulteriori informazioni, consulta la sezione relativa alla Creazione di processi in AWS Glue nella AWS Glue Guida per gli sviluppatori.
L'esempio seguente mostra una funzione in uno script AWS Glue che scrive un frame dinamico utilizzando from_options imposta e l'opzione di formattazione writeHeader come falsa, consentendo così di rimuovere le informazioni di intestazione:
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")