

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

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

Wenn Sie in Athena eine Tabelle für CSV-Daten erstellen, können Sie entweder die Open CSV SerDe - oder die Lazy SerDe Simple-Bibliothek verwenden. Beachten Sie die folgenden Richtlinien, um Ihnen die Entscheidung zu erleichtern, welche Sie verwenden möchten.
+ Wenn Ihre Daten Werte enthalten, die in doppelten Anführungszeichen (`"`) eingeschlossen sind, können Sie die [Open SerDe CSV-Bibliothek](https://cwiki.apache.org/confluence/display/Hive/CSV+Serde) verwenden, um die Werte in Athena zu deserialisieren. Wenn Ihre Daten keine in doppelten Anführungszeichen (`"`) eingeschlossenen Werte enthalten, können Sie die Angabe beliebiger Werte weglassen. SerDe In diesem Fall verwendet Athena die Standardeinstellung Lazy SerDe Simple. Weitere Informationen finden Sie unter [Lazy Simple SerDe für CSV-, TSV- und benutzerdefinierte Dateien](lazy-simple-serde.md).
+  Wenn Ihre Daten numerische `TIMESTAMP` UNIX-Werte enthalten (z. B.`1579059880000`), verwenden Sie Open CSV SerDe. Wenn Ihre Daten das `java.sql.Timestamp` Format verwenden, verwenden Sie Lazy Simple SerDe.

**Topics**
+ [Lazy Simple SerDe für CSV-, TSV- und benutzerdefinierte Dateien](lazy-simple-serde.md)
+ [CSV SerDe für die Verarbeitung von CSV öffnen](csv-serde.md)

# Lazy Simple SerDe für CSV-, TSV- und benutzerdefinierte Dateien
<a name="lazy-simple-serde"></a>

Da dies die Standardeinstellung SerDe in Athena für Daten in CSV-, TSV- und benutzerdefinierten Formaten ist, ist die Angabe optional. Wenn Sie in Ihrer `CREATE TABLE` Aussage nicht a angeben SerDe und nur angeben`ROW FORMAT DELIMITED`, verwendet Athena dies SerDe. Verwenden Sie dies SerDe , wenn Ihre Daten keine Werte enthalten, die in Anführungszeichen eingeschlossen sind.

Referenzdokumentation zu Lazy SerDe Simple finden Sie im SerDe Abschnitt [Hive](https://cwiki.apache.org/confluence/display/Hive/DeveloperGuide#DeveloperGuide-HiveSerDe) im Apache Hive Developer Guide.

## Name der Serialisierungsbibliothek
<a name="lazy-simple-serde-library-name"></a>

Der Name der Serialisierungsbibliothek für Lazy Simple lautet. SerDe `org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe` Informationen zum Quellcode finden Sie unter [LazySimpleSerDe.java](https://github.com/apache/hive/blob/master/serde/src/java/org/apache/hadoop/hive/serde2/lazy/LazySimpleSerDe.java) auf GitHub .com. 

## Ignorieren von Kopfzeilen
<a name="lazy-simple-serde-ignoring-headers"></a>

Um Header in Ihren Daten beim Definieren einer Tabelle zu ignorieren, können Sie die Tabelleneigenschaft `skip.header.line.count` wie im folgenden Beispiel verwenden.

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

Beispiele die Header ignorieren finden Sie unter `CREATE TABLE`-Anweisungen in [Abfragen von Amazon VPC-Flow-Protokollen](vpc-flow-logs.md) und [CloudFront Amazon-Logs abfragen](cloudfront-logs.md).

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

Das folgende Beispiel zeigt, wie Sie mit der `LazySimpleSerDe`-Bibliothek eine Tabelle in Athena aus CSV-Daten erstellen. Um Dateien mit benutzerdefiniertem Trennzeichen auf diese Weise zu deserialisieren SerDe, folgen Sie dem Muster in den Beispielen, verwenden Sie jedoch die `FIELDS TERMINATED BY` Klausel, um ein anderes aus einem Zeichen bestehendes Trennzeichen anzugeben. Lazy Simple unterstützt keine Trennzeichen mit mehreren Zeichen. SerDe 

**Anmerkung**  
Ersetzen Sie *myregion* in `s3://athena-examples-myregion/path/to/data/` durch die Regionskennung, in der Sie Athena ausführen, zum Beispiel. `s3://athena-examples-us-west-1/path/to/data/`

Verwenden Sie die `CREATE TABLE`-Anweisung zum Erstellen einer Athena-Tabelle basierend auf den in Amazon S3 gespeicherten Daten in CSV.

```
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/';
```

Führen Sie die `MSCK REPAIR TABLE`-Anweisung immer dann aus, wenn eine neue Partition zur Tabelle hinzugefügt wurde, um die Partitionsmetadaten zu aktualisieren:

```
MSCK REPAIR TABLE flight_delays_csv;
```

Fragen Sie die 10 Routen ab, bei denen es zu einer Verzögerung von mehr als 1 Stunde kam:

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

**Anmerkung**  
Die Flugtabellendaten stammen aus [Flügen](http://www.transtats.bts.gov/DL_SelectFields.asp?Table_ID=236&amp;DB_Short_Name=On-Time), die vom US-Verkehrsministerium, [Bureau of Transportation Statistics](http://www.transtats.bts.gov/), bereitgestellt werden. Entsättigt vom Original.

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

Um eine Athena-Tabelle aus in Amazon S3 gespeicherten TSV-Daten zu erstellen, verwenden Sie `ROW FORMAT DELIMITED` und spezifizieren Sie `\t` als Tabulator-Feldtrennzeichen, `\n` als Zeilentrennzeichen und `\` als Escape-Zeichen. Im folgenden Beispiel wird diese Syntax dargestellt. An diesem `athena-examples`-Ort sind keine Beispiel-TSV-Flugdaten verfügbar, aber wie bei der CSV-Tabelle würden Sie `MSCK REPAIR TABLE` ausführen, um die Partitions-Metadaten jedes Mal zu aktualisieren, wenn eine neue Partition hinzugefügt wird. 

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

# CSV SerDe für die Verarbeitung von CSV öffnen
<a name="csv-serde"></a>

Verwenden Sie Open CSV SerDe , um Athena-Tabellen aus kommagetrennten Daten (CSV) zu erstellen.

## Name der Serialisierungsbibliothek
<a name="csv-serde-library-name"></a>

Der Name der Serialisierungsbibliothek für Open CSV lautet. SerDe `org.apache.hadoop.hive.serde2.OpenCSVSerde` Informationen zum Quellcode finden Sie unter [CSV SerDe](https://cwiki.apache.org/confluence/display/Hive/CSV+Serde) in der Apache-Dokumentation.

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

Um dies zu verwenden SerDe, geben Sie danach den vollqualifizierten Klassennamen an`ROW FORMAT SERDE`. Geben Sie außerdem die Trennzeichen innerhalb von `SERDEPROPERTIES` wie im folgenden Beispiel an.

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

### Header ignorieren
<a name="csv-serde-opencsvserde-ignoring-headers"></a>

Um Header in Ihren Daten beim Definieren einer Tabelle zu ignorieren, können Sie die Tabelleneigenschaft `skip.header.line.count` wie im folgenden Beispiel verwenden.

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

Beispiele finden Sie unter `CREATE TABLE`-Anweisungen in [Abfragen von Amazon VPC-Flow-Protokollen](vpc-flow-logs.md) und [CloudFront Amazon-Logs abfragen](cloudfront-logs.md).

### NULL für ungültige Daten verwenden
<a name="csv-serde-opencsvserde-using-null"></a>

Um NULL-Werte für Daten zu verwenden, die nicht in den definierten Typ der Spalte deserialisiert werden können, können Sie die `use.null.for.invalid.data`-Tabelleneigenschaft verwenden, wie im folgenden Beispiel gezeigt. 

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

**Wichtig**  
Die Einstellung von `use.null.for.invalid.data` auf `TRUE` kann zu falschen oder unerwarteten Ergebnissen führen, da `NULL`-Werte ungültige Daten in Spalten durch Schemakonflikte ersetzen. Wir empfehlen, dass Sie die Daten in Ihren Dateien oder Ihrem Tabellenschema korrigieren, anstatt diese Eigenschaft zu aktivieren. Wenn Sie diese Eigenschaft aktivieren, schlagen Abfragen bei ungültigen Daten nicht fehl, wodurch Sie möglicherweise Probleme mit der Datenqualität nicht entdecken können.

### Überlegungen für Zeichenfolgendaten
<a name="csv-serde-opencsvserde-considerations-string"></a>

Die offene CSV-Datei SerDe weist die folgenden Eigenschaften für Zeichenkettendaten auf:
+ Verwendet doppelte Anführungszeichen (`"`) als Standard-Anführungszeichen und ermöglicht es Ihnen, Trennzeichen, Anführungszeichen und Escape-Zeichen wie die Folgenden anzugeben: 

  ```
  WITH SERDEPROPERTIES ("separatorChar" = ",", "quoteChar" = "`", "escapeChar" = "\\" )
  ```
+ Sie können für `\t` oder `\n` keinen direkten Escape durchführen. Um ein Escape dafür durchzuführen, verwenden Sie `"escapeChar" = "\\"`. Ein Beispiel finden Sie unter [Example: Escaping \t or \n](#csv-serde-opencsvserde-example-escaping-t-or-n).
+ Open CSV unterstützt SerDe keine eingebetteten Zeilenumbrüche in CSV-Dateien.

### Überlegungen für Nicht-Zeichenfolgendaten
<a name="csv-serde-opencsvserde-considerations-non-string"></a>

Bei anderen Datentypen als `STRING` SerDe verhält sich Open CSV wie folgt:
+ Erkennt `BOOLEAN`-, `BIGINT`-, `INT`- und `DOUBLE`-Datentypen. 
+ Erkennt keine leeren oder Nullwerte in Spalten, die als numerischer Datentyp definiert sind, und belässt sie als `string`. Eine Problemumgehung besteht darin, die Spalte mit den Nullwerten als `string` zu erstellen und dann mit `CAST` das Feld in einer Abfrage in einen numerischen Datentyp zu konvertieren, wobei der Standardwert `0` für Nullwerte bereitgestellt wird. Weitere Informationen finden Sie unter [Wenn ich CSV-Daten in Athena abfrage, erhalte ich die Fehlermeldung HIVE\$1BAD\$1DATA: Fehler beim Parsen](https://aws.amazon.com/premiumsupport/knowledge-center/athena-hive-bad-data-error-csv/) des Feldwerts im Knowledge Center. AWS 
+ Erkennt für Spalten, die in Ihrer `CREATE TABLE`-Anweisung mit dem Datentyp `timestamp` angegeben sind, `TIMESTAMP`-Daten, wenn sie im numerischen UNIX-Format in Millisekunden angegeben sind, wie z. B. `1579059880000`. Ein Beispiel finden Sie unter [Example: Using the TIMESTAMP type and DATE type specified in the UNIX numeric format](#csv-serde-opencsvserde-example-timestamp-unix).
  + Open CSV unterstützt SerDe kein JDBC-kompatibles `java.sql.Timestamp` Format, wie `TIMESTAMP` z. B. (Genauigkeit mit 9 Dezimalstellen). `"YYYY-MM-DD HH:MM:SS.fffffffff"`
+ Erkennt für Spalten, die in Ihrer `CREATE TABLE`-Anweisung mit dem Datentyp `DATE` angegeben sind, Werte als Datumsangaben, wenn die Werte die Anzahl der Tage darstellen, die seit dem 1. Januar 1970 verstrichen sind. Beispielsweise wird der Wert `18276` in einer Spalte mit dem Datentyp `date` bei Abfrage als `2020-01-15` gerendert. In diesem UNIX-Format gilt jeder Tag als 86.400 Sekunden.
  + Open CSV unterstützt SerDe kein anderes `DATE` Format direkt. Um Zeitstempeldaten in anderen Formaten zu verarbeiten, können Sie die Spalte als `string` definieren und dann Zeitkonvertierungsfunktionen verwenden, um die gewünschten Ergebnisse in Ihrer `SELECT`-Abfrage zurückzugeben. Weitere Informationen finden Sie im Artikel [Wenn ich eine Tabelle in Amazon Athena abfrage, ist das TIMESTAMP-Ergebnis leer](https://aws.amazon.com/premiumsupport/knowledge-center/query-table-athena-timestamp-empty/) im [AWS -Wissenscenter](https://aws.amazon.com/premiumsupport/knowledge-center/).
+ Um weitere Spalten in den gewünschten Typ in einer Tabelle umzuwandeln, können Sie [eine Ansicht über die Tabelle erstellen](views.md) und `CAST` für die Umwandlung in den gewünschten Typ verwenden.

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

**Example Beispiel: Einfache CSV-Daten abfragen**  
Im folgenden Beispiel wird davon ausgegangen, dass Sie CSV-Daten an dem Speicherort `s3://amzn-s3-demo-bucket/mycsv/` mit folgende Inhalte gespeichert haben:  

```
"a1","a2","a3","a4"
"1","2","abc","def"
"a","a1","abc3","ab4"
```
Verwenden Sie eine `CREATE TABLE`-Anweisung, um eine Athena-Tabelle basierend auf den Daten zu erstellen. Verweisen Sie auf `OpenCSVSerde` (beachten Sie das kleine „d“) nach `ROW FORMAT SERDE` geben Sie das Zeichentrennzeichen, das Anführungszeichen und das Escape-Zeichen in `WITH SERDEPROPERTIES` an, wie im folgenden Beispiel.  

```
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/';
```
Fragen Sie alle Werte in der Tabelle ab:  

```
SELECT * FROM myopencsvtable;
```
Die Abfrage gibt die folgenden Werte zurück:  

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

**Example Beispiel: Verwenden des im numerischen UNIX-Format angegebenen TIMESTAMP- und DATE-Typs**  
Betrachten Sie die folgenden drei Spalten mit durch Kommas getrennten Daten. Die Werte in jeder Spalte sind in doppelten Anführungszeichen eingeschlossen.  

```
"unixvalue creationdate 18276 creationdatetime 1579059880000","18276","1579059880000"
```
Über die folgende Anweisung wird eine Tabelle in Athena von dem angegebenen Amazon-S3-Bucket-Speicherort erstellt.  

```
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'
```
Anschließen führen Sie die folgende Abfrage aus:   

```
SELECT * FROM testtimestamp1
```
Die Abfrage gibt das folgende Ergebnis zurück, das die Datums- und Uhrzeitdaten zeigt:  

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

**Example Beispiel: Escape von \$1t oder \$1n**  
Sehen Sie sich die folgenden Testdaten an:  

```
" \\t\\t\\n 123 \\t\\t\\n ",abc
" 456 ",xyz
```
Die folgende Anweisung erstellt eine Tabelle in Athena, mit `"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/'
```
Anschließen führen Sie die folgende Abfrage aus:   

```
SELECT * FROM test1;
```
Sie gibt das folgende Ergebnis zurück, wobei ein ordnungsgemäßes Escape für `\t` oder `\n` durchgeführt wird:  

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