

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.

# Partitionierung und Bucketing verwenden
<a name="ctas-partitioning-and-bucketing"></a>

Partitionierung und Bucketing sind zwei Möglichkeiten, die Datenmenge zu reduzieren, die Athena scannen muss, wenn Sie eine Abfrage ausführen. Partitionierung und Bucketing ergänzen sich und können zusammen verwendet werden. Durch die Reduzierung der Datenmenge, die gescannt werden muss, wird die Leistung verbessert und die Kosten gesenkt. Allgemeine Hinweise zur Athena-Abfrageleistung finden Sie unter [Top 10 der Leistungsoptimierungstipps für Amazon Athena](https://aws.amazon.com/blogs/big-data/top-10-performance-tuning-tips-for-amazon-athena/).

**Topics**
+ [Was ist Partitionierung?](ctas-partitioning-and-bucketing-what-is-partitioning.md)
+ [Was ist Bucketing?](ctas-partitioning-and-bucketing-what-is-bucketing.md)
+ [Weitere Ressourcen](ctas-partitioning-and-bucketing-additional-resources.md)

# Was ist Partitionierung?
<a name="ctas-partitioning-and-bucketing-what-is-partitioning"></a>

Partitionierung bedeutet, Daten auf Amazon S3 auf der Grundlage einer bestimmten Eigenschaft der Daten in Verzeichnissen (oder „Präfixen“) zu organisieren. Solche Eigenschaften werden Partitionsschlüssel genannt. Ein üblicher Partitionsschlüssel ist das Datum oder eine andere Zeiteinheit wie das Jahr oder der Monat. Ein Datensatz kann jedoch nach mehr als einem Schlüssel partitioniert werden. Beispielsweise können Daten über Produktverkäufe nach Datum, Produktkategorie und Markt partitioniert werden.

## Entscheiden, wie partitioniert werden soll
<a name="ctas-partitioning-and-bucketing-deciding-how-to-partition"></a>

Gute Kandidaten für Partitionsschlüssel sind Eigenschaften, die in Abfragen immer oder häufig verwendet werden und eine geringe Kardinalität aufweisen. Es gibt einen Kompromiss zwischen zu vielen Partitionen und zu wenigen. Bei zu vielen Partitionen führt die erhöhte Anzahl von Dateien zu Mehraufwand. Außerdem entsteht durch das Filtern der Partitionen selbst ein gewisser Mehraufwand. Bei zu wenigen Partitionen müssen Abfragen oft mehr Daten scannen.

## Eine partitionierte Tabelle erstellen
<a name="ctas-partitioning-and-bucketing-creating-a-partitioned-table"></a>

Wenn ein Datensatz partitioniert ist, können Sie in Athena eine partitionierte Tabelle erstellen. Eine partitionierte Tabelle ist eine Tabelle mit Partitionsschlüsseln. Wenn Sie `CREATE TABLE` verwenden, fügen Sie der Tabelle Partitionen hinzu. Wenn Sie `CREATE TABLE AS` verwenden, werden die Partitionen, die auf Amazon S3 erstellt wurden, automatisch zur Tabelle hinzugefügt.

In einer `CREATE TABLE`-Anweisung geben Sie die Partitionsschlüssel in der `PARTITIONED BY (column_name data_type)`-Klausel an. In einer `CREATE TABLE AS` Anweisung geben Sie die Partitionsschlüssel in einer `WITH (partitioned_by = ARRAY['partition_key'])`-Klausel oder `WITH (partitioning = ARRAY['partition_key'])` für Iceberg-Tabellen an. Aus Leistungsgründen sollten Partitionsschlüssel immer vom Typ `STRING` sein. Weitere Informationen finden Sie unter [String als Datentyp für Partitionsschlüssel verwenden](data-types-timestamps.md#data-types-timestamps-partition-key-types).

Weitere Informationen `CREATE TABLE` und Informationen zur `CREATE TABLE AS`-Syntax finden Sie unter [CREATE TABLE](create-table.md) und [CTAS-Tabelleneigenschaften](create-table-as.md#ctas-table-properties).

## Partitionierte Tabellen abfragen
<a name="ctas-partitioning-and-bucketing-querying-partitioned-tables"></a>

Wenn Sie eine partitionierte Tabelle abfragen, verwendet Athena die Prädikate in der Abfrage, um die Liste der Partitionen zu filtern. Anschließend verwendet es die Speicherorte der passenden Partitionen, um die gefundenen Dateien zu verarbeiten. Athena kann die Menge der gescannten Daten effizient reduzieren, indem es einfach keine Daten in den Partitionen liest, die nicht den Abfrageprädikaten entsprechen.

### Beispiele
<a name="ctas-partitioning-and-bucketing-partitioned-table-example-queries"></a>

Angenommen, Sie haben eine Tabelle, die nach `sales_date` und `product_category` partitioniert ist und möchten den Gesamtumsatz einer Woche in einer bestimmten Kategorie ermitteln. Sie fügen Prädikate in die `sales_date`- und `product_category`-Spalten ein, um sicherzustellen, dass Athena nur die minimale Datenmenge scannt, wie im folgenden Beispiel.

```
SELECT SUM(amount) AS total_revenue 
FROM sales 
WHERE sales_date BETWEEN '2023-02-27' AND '2023-03-05' 
AND product_category = 'Toys'
```

Angenommen, Sie haben einen Datensatz, der nach Datum partitioniert ist, aber auch über einen detaillierten Zeitstempel verfügt.

Bei Iceberg-Tabellen können Sie einen Partitionsschlüssel so deklarieren, dass er eine Beziehung zu einer Spalte hat, aber bei Hive-Tabellen hat die Abfrage-Engine keine Kenntnis von den Beziehungen zwischen Spalten und Partitionsschlüsseln. Aus diesem Grund müssen Sie sowohl für die Spalte als auch für den Partitionsschlüssel in Ihrer Abfrage ein Prädikat angeben, um sicherzustellen, dass die Abfrage nicht mehr Daten scannt als nötig.

Nehmen wir beispielsweise an, dass die `sales`-Tabelle im vorherigen Beispiel auch eine `sold_at`-Spalte des `TIMESTAMP`-Datentyps enthält. Wenn Sie den Umsatz nur für einen bestimmten Zeitraum ermitteln möchten, würden Sie die Abfrage wie folgt schreiben:

```
SELECT SUM(amount) AS total_revenue 
FROM sales 
WHERE sales_date = '2023-02-28' 
AND sold_at BETWEEN TIMESTAMP '2023-02-28 10:00:00' AND TIMESTAMP '2023-02-28 12:00:00' 
AND product_category = 'Toys'
```

Weitere Informationen zu diesem Unterschied zwischen der Abfrage von Hive- und Iceberg-Tabellen finden Sie unter [Wie Sie Abfragen für Zeitstempelfelder schreiben, die ebenfalls zeitpartitioniert sind](data-types-timestamps.md#data-types-timestamps-how-to-write-queries-for-timestamp-fields-that-are-also-time-partitioned).

# Was ist Bucketing?
<a name="ctas-partitioning-and-bucketing-what-is-bucketing"></a>

Bucketing ist eine Möglichkeit, die Inhalte eines Datensatzes in Kategorien zu organisieren, die als Buckets bezeichnet werden.

Die Bedeutung von Bucket und Bucketing unterscheidet sich von Amazon-S3-Buckets und sollte nicht mit diesen verwechselt werden. Beim Daten-Bucketing werden Datensätze, die denselben Wert für eine Eigenschaft haben, in denselben Bucket verschoben. Datensätze werden so gleichmäßig wie möglich auf die Buckets verteilt, sodass jeder Bucket ungefähr die gleiche Datenmenge enthält.

In der Praxis handelt es sich bei den Buckets um Dateien, und eine Hash-Funktion bestimmt, in welchen Bucket ein Datensatz aufgenommen wird. Ein bucketierter Datensatz enthält eine oder mehrere Dateien pro Bucket und Partition. Der Bucket, zu dem eine Datei gehört, ist im Dateinamen kodiert.

## Vorteile von Bucketing
<a name="ctas-partitioning-and-bucketing-bucketing-benefits"></a>

Bucketing ist nützlich, wenn eine Datenmenge einer bestimmten Eigenschaft bucketiert ist und Sie Datensätze abrufen möchten, in denen diese Eigenschaft einen bestimmten Wert hat. Da die Daten bucketiert sind, kann Athena anhand des Werts bestimmen, welche Dateien betrachtet werden sollen. Nehmen wir zum Beispiel an, dass ein Datensatz nach `customer_id` bucketiert ist und Sie alle Datensätze für einen bestimmten Kunden suchen möchten. Athena bestimmt den Bucket, der diese Datensätze enthält, und liest nur die Dateien in diesem Bucket.

Gute Kandidaten für das Bucketing sind Spalten mit hoher Kardinalität (d. h. mit vielen unterschiedlichen Werten), die gleichmäßig verteilt sind und die Sie häufig nach bestimmten Werten abfragen.

**Anmerkung**  
Athena unterstützt nicht die Verwendung von `INSERT INTO` zum Hinzufügen neuer Datensätze zu bucketierten Tabellen.

## Unterstützte Datentypen für das Filtern von Spalten mit Zeiträumen
<a name="ctas-partitioning-and-bucketing-data-types-supported-for-filtering-on-bucketed-columns"></a>

Sie können Filter für bucketierte Spalten mit bestimmten Datentypen hinzufügen. Athena unterstützt eine solche Filterung nur für bucketierte Spalten mit den folgenden Datentypen:
+ BOOLEAN
+ BYTE
+ DATE
+ DOUBLE
+ FLOAT
+ INT
+ LONG
+ SHORT
+ STRING
+ VARCHAR

## Unterstützung für Hive und Spark
<a name="ctas-partitioning-and-bucketing-hive-and-spark-support"></a>

Athena-Engine-Version 2 unterstützt Datensätze, die mit dem Hive-Bucket-Algorithmus in Buckets zusammengefasst wurden, und Athena-Engine-Version 3 unterstützt auch den Apache-Spark-Bucketing-Algorithmus. Hive-Bucketing ist die Standardeinstellung. Wenn Ihr Datensatz mithilfe des Spark-Algorithmus in einem Bucket zusammengefasst wird, verwenden Sie die `TBLPROPERTIES`-Klausel, um den `bucketing_format`-Eigenschaftswert auf `spark` festzulegen.

**Anmerkung**  
Athena hat ein Limit von 100 Partitionen pro `CREATE TABLE AS SELECT` ([CTAS](ctas.md))-Abfrage. Ebenso können Sie einer Zieltabelle mit einer [INSERT INTO](insert-into.md)-Anweisung maximal 100 Partitionen hinzufügen.  
Wenn Sie diese Einschränkung überschreiten, wird möglicherweise die Fehlermeldung HIVE\$1TOO\$1MANY\$1OPEN\$1PARTITIONS: Exceeded limit of 100 open writers for partitions/buckets angezeigt. Um diese Einschränkung zu umgehen, können Sie eine CTAS-Anweisung und eine Reihe von `INSERT INTO`-Anweisungen verwenden, die jeweils bis zu 100 Partitionen erstellen oder einfügen. Weitere Informationen finden Sie unter [Verwenden von CTAS und INSERT INTO zum Umgehen des Limits von 100 Partitionen](ctas-insert-into.md).

## Beispiel für CREATE-TABLE-Bucketing
<a name="ctas-partitioning-and-bucketing-bucketing-create-table-example"></a>

Verwenden Sie die `CLUSTERED BY (column)`-Klausel, gefolgt von der `INTO N BUCKETS`-Klausel, um eine Tabelle für einen vorhandenen Bucket-Datensatz zu erstellen. Die `INTO N BUCKETS`-Klausel gibt die Anzahl der Buckets an, in die die Daten aufgeteilt werden.

Im folgenden `CREATE TABLE`-Beispiel wird der `sales`-Datensatz mithilfe des Spark-Algorithmus `customer_id` in 8 Buckets aufgeteilt. Die `CREATE TABLE`-Anweisung verwendet die Klauseln `CLUSTERED BY` und `TBLPROPERTIES`, um die Eigenschaften entsprechend festzulegen.

```
CREATE EXTERNAL TABLE sales (...) 
... 
CLUSTERED BY (`customer_id`) INTO 8 BUCKETS 
... 
TBLPROPERTIES ( 
  'bucketing_format' = 'spark' 
)
```

## Beispiel für CREATE TABLE AS (CTAS)-Bucketing
<a name="ctas-partitioning-and-bucketing-bucketing-create-table-as-example"></a>

Um Bucketing mit `CREATE TABLE AS` zu spezifizieren, verwenden Sie die Parameter `bucket_count` und `bucketed_by`, wie im folgenden Beispiel gezeigt.

```
CREATE TABLE sales 
WITH ( 
  ... 
  bucketed_by = ARRAY['customer_id'], 
  bucket_count = 8 
) 
AS SELECT ...
```

## Beispiel für eine Bucketing-Abfrage
<a name="ctas-partitioning-and-bucketing-bucketing-query-example"></a>

In der folgenden Beispielabfrage wird nach den Namen von Produkten gesucht, die ein bestimmter Kunde im Laufe einer Woche gekauft hat.

```
SELECT DISTINCT product_name 
FROM sales 
WHERE sales_date BETWEEN '2023-02-27' AND '2023-03-05' 
AND customer_id = 'c123'
```

Wenn diese Tabelle von `sales_date` partitioniert ist und von `customer_id` bucketiert ist, kann Athena den Bucket berechnen, in dem sich die Kundendatensätze befinden. Athena liest höchstens eine Datei pro Partition.

# Weitere Ressourcen
<a name="ctas-partitioning-and-bucketing-additional-resources"></a>
+ Für ein `CREATE TABLE AS`-Beispiel, das sowohl bucketierte als auch partitionierte Tabellen erstellt, siehe das [Beispiel: Erstellen von bucketierten Tabellen und partitionierten Tabellen](https://docs.aws.amazon.com/athena/latest/ug/ctas-examples.html#ctas-example-bucketed).
+ Informationen zur Implementierung von Bucketing auf AWS Data Lakes, einschließlich der Verwendung einer Athena CTAS-Anweisung, AWS Glue für Apache Spark und zum Bucketing für Apache Iceberg-Tabellen finden Sie im AWS Big-Data-Blogbeitrag [Optimieren Sie das Datenlayout durch Bucketing mit Amazon Athena](https://aws.amazon.com/blogs/big-data/optimize-data-layout-by-bucketing-with-amazon-athena-and-aws-glue-to-accelerate-downstream-queries/) und zur Beschleunigung nachgelagerter Abfragen. AWS Glue 