

 Amazon Redshift unterstützt ab Patch 198 nicht mehr die Erstellung neuer Python-UDFs. Bestehende Python-UDFs werden bis zum 30. Juni 2026 weiterhin funktionieren. Weitere Informationen finden Sie im [Blog-Posting](https://aws.amazon.com/blogs/big-data/amazon-redshift-python-user-defined-functions-will-reach-end-of-support-after-june-30-2026/). 

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.

# Aufteilen halbstrukturierter Daten in SUPER-Spalten mit materialisierten Ansichten
<a name="r_shred_super"></a>

Mit Amazon Redshift können Sie die Abfrageleistung verbessern, indem Sie Daten mithilfe materialisierter Ansichten in SUPER-Spalten aufteilen. Die Aufteilung ist der Prozess, bei dem komplexe Datentypen wie halbstrukturiertes JSON oder XML in kleinere, flachere Spalten aufgeteilt werden. SUPER-Spalten sind eine spezielle Form der spaltenförmigen Speicherung, die für das schnelle Scannen aufgeteilter Daten optimiert ist. 

In den folgenden Abschnitten werden die Schritte und Überlegungen zum Aufteilen von Daten in SUPER-Spalten mithilfe materialisierter Ansichten in Amazon Redshift beschrieben.

Das folgende Beispiel zeigt eine materialisierte Ansicht, die die verschachtelten Daten aufteilt, wobei die resultierenden Spalten immer noch den SUPER-Datentyp haben.

```
SELECT c.c_name, o.o_orderstatus
FROM customer_orders_lineitem c, c.c_orders o;
```

Das folgende Beispiel zeigt die Definition einer materialisierten Ansicht, die herkömmliche skalare Amazon-Redshift-Spalten aus den aufgeteilten Daten erstellt.

```
SELECT c.c_name, c.c_orders[0].o_totalprice
FROM customer_orders_lineitem c;
```

Sie können eine einzelne materialisierte Ansicht super\_mv erstellen, um beide Abfragen zu beschleunigen.

Um die erste Abfrage zu beantworten, müssen Sie das Attribut o\_orderstatus materialisieren. Sie können das Attribut c\_name weglassen, da es weder verschachtelte Navigation noch Aufheben der Verschachtelung beinhaltet. Sie müssen auch das Attribut c\_custkey von customer\_orders\_lineitem in die materialisierte Ansicht aufnehmen, um die Basistabelle mit der materialisierten Ansicht verbinden zu können.

Um die zweite Abfrage zu beantworten, müssen Sie auch das Attribut o\_totalprice und den Array-Index o\_idx von c\_orders materialisieren. Daher können Sie auf den Index 0 von c\_orders zugreifen.

```
CREATE MATERIALIZED VIEW super_mv distkey(c_custkey) sortkey(c_custkey) AS (
  SELECT c_custkey, o.o_orderstatus, o.o_totalprice, o_idx
  FROM customer_orders_lineitem c, c.c_orders o AT o_idx
);
```

Die Attribute o\_orderstatus und o\_totalprice der materialisierten Ansicht super\_mv sind SUPER.

Die materialisierte Ansicht super\_mv wird bei Änderungen an der Basistabelle customer\_orders\_lineitem inkrementell aktualisiert.

```
REFRESH MATERIALIZED VIEW super_mv;
INFO: Materialized view super_mv was incrementally updated successfully.
```

Um die erste PartiQL Abfrage als reguläre SQL-Abfrage neu zu schreiben, verbinden Sie customer\_orders\_lineitem mit super\_mv wie folgt.

```
SELECT c.c_name, v.o_orderstatus
FROM customer_orders_lineitem c 
JOIN super_mv v ON c.c_custkey = v.c_custkey;
```

In ähnlicher Weise können Sie die zweite PartiQL-Abfrage umschreiben. Im folgenden Beispiel wird ein Filter für o\_idx = 0 verwendet.

```
SELECT c.c_name, v.o_totalprice
FROM customer_orders_lineitem c 
JOIN super_mv v ON c.c_custkey = v.c_custkey
WHERE v.o_idx = 0;
```

Geben Sie im Befehl CREATE MATERIALIZED VIEW c\_custkey als Verteilungsschlüssel und Sortierschlüssel für super\_mv an. Amazon Redshift führt einen effizienten Merge-Join durch, vorausgesetzt, dass c\_custkey auch der Verteilungsschlüssel und Sortierschlüssel von customer\_orders\_lineitem ist. Wenn dies nicht der Fall ist, können Sie c\_custkey als Sortierschlüssel und Verteilungsschlüssel von customer\_orders\_lineitem wie folgt angeben.

```
ALTER TABLE customer_orders_lineitem
ALTER DISTKEY c_custkey, ALTER SORTKEY (c_custkey);
```

Verwenden Sie die EXPLAIN-Anweisung, um zu überprüfen, ob Amazon Redshift einen Merge-Join für die neu geschriebenen Abfragen durchführt.

```
EXPLAIN
      SELECT c.c_name, v.o_orderstatus
      FROM customer_orders_lineitem c JOIN super_mv v ON c.c_custkey = v.c_custkey;
      
      QUERY PLAN                                              
      ------------------------------------------------------------------------------------------------------
      XN Merge Join DS_DIST_NONE  (cost=0.00..34701.82 rows=1470776 width=27)
      Merge Cond: ("outer".c_custkey = "inner".c_custkey)
      ->  XN Seq Scan on mv_tbl__super_mv__0 derived_table2  (cost=0.00..14999.86 rows=1499986 width=13)
      ->  XN Seq Scan on customer_orders_lineitem c  (cost=0.00..999.96 rows=99996 width=30)
      (4 rows)
```