

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.

# 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
```