

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.

# INSERT INTO
<a name="insert-into"></a>

Fügt neue Zeilen in eine Zieltabelle ein, basierend auf einer `SELECT`-Abfrageanweisung, die in einer Quelltabelle ausgeführt wird, oder basierend auf einem Satz von `VALUES`, der als Teil der Anweisung bereitgestellt wird. Wenn die Quelltabelle auf zugrunde liegenden Daten in einem Format wie CSV oder JSON basiert und die Zieltabelle auf einem anderen Format wie Parquet oder ORC basiert, können Sie `INSERT INTO`-Abfragen verwenden, um ausgewählte Daten in das Format der Zieltabelle zu transformieren. 

## Überlegungen und Einschränkungen
<a name="insert-into-limitations"></a>

Beachten Sie Folgendes, wenn Sie `INSERT`-Abfragen mit Athena verwenden.
+ Wenn Sie eine `INSERT`-Abfrage für eine Tabelle mit zugrunde liegenden Daten ausführen, die in Amazon S3 verschlüsselt sind, werden die Ausgabedateien, die die `INSERT`-Abfrage schreibt, standardmäßig nicht verschlüsselt. Wir empfehlen, `INSERT`-Abfrageergebnisse zu verschlüsseln, wenn Sie in Tabellen mit verschlüsselten Daten einfügen. 

  Weitere Informationen zum Verschlüsseln von Abfrageergebnissen mithilfe der Konsole finden Sie unter [Verschlüsseln Sie die in Amazon S3 gespeicherten Athena-Abfrageergebnisse](encrypting-query-results-stored-in-s3.md). Um die Verschlüsselung mit der AWS CLI oder der Athena-API zu aktivieren, verwenden Sie die `EncryptionConfiguration` Eigenschaften der [StartQueryExecution](https://docs.aws.amazon.com/athena/latest/APIReference/API_StartQueryExecution.html)Aktion, um Amazon S3 S3-Verschlüsselungsoptionen gemäß Ihren Anforderungen festzulegen.
+ Für `INSERT INTO`-Anweisungen gilt die erwartete Bucket-Eigentümereinstellung nicht für den Speicherort der Zieltabelle in Amazon S3. Die erwartete Bucket-Eigentümereinstellung gilt nur für den Amazon-S3-Ausgabespeicherort, den Sie für Athena-Abfrageergebnisse angeben. Weitere Informationen finden Sie unter [Angeben eines Speicherorts des Abfrageergebnisses mithilfe der Athena-Konsole](query-results-specify-location-console.md).
+ ACID-konforme `INSERT INTO`-Anweisungen finden Sie im `INSERT INTO`-Abschnitt von [Iceberg-Tabellendaten aktualisieren](querying-iceberg-updating-iceberg-table-data.md).

### Unterstützte Formate und SerDes
<a name="insert-into-supported-formats"></a>

Sie können eine `INSERT` Abfrage für Tabellen ausführen, die aus Daten mit den folgenden Formaten und erstellt wurden SerDes.


| Data format (Datenformat) | SerDe | 
| --- | --- | 
| Avro | org.apache.hadoop.hive.serde2.avro. AvroSerDe | 
| Ion | com.amazon.ionhiveserde. IonHiveSerDe | 
| JSON | org.apache.hive.hcatalog.data. JsonSerDe | 
| ORC | org.apache.hadoop.hive.ql.io.orc. OrcSerde | 
| Parquet | org.apache.hadoop.hive.ql.io.parquet.serde. ParquetHiveSerDe | 
| Textdatei | org.apache.hadoop.hive.serde2.lazy. LazySimpleSerDe TSV- und benutzerdefinierte, durch Trennzeichen getrennte Dateien werden unterstützt.  | 
| CSV | org.apache.hadoop.hive.serde2.open CSVSerde Schreibvorgänge werden nur für String-Typen unterstützt. Von Athena aus können Sie nicht in Tabellen schreiben, die Nicht-String-Typen im Glue-Schema enthalten. [Weitere Informationen finden Sie unter CSV. SerDe](csv-serde.md#csv-serde-opencsvserde-considerations-non-string)  | 

### Bucket-Tabellen werden nicht unterstützt
<a name="insert-into-bucketed-tables-not-supported"></a>

`INSERT INTO` wird für Bucket-Tabellen nicht unterstützt. Weitere Informationen finden Sie unter [Partitionierung und Bucketing verwenden](ctas-partitioning-and-bucketing.md).

### Verbundabfragen werden nicht unterstützt
<a name="insert-into-federated-queries-not-supported"></a>

`INSERT INTO` wird für Verbundabfragen nicht unterstützt. Ein Versuch, dies zu tun, kann zur Fehlermeldung führen: Dieser Vorgang wird derzeit für externe Kataloge nicht unterstützt. Weitere Informationen zu Verbundabfragen finden Sie unter [Nutzung von Amazon-Athena-Verbundabfrage](federated-queries.md).

### Partitionierung
<a name="insert-into-limitations-partitioning"></a>

Beachten Sie die Punkte in diesem Abschnitt, wenn Sie die Partitionierung mit `INSERT INTO`- oder `CREATE TABLE AS SELECT`-Abfragen verwenden.

#### Einschränkungen
<a name="insert-into-partition-limits"></a>

Die Anweisung `INSERT INTO` unterstützt das Schreiben von maximal 100 Partitionen in die Zieltabelle. Wenn Sie die `SELECT`-Klausel für eine Tabelle mit mehr als 100 Partitionen ausführen, schlägt die Abfrage fehl, es sei denn, die `SELECT`-Abfrage ist auf 100 Partitionen oder weniger beschränkt.

Hinweise zum Umgehen dieser Einschränkung finden Sie unter [Verwenden von CTAS und INSERT INTO zum Umgehen des Limits von 100 Partitionen](ctas-insert-into.md).

#### Spalten-Reihenfolge
<a name="insert-into-partition-detection"></a>

`INSERT INTO`- oder `CREATE TABLE AS SELECT`-Anweisungen erwarten, dass die partitionierte Spalte die letzte Spalte in der Liste der projizierten Spalten in einer `SELECT`-Anweisung ist. 

Wenn die Quelltabelle nicht partitioniert ist oder im Vergleich zur Zieltabelle auf verschiedene Spalten partitioniert ist, betrachten Abfragen wie `INSERT INTO {{destination_table}} SELECT * FROM {{source_table}}` die Werte in der letzten Spalte der Quelltabelle als Werte für eine Partitionsspalte in der Zieltabelle. Beachten Sie dies beim Versuch, eine partitionierte Tabelle aus einer nicht partitionierten Tabelle zu erstellen.

#### Ressourcen
<a name="insert-into-partition-resources"></a>

Weitere Informationen zur Verwendung von `INSERT INTO` mit Partitionierung finden Sie in den folgenden Ressourcen.
+ Hinweise zum Einfügen von partitionierten Daten in eine partitionierte Tabelle finden Sie unter [Verwenden von CTAS und INSERT INTO zum Umgehen des Limits von 100 Partitionen](ctas-insert-into.md).
+ Hinweise zum Einfügen von nicht-partitionierten Daten in eine partitionierte Tabelle finden Sie unter [Verwenden von CTAS und INSERT INTO für ETL und Datenanalyse](ctas-insert-into-etl.md). 

### In Amazon S3 geschriebene Dateien
<a name="insert-into-files-written-to-s3"></a>

Athena schreibt Dateien in die Quelldatenspeicherorte in Amazon S3 als Ergebnis des `INSERT`-Befehls. Jede `INSERT`-Operation erstellt eine neue Datei, anstatt an eine vorhandene Datei anzuhängen. Die Dateispeicherorte hängen von der Struktur der Tabelle und ggf. der `SELECT`-Abfrage ab. Athena generiert für jede `INSERT`-Abfrage eine Daten-Manifest-Datei. Das Manifest verfolgt die Dateien, die die Abfrage geschrieben hat. Es wird im Verzeichnis der Athena-Abfrageergebnisse in Amazon S3 gespeichert. Weitere Informationen finden Sie unter [Identifizieren von Abfrageausgabedateien](querying-finding-output-files.md#querying-identifying-output-files).

### Transaktionsintensive Aktualisierungen vermeiden
<a name="insert-into-transactional-caveat"></a>

Wenn Sie `INSERT INTO` verwenden um Zeilen zu einer Tabelle in Amazon S3 hinzufügen, schreibt Athena keine vorhandenen Dateien neu und nimmt auch keine Änderungen daran vor. Stattdessen schreibt es die Zeilen als eine oder mehrere neue Dateien. Da Tabellen mit [vielen kleinen Dateien zu einer geringeren Abfrageleistung führen](performance-tuning-data-optimization-techniques.md#performance-tuning-avoid-having-too-many-files) und Schreib- und Lesevorgänge wie `PutObject` und `GetObject` zu höheren Kosten von Amazon S3 führen, sollten Sie bei der Verwendung von `INSERT INTO` die folgenden Optionen in Betracht ziehen:
+ Führen Sie `INSERT INTO`-Operationen seltener für größere Stapel von Zeilen aus.
+ Bei großen Datenerfassungsmengen sollten Sie einen Service wie [Amazon Data Firehose](https://docs.aws.amazon.com/firehose/latest/dev/what-is-this-service.html) in Betracht ziehen.
+ Vermeiden Sie gänzlich die Verwendung von `INSERT INTO`. Sammeln Sie stattdessen Zeilen in größeren Dateien und laden Sie sie direkt auf Amazon S3 hoch, wo sie von Athena abgefragt werden können.

### Suchen verwaister Dateien
<a name="insert-into-files-partial-data"></a>

Wenn eine `CTAS` oder `INSERT INTO`-Anweisung fehlschlägt, können verwaiste Daten an dem Datenspeicherort verbleiben und möglicherweise in nachfolgenden Abfragen gelesen werden. Zur Suche nach verwaisten Dateien zwecks Überprüfung oder Löschung können Sie die Daten-Manifest-Datei verwenden, die Athena zur Verfügung stellt, um die Liste der zu schreibenden Dateien zu verfolgen. Weitere Informationen erhalten Sie unter [Identifizieren von Abfrageausgabedateien](querying-finding-output-files.md#querying-identifying-output-files) und [DataManifestLocation](https://docs.aws.amazon.com/athena/latest/APIReference/API_QueryExecutionStatistics.html#athena-Type-QueryExecutionStatistics-DataManifestLocation).

## INSERT INTO...SELECT
<a name="insert-into-select"></a>

Gibt die Abfrage an, die für eine Tabelle ausgeführt werden soll, `source_table`, die festlegt, welche Zeilen in eine zweite Tabelle eingefügt werden sollen, `destination_table`. Wenn die `SELECT`-Abfrage Spalten in der `source_table` angibt, müssen die Spalten genau mit denen in der `destination_table` übereinstimmen.

Weitere Informationen zu `SELECT`-Abfragen finden Sie unter [SELECT](select.md).

### Syntax
<a name="insert-into-select-synopsis"></a>

```
INSERT INTO destination_table 
SELECT select_query 
FROM source_table_or_view
```

### Beispiele
<a name="insert-into-select-examples"></a>

Wählen Sie alle Zeilen in der `vancouver_pageviews`-Tabelle aus und fügen Sie sie in die `canada_pageviews`-Tabelle ein:

```
INSERT INTO canada_pageviews 
SELECT * 
FROM vancouver_pageviews;
```

Wählen Sie nur die Zeilen in der `vancouver_pageviews`-Tabelle aus, in denen die `date`-Spalte einen Wert zwischen `2019-07-01` und `2019-07-31` hat, und fügen Sie sie dann in `canada_july_pageviews` ein:

```
INSERT INTO canada_july_pageviews
SELECT *
FROM vancouver_pageviews
WHERE date
    BETWEEN date '2019-07-01'
        AND '2019-07-31';
```

Wählen Sie die Werte in den Spalten `city` und `state` in der `cities_world`-Tabelle nur aus den Zeilen mit dem Wert `usa` in der Spalte `country` aus und fügen Sie sie in die Spalten `city` und `state` in der `cities_usa`-Tabelle ein:

```
INSERT INTO cities_usa (city,state)
SELECT city,state
FROM cities_world
    WHERE country='usa'
```

## INSERT INTO...VALUES
<a name="insert-into-values"></a>

Fügt Zeilen in eine vorhandene Tabelle ein, indem Spalten und Werte angegeben werden. Angegebene Spalten und zugehörige Datentypen müssen genau mit den Spalten und Datentypen in der Zieltabelle übereinstimmen.

**Wichtig**  
Wir raten davon ab, Zeilen mit `VALUES` einzufügen, da Athena Dateien für jede `INSERT`-Operation generiert. Dies kann dazu führen, dass viele kleine Dateien erstellt werden und die Abfrageleistung der Tabelle beeinträchtigen. Um Dateien zu identifizieren, die eine `INSERT`-Abfrage erstellt, überprüfen Sie die Daten-Manifest-Datei. Weitere Informationen finden Sie unter [Arbeiten mit Abfrageergebnissen und aktuellen Abfragen](querying.md).

### Syntax
<a name="insert-into-values-synopsis"></a>

```
INSERT INTO destination_table [(col1,col2,...)] 
VALUES (col1value,col2value,...)[,
       (col1value,col2value,...)][,
       ...]
```

### Beispiele
<a name="insert-into-values-examples"></a>

In den folgenden Beispielen hat die Tabelle "cities" drei Spalten: `id`, `city`, `state`, `state_motto`. Die `id`-Spalte hat den Typ `INT` und alle anderen Spalten haben den Typ `VARCHAR`.

Fügen Sie eine einzelne Zeile in die `cities`-Tabelle ein, wobei alle Spaltenwerte angegeben sind:

```
INSERT INTO cities 
VALUES (1,'Lansing','MI','Si quaeris peninsulam amoenam circumspice')
```

Fügen Sie zwei Zeilen in die `cities`-Tabelle ein:

```
INSERT INTO cities 
VALUES (1,'Lansing','MI','Si quaeris peninsulam amoenam circumspice'),
       (3,'Boise','ID','Esto perpetua')
```