

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

# Librerie CSV SerDe
<a name="serde-csv-choices"></a>

Quando crei una tabella per dati CSV in Athena, puoi utilizzare la libreria Open SerDe CSV o la libreria Lazy Simple. SerDe Per decidere quale usare, prendere in considerazione le seguenti linee guida.
+ Se i tuoi dati contengono valori racchiusi tra virgolette doppie (`"`), puoi utilizzare la SerDe libreria [Open CSV](https://cwiki.apache.org/confluence/display/Hive/CSV+Serde) per deserializzare i valori in Athena. Se i tuoi dati non contengono valori racchiusi tra virgolette doppie (`"`), puoi omettere di specificarne uno. SerDe In questo caso, Athena utilizza il Lazy Simple predefinito. SerDe Per informazioni, consulta [Lazy SerDe Simple per file CSV, TSV e delimitati in modo personalizzato](lazy-simple-serde.md).
+  Se i tuoi dati hanno `TIMESTAMP` valori numerici UNIX (ad esempio,`1579059880000`), usa Open CSV. SerDe Se i tuoi dati utilizzano il `java.sql.Timestamp` formato, usa Lazy Simple. SerDe

**Topics**
+ [Lazy SerDe Simple per file CSV, TSV e delimitati in modo personalizzato](lazy-simple-serde.md)
+ [Apri CSV SerDe per l'elaborazione di CSV](csv-serde.md)

# Lazy SerDe Simple per file CSV, TSV e delimitati in modo personalizzato
<a name="lazy-simple-serde"></a>

Poiché questa è l'impostazione predefinita SerDe in Athena per i dati in formato CSV, TSV e con delimitazione personalizzata, la sua specificazione è facoltativa. Nella tua `CREATE TABLE` dichiarazione, se non specifichi solo a SerDe `ROW FORMAT DELIMITED`, Athena lo utilizza. SerDe Usalo SerDe se i tuoi dati non hanno valori racchiusi tra virgolette.

Per la documentazione di riferimento su Lazy Simple SerDe, consulta la SerDe sezione [Hive della Apache Hive](https://cwiki.apache.org/confluence/display/Hive/DeveloperGuide#DeveloperGuide-HiveSerDe) Developer Guide.

## Nome della libreria di serializzazione
<a name="lazy-simple-serde-library-name"></a>

Il nome della libreria di serializzazione per Lazy Simple è. SerDe `org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe` Per informazioni sul codice sorgente, [LazySimpleSerDevedi.java su .com.](https://github.com/apache/hive/blob/master/serde/src/java/org/apache/hadoop/hive/serde2/lazy/LazySimpleSerDe.java) GitHub 

## Ignorare intestazioni
<a name="lazy-simple-serde-ignoring-headers"></a>

Per ignorare le intestazioni nei dati quando si definisce una tabella, è possibile utilizzare la proprietà `skip.header.line.count`, come nell'esempio seguente.

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

Per esempi che ignorano gli header, consultare le istruzioni `CREATE TABLE` in [Eseguire query sui log di flusso Amazon VPC](vpc-flow-logs.md) e [Interroga i CloudFront log di Amazon](cloudfront-logs.md).

## Esempio di CSV
<a name="csv-example"></a>

Il seguente esempio mostra come utilizzare la libreria `LazySimpleSerDe` per creare una tabella in Athena dai dati CSV. Per deserializzare i file delimitati in modo personalizzato utilizzando questa opzione SerDe, seguite lo schema riportato negli esempi ma utilizzate la `FIELDS TERMINATED BY` clausola per specificare un delimitatore a carattere singolo diverso. SerDe Lazy Simple non supporta i delimitatori a più caratteri.

**Nota**  
*myregion*Sostituiscilo `s3://athena-examples-myregion/path/to/data/` con l'identificatore della regione in cui esegui Athena, ad esempio. `s3://athena-examples-us-west-1/path/to/data/`

Utilizza l'istruzione `CREATE TABLE` per creare una tabella Athena dai dati sottostanti in formato CSV archiviati in Amazon S3.

```
CREATE EXTERNAL TABLE flight_delays_csv (
    yr INT,
    quarter INT,
    month INT,
    dayofmonth INT,
    dayofweek INT,
    flightdate STRING,
    uniquecarrier STRING,
    airlineid INT,
    carrier STRING,
    tailnum STRING,
    flightnum STRING,
    originairportid INT,
    originairportseqid INT,
    origincitymarketid INT,
    origin STRING,
    origincityname STRING,
    originstate STRING,
    originstatefips STRING,
    originstatename STRING,
    originwac INT,
    destairportid INT,
    destairportseqid INT,
    destcitymarketid INT,
    dest STRING,
    destcityname STRING,
    deststate STRING,
    deststatefips STRING,
    deststatename STRING,
    destwac INT,
    crsdeptime STRING,
    deptime STRING,
    depdelay INT,
    depdelayminutes INT,
    depdel15 INT,
    departuredelaygroups INT,
    deptimeblk STRING,
    taxiout INT,
    wheelsoff STRING,
    wheelson STRING,
    taxiin INT,
    crsarrtime INT,
    arrtime STRING,
    arrdelay INT,
    arrdelayminutes INT,
    arrdel15 INT,
    arrivaldelaygroups INT,
    arrtimeblk STRING,
    cancelled INT,
    cancellationcode STRING,
    diverted INT,
    crselapsedtime INT,
    actualelapsedtime INT,
    airtime INT,
    flights INT,
    distance INT,
    distancegroup INT,
    carrierdelay INT,
    weatherdelay INT,
    nasdelay INT,
    securitydelay INT,
    lateaircraftdelay INT,
    firstdeptime STRING,
    totaladdgtime INT,
    longestaddgtime INT,
    divairportlandings INT,
    divreacheddest INT,
    divactualelapsedtime INT,
    divarrdelay INT,
    divdistance INT,
    div1airport STRING,
    div1airportid INT,
    div1airportseqid INT,
    div1wheelson STRING,
    div1totalgtime INT,
    div1longestgtime INT,
    div1wheelsoff STRING,
    div1tailnum STRING,
    div2airport STRING,
    div2airportid INT,
    div2airportseqid INT,
    div2wheelson STRING,
    div2totalgtime INT,
    div2longestgtime INT,
    div2wheelsoff STRING,
    div2tailnum STRING,
    div3airport STRING,
    div3airportid INT,
    div3airportseqid INT,
    div3wheelson STRING,
    div3totalgtime INT,
    div3longestgtime INT,
    div3wheelsoff STRING,
    div3tailnum STRING,
    div4airport STRING,
    div4airportid INT,
    div4airportseqid INT,
    div4wheelson STRING,
    div4totalgtime INT,
    div4longestgtime INT,
    div4wheelsoff STRING,
    div4tailnum STRING,
    div5airport STRING,
    div5airportid INT,
    div5airportseqid INT,
    div5wheelson STRING,
    div5totalgtime INT,
    div5longestgtime INT,
    div5wheelsoff STRING,
    div5tailnum STRING
)
    PARTITIONED BY (year STRING)
    ROW FORMAT DELIMITED
      FIELDS TERMINATED BY ','
      ESCAPED BY '\\'
      LINES TERMINATED BY '\n'
    LOCATION 's3://athena-examples-myregion/flight/csv/';
```

Esegui `MSCK REPAIR TABLE` per aggiornare i metadati della partizione ogni volta che una nuova partizione viene aggiunto a questa tabella:

```
MSCK REPAIR TABLE flight_delays_csv;
```

Esegui una query sui primi 10 voli con ritardo superiore a 1 ora:

```
SELECT origin, dest, count(*) as delays
FROM flight_delays_csv
WHERE depdelayminutes > 60
GROUP BY origin, dest
ORDER BY 3 DESC
LIMIT 10;
```

**Nota**  
I dati della tabella di volo provengono da [Flights](http://www.transtats.bts.gov/DL_SelectFields.asp?Table_ID=236&amp;DB_Short_Name=On-Time) e sono forniti dal Dipartimento dei Trasporti degli Stati Uniti, [Ufficio delle statistiche sui trasporti](http://www.transtats.bts.gov/). Desaturati dall'originale.

## Esempio di TSV
<a name="tsv-example"></a>

Per creare una tabella Athena dai dati TSV archiviati in Amazon S3, utilizza `ROW FORMAT DELIMITED` e specifica il `\t` come delimitatore del campo di tabulazione, `\n` come separatore di riga e `\` come carattere di escape. L'estratto seguente mostra questa sintassi. Nessun dato di volo TSV di esempio è disponibile nel percorso `athena-examples`, ma come per la tabella CSV, dovresti eseguire `MSCK REPAIR TABLE` per aggiornare i metadati di partizione ogni volta che viene aggiunta una nuova partizione. 

```
...
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '\t'
ESCAPED BY '\\'
LINES TERMINATED BY '\n'
...
```

# Apri CSV SerDe per l'elaborazione di CSV
<a name="csv-serde"></a>

Usa Open CSV SerDe per creare tabelle Athena da dati separati da virgole (CSV).

## Nome della libreria di serializzazione
<a name="csv-serde-library-name"></a>

Il nome della libreria di serializzazione per Open CSV è. SerDe `org.apache.hadoop.hive.serde2.OpenCSVSerde` Per informazioni sul codice sorgente, consulta [CSV SerDe](https://cwiki.apache.org/confluence/display/Hive/CSV+Serde) nella documentazione di Apache.

## Usare Open CSV SerDe
<a name="csv-serde-using"></a>

Per utilizzarlo SerDe, specifica il nome completo della classe dopo`ROW FORMAT SERDE`. Specificare anche i delimitatori all’interno di `SERDEPROPERTIES` nel modo seguente:

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

### Intestazioni di origine
<a name="csv-serde-opencsvserde-ignoring-headers"></a>

Per ignorare le intestazioni nei dati quando si definisce una tabella, è possibile utilizzare la proprietà `skip.header.line.count`, come nell'esempio seguente.

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

Per alcuni esempi, consulta le istruzioni `CREATE TABLE` in [Eseguire query sui log di flusso Amazon VPC](vpc-flow-logs.md) e [Interroga i CloudFront log di Amazon](cloudfront-logs.md).

### Utilizzo di NULL per dati non validi
<a name="csv-serde-opencsvserde-using-null"></a>

Per utilizzare i valori NULL per i dati che non riescono a deserializzarsi nel tipo definito della colonna, è possibile utilizzare la proprietà della tabella `use.null.for.invalid.data`, come illustrato nell’esempio seguente. 

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

**Importante**  
L’impostazione `use.null.for.invalid.data` su `TRUE` può causare risultati errati o imprevisti perché i valori `NULL` sostituiscono i dati non validi nelle colonne con mancate corrispondenze dello schema. Si consiglia di correggere i dati nei file o nello schema della tabella anziché abilitare questa proprietà. Quando si abilita questa proprietà, le query non avranno esito negativo su dati non validi, il che potrebbe impedire di scoprire problemi di qualità dei dati.

### Considerazioni sui dati SUPER
<a name="csv-serde-opencsvserde-considerations-string"></a>

L'Open CSV SerDe presenta le seguenti caratteristiche per i dati di tipo stringa:
+ Utilizza doppie virgolette (`"`) come virgolette predefinite e consente di specificare separatore, virgolette e caratteri di escape, ad esempio: 

  ```
  WITH SERDEPROPERTIES ("separatorChar" = ",", "quoteChar" = "`", "escapeChar" = "\\" )
  ```
+ Impossibile utilizzare direttamente il carattere di escape `\t` o `\n`. Per utilizzarli come caratteri di escape, utilizza `"escapeChar" = "\\"`. Per vedere un esempio, consulta [Example: Escaping \t or \n](#csv-serde-opencsvserde-example-escaping-t-or-n).
+ Open CSV non SerDe supporta interruzioni di riga incorporate nei file CSV.

### Considerazioni per i dati non stringa
<a name="csv-serde-opencsvserde-considerations-non-string"></a>

Per tipi di dati diversi da`STRING`, Open CSV SerDe si comporta come segue:
+ Riconosce i tipi di dati `BOOLEAN`, `BIGINT`, `INT` e `DOUBLE`. 
+ Non riconosce valori vuoti o nulli nelle colonne definite come un tipo di dati numerici, lasciandoli come `string`. Una soluzione alternativa è creare la colonna con i valori nulli come`string` e quindi utilizzare `CAST` per convertire il campo in una query per un tipo di dati numerico, fornendo un valore predefinito `0` per i valori nulli. Per ulteriori informazioni, consulta [Quando eseguo una query sui dati CSV in Athena, ricevo l'errore HIVE\$1BAD\$1DATA: errore nell'](https://aws.amazon.com/premiumsupport/knowledge-center/athena-hive-bad-data-error-csv/)analisi del valore del campo nel Knowledge Center. AWS 
+ Per le colonne specificate con il tipo di dati `timestamp` nell'istruzione `CREATE TABLE`, riconosce i dati `TIMESTAMP` se sono specificati nel formato numerico UNIX in millisecondi, ad esempio `1579059880000`. Per vedere un esempio, consulta [Example: Using the TIMESTAMP type and DATE type specified in the UNIX numeric format](#csv-serde-opencsvserde-example-timestamp-unix).
  + Open CSV non SerDe supporta il formato compatibile con JDBC, ad esempio (`TIMESTAMP`precisione a 9 cifre `java.sql.Timestamp` decimali). `"YYYY-MM-DD HH:MM:SS.fffffffff"`
+ Per le colonne specificate con il tipo di dati `DATE` nell'istruzione `CREATE TABLE`, riconosce i valori come date se i valori rappresentano il numero di giorni trascorsi dal 1° gennaio 1970. Ad esempio, il valore `18276` in una colonna con il tipo di dati `date` viene eseguito come `2020-01-15` quando viene interrogato. In questo formato UNIX, si considera che ogni giorno abbia 86.400 secondi.
  + Open CSV SerDe non supporta direttamente nessun altro formato. `DATE` Per elaborare i dati della marca temporale in altri formati, è possibile definire la colonna come `string` e quindi utilizzare le funzioni di conversione del tempo per restituire i risultati desiderati nella query `SELECT`. Per ulteriori informazioni, consulta l'articolo [Quando eseguo una query su una tabella in Amazon Athena, il risultato TIMESTAMP è vuoto](https://aws.amazon.com/premiumsupport/knowledge-center/query-table-athena-timestamp-empty/) nel [Portale del sapere di AWS](https://aws.amazon.com/premiumsupport/knowledge-center/).
+ Per convertire ulteriormente le colonne nel tipo desiderato in una tabella, è possibile [creare una vista](views.md) della tabella e utilizzare `CAST` per convertirle nel tipo desiderato.

## Esempi
<a name="csv-serde-opencsvserde-examples"></a>

**Example Esempio: interrogazione di semplici dati CSV**  
L’esempio seguente presuppone che i dati CSV siano salvati nella posizione `s3://amzn-s3-demo-bucket/mycsv/` con i seguenti contenuti:  

```
"a1","a2","a3","a4"
"1","2","abc","def"
"a","a1","abc3","ab4"
```
Utilizza un'istruzione `CREATE TABLE` per creare una tabella Athena basata sui dati. Fare riferimento a `OpenCSVSerde` (nota la d minuscola) dopo `ROW FORMAT SERDE` e specificare il separatore di caratteri, il carattere virgoletta e il carattere di escape in `WITH SERDEPROPERTIES`, come nell’esempio seguente.  

```
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/';
```
Crea una query di tutti i valori nella tabella:  

```
SELECT * FROM myopencsvtable;
```
La query restituisce i seguenti valori:  

```
col1     col2    col3    col4
-----------------------------
a1       a2      a3      a4
1        2       abc     def
a        a1      abc3    ab4
```

**Example Esempio: utilizzo del tipo TIMESTAMP e del tipo DATE specificati nel formato numerico UNIX.**  
Considerare le tre seguenti colonne di dati separati da virgole. I valori in ciascuna colonna sono racchiusi tra virgolette doppie.  

```
"unixvalue creationdate 18276 creationdatetime 1579059880000","18276","1579059880000"
```
L'istruzione seguente crea una tabella in Athena dal percorso del bucket Amazon S3.  

```
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'
```
Esegui quindi la seguente query:   

```
SELECT * FROM testtimestamp1
```
La query restituisce il seguente risultato, mostrando i dati di data e ora:  

```
profile_id                                                        creationdate     creationdatetime
unixvalue creationdate 18276 creationdatetime 1579146280000       2020-01-15       2020-01-15 03:44:40.000
```

**Example Esempio: utilizzo di o come caratteri escape**  
Tieni in considerazione i seguenti dati di verifica:  

```
" \\t\\t\\n 123 \\t\\t\\n ",abc
" 456 ",xyz
```
La seguente istruzione crea una tabella in Athena, specificando `"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/'
```
Esegui quindi la seguente query:   

```
SELECT * FROM test1;
```
Restituisce questo risultato, utilizzando correttamente `\t` o `\n` come caratteri di escape:  

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