

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.

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