

 Amazon Redshift unterstützt UDFs ab Patch 198 nicht mehr die Erstellung von neuem Python. Das bestehende Python UDFs wird 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\$1mv erstellen, um beide Abfragen zu beschleunigen.

Um die erste Abfrage zu beantworten, müssen Sie das Attribut o\$1orderstatus materialisieren. Sie können das Attribut c\$1name weglassen, da es weder verschachtelte Navigation noch Aufheben der Verschachtelung beinhaltet. Sie müssen auch das Attribut c\$1custkey von customer\$1orders\$1lineitem 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\$1totalprice und den Array-Index o\$1idx von c\$1orders materialisieren. Daher können Sie auf den Index 0 von c\$1orders 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\$1orderstatus und o\$1totalprice der materialisierten Ansicht super\$1mv sind SUPER.

Die materialisierte Ansicht super\$1mv wird bei Änderungen an der Basistabelle customer\$1orders\$1lineitem 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\$1orders\$1lineitem mit super\$1mv 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\$1idx = 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\$1custkey als Verteilungsschlüssel und Sortierschlüssel für super\$1mv an. Amazon Redshift führt einen effizienten Merge-Join durch, vorausgesetzt, dass c\$1custkey auch der Verteilungsschlüssel und Sortierschlüssel von customer\$1orders\$1lineitem ist. Wenn dies nicht der Fall ist, können Sie c\$1custkey als Sortierschlüssel und Verteilungsschlüssel von customer\$1orders\$1lineitem 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)
```