

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.

# Überlegungen zu Exporten von DB-Cluster-Snapshots
<a name="aurora-export-snapshot.Considerations"></a>

## Einschränkungen
<a name="aurora-export-snapshot.Limits"></a>

Das Exportieren von DB-Snapshot-Daten nach Amazon S3 hat die folgenden Einschränkungen:
+ Sie können nicht mehrere Exportaufgaben für denselben DB-Cluster-Snapshot gleichzeitig ausführen. Dies gilt sowohl für vollständige als auch Teilexporte.
+ Pro AWS-Konto können bis zu fünf DB-Snapshot-Exportaufgaben gleichzeitig ausgeführt werden.
+ Exporte nach S3 unterstützen keine S3-Präfixe, die einen Doppelpunkt (:) enthalten.
+ Die folgenden Zeichen im S3-Dateipfad werden während des Exports in Unterstriche (\_) konvertiert:

  ```
  \ ` " (space)
  ```
+ Wenn eine Datenbank, ein Schema oder eine Tabelle andere Zeichen als den folgenden enthält, wird ein teilweiser Export nicht unterstützt. Sie können jedoch den gesamten DB-Snapshot exportieren.
  + Lateinische Buchstaben (A–Z)
  + Ziffern (0–9)
  + Dollar-Symbol ($)
  + Unterstrich (\_)
+ Leerzeichen ( ) und bestimmte andere Zeichen werden in den Spaltennamen von Datenbanktabellen nicht unterstützt. Tabellen mit den folgenden Zeichen in Spaltennamen werden beim Export übersprungen:

  ```
  , ; { } ( ) \n \t = (space)
  ```
+ Tabellen mit Schrägstrichen (/) im Namen werden beim Export übersprungen.
+ Temporäre und nicht protokollierte Tabellen von Aurora PostgreSQL werden beim Export übersprungen.
+ Wenn die Daten ein großes Objekt wie BLOB oder CLOB mit einer Größe von 500 MB oder mehr enthalten, schlägt der Export fehl.
+ Wenn eine Zeile in einer Tabelle ca. 2 GB groß oder noch größer ist, wird die Tabelle beim Export übersprungen.
+ Bei Teilexporten beträgt die maximale Größe der `ExportOnly`-Liste 200 KB.
+ Es wird dringend empfohlen, für jede Exportaufgabe einen eindeutigen Namen zu verwenden. Wenn Sie keinen eindeutigen Aufgabennamen verwenden, erhalten Sie möglicherweise die folgende Fehlermeldung:

  ExportTaskAlreadyExistsFault: Beim Aufrufen des StartExportTask Vorgangs ist ein Fehler aufgetreten (ExportTaskAlreadyExists): Die Exportaufgabe mit der ID ist {{xxxxx}} bereits vorhanden.
+ Sie können einen Snapshot löschen, während Sie seine Daten nach S3 exportieren, aber die Speicherkosten für diesen Snapshot werden Ihnen so lange in Rechnung gestellt, bis die Exportaufgabe abgeschlossen ist.
+ Sie können exportierte Snapshot-Daten aus S3 nicht in einem neuen DB-Cluster wiederherstellen.

## Benennungskonvention für Dateien
<a name="aurora-export-snapshot.FileNames"></a>

Exportierte Daten für bestimmte Tabellen werden im Format `{{base_prefix}}/{{files}}` gespeichert, wobei das Basispräfix folgendes ist:

```
{{export_identifier}}/{{database_name}}/{{schema_name}}.{{table_name}}/
```

Zum Beispiel:

```
export-1234567890123-459/rdststdb/rdststdb.DataInsert_7ADB5D19965123A2/
```

Es gibt zwei Konventionen für die Benennung von Dateien.
+ Aktuelle Konvention:

  ```
  {{batch_index}}/part-{{partition_index}}-{{random_uuid}}.{{format-based_extension}}
  ```

  Der Batch-Index ist eine Sequenznummer, die einen aus der Tabelle gelesenen Datenstapel darstellt. Wenn wir Ihre Tabelle nicht in kleine Datenblöcke aufteilen können, die parallel exportiert werden können, gibt es mehrere Batch-Indizes. Das Gleiche passiert bei einer Partitionierung Ihrer Tabelle in mehrere Tabellen. Es gibt mehrere Batch-Indizes, einen für jede Tabellenpartition Ihrer Haupttabelle.

  Wenn wir Ihre Tabelle in kleine Datenblöcke aufteilen können, die parallel gelesen werden, gibt es nur den Batch-Index-Ordner `1`.

  Im Batch-Index-Ordner befinden sich eine oder mehrere Parquet-Dateien, die die Daten Ihrer Tabelle enthalten. Das Präfix des Parquet-Dateinamens ist `part-{{partition_index}}`. Wenn Ihre Tabelle partitioniert ist, gibt es mehrere Dateien, die mit dem Partitionsindex `00000` beginnen.

  Es kann Lücken in der Reihenfolge des Partitionsindex geben. Dies liegt daran, dass jede Partition mit einer Bereichsabfrage aus Ihrer Tabelle abgerufen wird. Wenn sich im Bereich dieser Partition keine Daten befinden, wird diese Sequenznummer übersprungen.

  Angenommen, die `id`-Spalte ist der Primärschlüssel der Tabelle und deren Minimal- und Maximalwerte sind `100` und `1000`. Wenn wir versuchen, diese Tabelle mit 9 Partitionen zu exportieren, lesen wir sie mit parallelen Abfragen wie den folgenden:

  ```
  SELECT * FROM table WHERE id <= 100 AND id < 200
  	SELECT * FROM table WHERE id <= 200 AND id < 300
  ```

  Dies sollte 9 Dateien von `part-00000-{{random_uuid}}.gz.parquet` bis `part-00008-{{random_uuid}}.gz.parquet` generieren. Wenn es jedoch keine Zeilen mit IDs zwischen `200` und `350` gibt, ist eine der abgeschlossenen Partitionen leer und es wird keine Datei für diese erstellt. Im vorherigen Beispiel wurde `part-00001-{{random_uuid}}.gz.parquet` nicht erstellt.
+ Ältere Konvention:

  ```
  part-{{partition_index}}-{{random_uuid}}.{{format-based_extension}}
  ```

  Diese entspricht der aktuellen Konvention, allerdings ohne das `{{batch_index}}`-Präfix, zum Beispiel:

  ```
  part-00000-c5a881bb-58ff-4ee6-1111-b41ecff340a3-c000.gz.parquet
  	part-00001-d7a881cc-88cc-5ab7-2222-c41ecab340a4-c000.gz.parquet
  	part-00002-f5a991ab-59aa-7fa6-3333-d41eccd340a7-c000.gz.parquet
  ```

Die Namenskonvention für Dateien kann geändert werden. Daher empfehlen wir beim Lesen von Zieltabellen, dass Sie alles innerhalb des Basispräfixes für die Tabelle lesen.

## Datenkonvertierung beim Exportieren in einen Amazon S3-Bucket
<a name="aurora-export-snapshot.data-types"></a>

Wenn Sie einen DB-Snapshot in einen Amazon-S3-Bucket exportieren, konvertiert Amazon Aurora Daten in das Parquet-Format, exportiert Daten darin und speichert Daten im Parquet-Format. Weitere Informationen über Parquet finden Sie auf der Website [Apache Parquet](https://parquet.apache.org/docs/).

Parquet speichert alle Daten als einen der folgenden primitiven Typen:
+ BOOLEAN
+ INT32
+ INT64
+ INT96
+ FLOAT
+ DOUBLE
+ BYTE\_ARRAY – Ein Byte-Array mit variabler Länge, auch bekannt als Binary
+ FIXED\_LEN\_BYTE\_ARRAY – Ein Byte-Array fester Länge, das verwendet wird, wenn die Werte eine konstante Größe haben

Es gibt nur wenige Parquet-Datentypen, um die Komplexität beim Lesen und Schreiben des Formats zu reduzieren. Parquet bietet logische Typen zur Erweiterung primitiver Typen. Ein *logischer Typ* ist als Annotation, bei der Daten in einem `LogicalType`-Metadatenfeld implementiert sind. Die logische Typannotation beschreibt, wie der primitive Typ zu interpretieren ist. 

Wenn der `STRING` logische Typ einen `BYTE_ARRAY` Typ annotiert, bedeutet dies, dass das Byte-Array als UTF-8 kodierte Zeichenfolge interpretiert werden soll. Nach Abschluss einer Exportaufgabe informiert Sie Amazon Aurora, wenn eine Zeichenfolgenkonvertierung stattgefunden hat. Die zugrunde liegenden exportierten Daten entsprechen immer den Daten aus der Quelle. Aufgrund der unterschiedlichen Kodierung können einige Zeichen jedoch anders aussehen als die Quelle UTF-8, wenn sie in Tools wie Athena gelesen werden.

Weitere Informationen finden Sie unter [Logische Typdefinitionen für Parquet](https://github.com/apache/parquet-format/blob/master/LogicalTypes.md) in der Parquet-Dokumentation.

**Topics**
+ [MySQL-Datentypzuordnung zu Parquet](#aurora-export-snapshot.data-types.MySQL)
+ [PostgreSQL-Datentyp-Mapping zu Parquet](#aurora-export-snapshot.data-types.PostgreSQL)

### MySQL-Datentypzuordnung zu Parquet
<a name="aurora-export-snapshot.data-types.MySQL"></a>

Die folgende Tabelle zeigt die Zuordnung von MySQL-Datentypen zu Parquet-Datentypen, wenn die Daten konvertiert und nach Amazon S3 exportiert werden.


<table>
<thead>
  <tr><th>Quelldatentyp</th><th>Parquet-Primitiv-Typ</th><th>Logische Typannotation</th><th>Anmerkungen zur Konvertierung</th></tr>
</thead>
<tbody>
  <tr><td colspan="4">Numerische Datentypen</td></tr>
  <tr><td>BIGINT</td><td>INT64</td><td></td><td> </td></tr>
  <tr><td>BIGINT UNSIGNED</td><td>FIXED\_LEN\_BYTE\_ARRAY(9) </td><td>DECIMAL(20,0)</td><td>Parquet unterstützt nur signierte Typen, daher erfordert das Mapping ein zusätzliches Byte (8 plus 1), um den Typ BIGINT\_UNSIGNED zu speichern.</td></tr>
  <tr><td>BIT</td><td>BYTE\_ARRAY</td><td></td><td> </td></tr>
  <tr><td rowspan="4">DECIMAL</td><td>INT32</td><td>DECIMAL (p,s)</td><td>Wenn der Quellwert kleiner als 231 ist, wird er als INT32 gespeichert. </td></tr>
  <tr><td>INT64</td><td>DECIMAL (p,s)</td><td>Wenn der Quellwert 231 oder größer ist, aber kleiner als 263 ist, wird er als INT64 gespeichert.</td></tr>
  <tr><td>FIX\_LEN\_BYTE\_ARRAY(N)</td><td>DECIMAL (p,s)</td><td>Wenn der Quellwert 263 oder größer ist, wird er als FIXED\_LEN\_BYTE\_ARRAY(N) gespeichert.</td></tr>
  <tr><td>BYTE\_ARRAY</td><td>STRING</td><td>Parquet unterstützt maximal 38 Dezimalstellen. Der Dezimalwert wird in eine Zeichenfolge vom Typ BYTE\_ARRAY konvertiert und als UTF8 kodiert.</td></tr>
  <tr><td>DOUBLE</td><td>DOUBLE</td><td></td><td> </td></tr>
  <tr><td>FLOAT</td><td>DOUBLE</td><td></td><td> </td></tr>
  <tr><td>INT</td><td>INT32</td><td></td><td> </td></tr>
  <tr><td>INT UNSIGNED</td><td>INT64</td><td></td><td> </td></tr>
  <tr><td>MEDIUMINT</td><td>INT32</td><td></td><td> </td></tr>
  <tr><td>MEDIUMINT UNSIGNED</td><td>INT64</td><td></td><td> </td></tr>
  <tr><td rowspan="4"> NUMERIC</td><td>INT32</td><td>DECIMAL (p,s)</td><td>Wenn der Quellwert kleiner als 231 ist, wird er als INT32 gespeichert.</td></tr>
  <tr><td>INT64</td><td>DECIMAL (p,s)</td><td>Wenn der Quellwert 231 oder größer ist, aber kleiner als 263 ist, wird er als INT64 gespeichert.</td></tr>
  <tr><td>FIXED\_LEN\_ARRAY(N)</td><td>DECIMAL (p,s)</td><td>Wenn der Quellwert 263 oder größer ist, wird er als FIXED\_LEN\_BYTE\_ARRAY(N) gespeichert.</td></tr>
  <tr><td>BYTE\_ARRAY</td><td>STRING</td><td>Parquet unterstützt keine numerische Genauigkeit größer als 38. Der Numeric-Wert wird in eine Zeichenfolge vom Typ BYTE\_ARRAY konvertiert und als UTF8 kodiert.</td></tr>
  <tr><td>SMALLINT</td><td>INT32</td><td></td><td> </td></tr>
  <tr><td>SMALLINT UNSIGNED</td><td>INT32</td><td></td><td> </td></tr>
  <tr><td>TINYINT</td><td>INT32</td><td></td><td> </td></tr>
  <tr><td>TINYINT UNSIGNED</td><td>INT32</td><td>INT (16, true)</td><td> </td></tr>
  <tr><td colspan="4">Zeichenfolgen-Datentypen</td></tr>
  <tr><td>BINARY</td><td>BYTE\_ARRAY</td><td></td><td> </td></tr>
  <tr><td>BLOB</td><td>BYTE\_ARRAY</td><td></td><td> </td></tr>
  <tr><td>CHAR</td><td>BYTE\_ARRAY</td><td></td><td> </td></tr>
  <tr><td>ENUM</td><td>BYTE\_ARRAY</td><td>STRING</td><td> </td></tr>
  <tr><td>LINESTRING</td><td>BYTE\_ARRAY</td><td></td><td> </td></tr>
  <tr><td>LONGBLOB</td><td>BYTE\_ARRAY</td><td></td><td> </td></tr>
  <tr><td>LONGTEXT</td><td>BYTE\_ARRAY</td><td>STRING</td><td> </td></tr>
  <tr><td>MEDIUMBLOB</td><td>BYTE\_ARRAY</td><td></td><td> </td></tr>
  <tr><td>MEDIUMTEXT</td><td>BYTE\_ARRAY</td><td>STRING</td><td> </td></tr>
  <tr><td>MULTILINESTRING</td><td>BYTE\_ARRAY</td><td></td><td> </td></tr>
  <tr><td>SET</td><td>BYTE\_ARRAY</td><td>STRING</td><td> </td></tr>
  <tr><td>TEXT</td><td>BYTE\_ARRAY</td><td>STRING</td><td> </td></tr>
  <tr><td>TINYBLOB</td><td>BYTE\_ARRAY</td><td></td><td> </td></tr>
  <tr><td>TINYTEXT</td><td>BYTE\_ARRAY</td><td>STRING</td><td> </td></tr>
  <tr><td>VARBINARY</td><td>BYTE\_ARRAY</td><td></td><td> </td></tr>
  <tr><td>VARCHAR</td><td>BYTE\_ARRAY</td><td>STRING</td><td> </td></tr>
  <tr><td colspan="4">Datums- und Uhrzeit-Datentypen</td></tr>
  <tr><td>DATUM</td><td>BYTE\_ARRAY</td><td>STRING</td><td>Ein Datum wird in eine Zeichenfolge vom Typ BYTE\_ARRAY konvertiert und als UTF8 kodiert.</td></tr>
  <tr><td>DATETIME</td><td>INT64 </td><td>TIMESTAMP\_MICROS</td><td> </td></tr>
  <tr><td>TIME</td><td>BYTE\_ARRAY</td><td>STRING</td><td>Ein TIME-Typ wird in einem BYTE\_ARRAY in eine Zeichenfolge konvertiert und als UTF8 kodiert.</td></tr>
  <tr><td>TIMESTAMP</td><td>INT64 </td><td>TIMESTAMP\_MICROS</td><td> </td></tr>
  <tr><td>YEAR</td><td>INT32</td><td></td><td> </td></tr>
  <tr><td colspan="4">Geometrische Datentypen</td></tr>
  <tr><td>GEOMETRY</td><td>BYTE\_ARRAY</td><td></td><td> </td></tr>
  <tr><td>GEOMETRYCOLLECTION</td><td>BYTE\_ARRAY</td><td></td><td> </td></tr>
  <tr><td>MULTIPOINT</td><td>BYTE\_ARRAY</td><td></td><td> </td></tr>
  <tr><td>MULTIPOLYGON</td><td>BYTE\_ARRAY</td><td></td><td> </td></tr>
  <tr><td>POINT</td><td>BYTE\_ARRAY</td><td></td><td> </td></tr>
  <tr><td>POLYGON</td><td>BYTE\_ARRAY</td><td></td><td> </td></tr>
  <tr><td colspan="4">JSON-Datentyp</td></tr>
  <tr><td>JSON </td><td>BYTE\_ARRAY</td><td>STRING</td><td> </td></tr>
</tbody>
</table>


### PostgreSQL-Datentyp-Mapping zu Parquet
<a name="aurora-export-snapshot.data-types.PostgreSQL"></a>

Die folgende Tabelle zeigt das Mapping von PostgreSQL-Datentypen zu Parquet-Datentypen, wenn Daten konvertiert und nach Amazon S3 exportiert werden.


<table>
<thead>
  <tr><th>PostgreSQL-Datentyp</th><th>Parquet-Primitiv-Typ</th><th>Logische Typannotation</th><th>Anmerkungen zum Mapping</th></tr>
</thead>
<tbody>
  <tr><td colspan="4">Numerische Datentypen</td></tr>
  <tr><td>BIGINT</td><td>INT64</td><td></td><td> </td></tr>
  <tr><td>BIGSERIAL</td><td>INT64</td><td></td><td> </td></tr>
  <tr><td>DECIMAL</td><td>BYTE\_ARRAY</td><td>STRING</td><td>Ein DECIMAL-Typ wird in eine Zeichenfolge in einem BYTE\_ARRAY-Typ konvertiert und als UTF8 kodiert.Diese Konvertierung soll Komplikationen aufgrund von Datengenauigkeit und Datenwerten, die keine Zahlen sind (NaN), vermeiden.</td></tr>
  <tr><td>DOUBLE PRECISION</td><td>DOUBLE</td><td></td><td> </td></tr>
  <tr><td>INTEGER</td><td>INT32</td><td></td><td> </td></tr>
  <tr><td>MONEY</td><td>BYTE\_ARRAY</td><td>STRING</td><td> </td></tr>
  <tr><td>REAL</td><td>FLOAT</td><td></td><td> </td></tr>
  <tr><td>SERIAL</td><td>INT32</td><td></td><td> </td></tr>
  <tr><td>SMALLINT</td><td>INT32</td><td>INT (16, true)</td><td> </td></tr>
  <tr><td>SMALLSERIAL</td><td>INT32</td><td>INT (16, true)</td><td> </td></tr>
  <tr><td colspan="3">Zeichenfolgen- und verwandte Datentypen</td><td></td></tr>
  <tr><td>ARRAY</td><td>BYTE\_ARRAY</td><td>STRING</td><td>Ein Array wird in eine Zeichenfolge konvertiert und als BINARY (UTF8) kodiert.<br />Diese Konvertierung dient dazu, Komplikationen aufgrund von Datengenauigkeit, Datenwerten, die keine Zahl sind (NaN), und Zeitdatenwerten zu vermeiden.</td></tr>
  <tr><td>BIT</td><td>BYTE\_ARRAY</td><td>STRING</td><td> </td></tr>
  <tr><td>BIT VARYING</td><td>BYTE\_ARRAY</td><td>STRING</td><td> </td></tr>
  <tr><td>BYTEA</td><td>BINARY</td><td></td><td> </td></tr>
  <tr><td>CHAR</td><td>BYTE\_ARRAY</td><td>STRING</td><td> </td></tr>
  <tr><td>CHAR(N)</td><td>BYTE\_ARRAY</td><td>STRING</td><td> </td></tr>
  <tr><td>ENUM</td><td>BYTE\_ARRAY</td><td>STRING</td><td> </td></tr>
  <tr><td>NAME</td><td>BYTE\_ARRAY</td><td>STRING</td><td> </td></tr>
  <tr><td>TEXT</td><td>BYTE\_ARRAY</td><td>STRING</td><td> </td></tr>
  <tr><td>TEXT SEARCH</td><td>BYTE\_ARRAY</td><td>STRING</td><td> </td></tr>
  <tr><td>VARCHAR(N)</td><td>BYTE\_ARRAY</td><td>STRING</td><td> </td></tr>
  <tr><td>XML</td><td>BYTE\_ARRAY</td><td>STRING</td><td> </td></tr>
  <tr><td colspan="4">Datums- und Uhrzeit-Datentypen</td></tr>
  <tr><td>DATUM</td><td>BYTE\_ARRAY</td><td>STRING</td><td> </td></tr>
  <tr><td>INTERVAL</td><td>BYTE\_ARRAY</td><td>STRING</td><td> </td></tr>
  <tr><td>TIME</td><td>BYTE\_ARRAY</td><td>STRING</td><td></td></tr>
  <tr><td>TIME WITH TIME ZONE</td><td>BYTE\_ARRAY</td><td>STRING</td><td></td></tr>
  <tr><td>TIMESTAMP</td><td>BYTE\_ARRAY</td><td>STRING</td><td></td></tr>
  <tr><td>TIMESTAMP WITH TIME ZONE</td><td>BYTE\_ARRAY</td><td>STRING</td><td></td></tr>
  <tr><td colspan="4">Geometrische Datentypen</td></tr>
  <tr><td>BOX</td><td>BYTE\_ARRAY</td><td>STRING</td><td> </td></tr>
  <tr><td>CIRCLE</td><td>BYTE\_ARRAY</td><td>STRING</td><td> </td></tr>
  <tr><td>LINE</td><td>BYTE\_ARRAY</td><td>STRING</td><td> </td></tr>
  <tr><td>LINESEGMENT</td><td>BYTE\_ARRAY</td><td>STRING</td><td> </td></tr>
  <tr><td>PATH</td><td>BYTE\_ARRAY</td><td>STRING</td><td> </td></tr>
  <tr><td>POINT</td><td>BYTE\_ARRAY</td><td>STRING</td><td> </td></tr>
  <tr><td>POLYGON</td><td>BYTE\_ARRAY</td><td>STRING</td><td> </td></tr>
  <tr><td colspan="4">JSON-Datentypen</td></tr>
  <tr><td>JSON</td><td>BYTE\_ARRAY</td><td>STRING</td><td> </td></tr>
  <tr><td>JSONB</td><td>BYTE\_ARRAY</td><td>STRING</td><td> </td></tr>
  <tr><td colspan="4">Weitere Datentypen</td></tr>
  <tr><td>BOOLEAN</td><td>BOOLEAN</td><td></td><td> </td></tr>
  <tr><td>CIDR</td><td>BYTE\_ARRAY</td><td>STRING</td><td> Network-Datentyp</td></tr>
  <tr><td>COMPOSITE</td><td>BYTE\_ARRAY</td><td>STRING</td><td> </td></tr>
  <tr><td>DOMAIN</td><td>BYTE\_ARRAY</td><td>STRING</td><td> </td></tr>
  <tr><td>INET</td><td>BYTE\_ARRAY</td><td>STRING</td><td> Network-Datentyp</td></tr>
  <tr><td>MACADDR</td><td>BYTE\_ARRAY</td><td>STRING</td><td> </td></tr>
  <tr><td>OBJECT IDENTIFIER</td><td>N/A</td><td></td><td></td></tr>
  <tr><td>PG\_LSN</td><td>BYTE\_ARRAY</td><td>STRING</td><td> </td></tr>
  <tr><td>RANGE</td><td>BYTE\_ARRAY</td><td>STRING</td><td> </td></tr>
  <tr><td>UUID</td><td>BYTE\_ARRAY</td><td>STRING</td><td> </td></tr>
</tbody>
</table>
