

 Amazon Redshift unterstützt die Verwendung von Python-UDFs nach dem 30. Juni 2026 nicht mehr. Wir werden damit beginnen, es schrittweise durchzusetzen. Weitere Informationen zum Ende der Lebensdauer von Python und zu den Migrationsoptionen finden Sie im [ Blogbeitrag](https://aws.amazon.com/blogs/big-data/amazon-redshift-python-user-defined-functions-will-reach-end-of-support-after-june-30-2026/), der am 30. Juni 2025 veröffentlicht wurde. 

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.

# Beispiele für die Verwendung halbstrukturierter Daten in Amazon Redshift
<a name="super-examples"></a>

 Die folgenden Beispiele zeigen, wie Sie mit halbstrukturierten Daten in Amazon Redshift mithilfe der PartiQL-Syntax arbeiten. Sie erstellen eine Beispieltabelle, um einen Beispielsatz halbstrukturierter Daten zu laden, und fragen dann halbstrukturierte Datenobjekte in einer Vielzahl von Anwendungsfällen ab. 

**Anmerkung**  
Wir empfehlen, dass Sie die `enable_case_sensitive_super_attribute` Konfigurationsoption auf true setzen, bevor Sie mit dem SUPER-Datentyp arbeiten. Weitere Informationen finden Sie unter [enable\_case\_sensitive\_super\_attribute](r_enable_case_sensitive_super_attribute.md).

## Laden halbstrukturierter Daten
<a name="super-examples-load"></a>

Die folgenden Anweisungen erstellen eine Beispieltabelle und laden ein JSON-Beispielobjekt in die `all_data`-SUPER-Spalte.

```
DROP TABLE IF EXISTS test_json;

SET enable_case_sensitive_super_attribute TO true;

CREATE TABLE test_json (all_data SUPER);

INSERT INTO test_json VALUES (JSON_PARSE('
{
   "data":{
      "pnr":{
         "type":"pnr",
         "pnrid":"123PQRS-2024-09-20",
         "bookingIdentifier":"123PQRS",
         "version":"5",
         "triggerType":"",
         "events":[
            {
               "eventType":"UPDATED",
               "type":"PART",
               "id":"123PQRS-2024-09-20-HO-1"
            },
            {
               "eventType":"CREATED",
               "type":"ABC",
               "id":"123PQRS-2024-09-20-OT-38"
            }
         ],
         "create":{
            "pnrCreateDate":"2024-09-20T16:56:00Z",
            "officeID":"OFFCID1234",
            "officeIDCategory":"Email"
         },
         "lastModification":{
            "dateTime":"2024-09-20T17:09:00Z"
         },
         "PARTDetails":[
            {
               "path":"1",
               "TrainPARTs":[
                  {
                     "PARTID":"123PQRS-2024-09-20-HO-1",
                     "departure":{
                        "departureStation":"XYZ",
                        "departureTimeLocal":"2024-10-03T06:30:00",
                        "departureTimeGMT":"2024-10-03T10:30:00Z"
                     },
                     "arrival":{
                        "arrivalStation":"ABC",
                        "arrivalTimeLocal":"2024-10-03T08:20:00",
                        "arrivalTimeGMT":"2024-10-03T15:20:00Z"
                     },
                     "marketing":{
                        "carrierCode":"XX",
                        "TrainNumber":"100"
                     },
                     "operating":{
                        "carrierCode":"YY",
                        "TrainNumber":"100-A"
                     },
                     "status":"ON",
                     "aircraft":{
                        "code":"222"
                     },
                     "class":"WC",
                     "first":"Y",
                     "seating":[
                        
                     ]
                  }
               ]
            }
         ],
         "commuterInformation":[
            {
               "commuterID":"2",
               "commuterPNR":"123PQRS-2024-09-20-RO-2",
               "commuterTypeCode":"DOM",
               "firstName":"JOHN",
               "lastName":"MILLER"
            }
         ],
         "contactDetail":[
            {
               "emailContacts":[
                  {
                     "id":"123PQRS-2024-09-20-OT-4",
                     "contact":"JOHNMILLER@EXAMPLE.COM",
                     "purpose":[
                        "BUSINESS"
                     ],
                     "commuter":[
                        "123PQRS-2024-09-20-RO-2"
                     ],
                     "language":"EN"
                  },
                  {
                     "id":"123PQRS-2024-09-20-OT-5",
                     "contact":"HARVEYCORMIER@EXAMPLE.COM",
                     "purpose":[
                        "NOTIFICATION"
                     ],
                     "commuter":[
                        "123PQRS-2024-09-20-RO-2"
                     ],
                     "language":"EN"
                  }
               ]
            },
            {
               "phoneContacts":[
                  {
                     "id":"123PQRS-2024-09-20-OT-3",
                     "contact":"1234567890",
                     "purpose":[
                        "NOTIFICATION"
                     ],
                     "commuter":[
                        "123PQRS-2024-09-20-RO-2"
                     ],
                     "language":""
                  }
               ]
            },
            {
               "addressInfo":[
                  {
                     "id":"123PQRS-2024-09-20-OT-6",
                     "addressline":[
                        "112 PORT STREET"
                     ],
                     "provinceState":"CA",
                     "cityName":"SAN JOSE",
                     "postalCode":"12345",
                     "countryCode":"USA",
                     "purpose":[
                        "MAILING"
                     ],
                     "commuter":[
                        "123PQRS-2024-09-20-RO-2"
                     ]
                  }
               ]
            }
         ],
         "PendingService":[
            {
               "id":"123PQRS-2024-09-20-OT-26",
               "code":"MONO",
               "status":"",
               "text":"Broken Seat at Coach-No XYZ123 Seat-No 567",
               "trainCode":"WC-1",
               "TrainsArray":[
                  "123PQRS-2024-09-20-HO-1"
               ],
               "commuter":[
                  "123PQRS-2024-09-20-RO-2"
               ]
            },
            {
               "id":"123PQRS-2024-09-20-OT-27",
               "code":"OTHS",
               "status":"",
               "text":"Broken Seat at Coach-No XYZ567 Seat-No 111",
               "trainCode":"WC-1",
               "TrainsArray":[
                  "123PQRS-2024-09-20-HO-1"
               ],
               "commuter":[
                  "123PQRS-2024-09-20-RO-2"
               ]
            },
            {
               "id":"123PQRS-2024-09-20-OT-28",
               "code":"OTHS",
               "status":"",
               "text":"Broken Seat at Coach-No XYZ890 Seat-No 123",
               "trainCode":"WC-1",
               "TrainsArray":[
                  "123PQRS-2024-09-20-HO-1"
               ],
               "commuter":[
                  "123PQRS-2024-09-20-RO-2"
               ]
            },
            {
               "id":"123PQRS-2024-09-20-OT-29",
               "code":"OTHS",
               "status":"",
               "text":"Broken Seat at Coach-No XYZ111 Seat-No 333",
               "trainCode":"WC-1",
               "TrainsArray":[
                  "123PQRS-2024-09-20-HO-1"
               ],
               "commuter":[
                  "123PQRS-2024-09-20-RO-2"
               ]
            }            
         ],
         "parts": [
            {
               "partname": "prop",
               "manufacturer": "local parts co",
               "quality": 2,
               "price": 10.00
            },
            {
               "partname": "prop",
               "manufacturer": "big parts co",
               "quality": null,
               "price": 9.00
            },
            {
               "partname": "prop",
               "manufacturer": "small parts co",
               "quality": 1,
               "price": 12.00
            },
            {
               "partname": "rudder",
               "manufacturer": "local parts co",
               "quality": 1,
               "price": 2.50
            },
            {
               "partname": "rudder",
               "manufacturer": "big parts co",
               "quality": 2,
               "price": 3.75
            },
            {
               "partname": "rudder",
               "manufacturer": "small parts co",
               "quality": null,
               "price": 1.90
            },
            {
               "partname": "wing",
               "manufacturer": "local parts co",
               "quality": null,
               "price": 7.50
            },
            {
               "partname": "wing",
               "manufacturer": "big parts co",
               "quality": 1,
               "price": 15.20
            },
            {
               "partname": "wing",
               "manufacturer": "small parts co",
               "quality": null,
               "price": 11.80
            }
         ],
         "count_by_color": [
            {
               "quality": "high",
               "red": 15,
               "green": 20,
               "blue": 7
            },
            {
               "quality": "normal",
               "red": 35,
               "green": null,
               "blue": 40
            },
            {
               "quality": "low",
               "red": 10,
               "green": 23,
               "blue": null
            }
         ]
       }
   },
   "id":"abcdefgh-ijklmnop-qrstuvwxyz123",
   "mainIds":[
      {
         "ID":"pqrstuvwxyz-aabbcc123",
         "Source":"NYC"
      }
   ]
}
'));
```

## Abfragen von verschachtelten halbstrukturierten Daten
<a name="super-examples-query"></a>

Die folgende Anweisung verwendet die Punktnotation von PartiQL, um das `pnrid`-Feld zu extrahieren, das drei Ebenen tief im `all_data`-Objekt der obersten Ebene verschachtelt ist.

```
select all_data.data.pnr.pnrid::varchar from test_json;

 pnrid
--------------------
 123PQRS-2024-09-20
```

Die folgende Anweisung verwendet die Klammernotation von PartiQL, um nur das erste Element aus dem `events`-Array zu spezifizieren und zu extrahieren, das innerhalb des Objekts der obersten Ebene verschachtelt ist.

```
SELECT
    all_data.data.pnr.events[0]
FROM test_json;

 events
---------------------------------
{
   "eventType":"UPDATED",
   "type":"PART",
   "id":"123PQRS-2024-09-20-HO-1"
}
```

Die folgende Anweisung extrahiert nur die `eventType`-Eigenschaft des angegebenen Elements aus dem `events` Array.

```
SELECT
    all_data.data.pnr.events[0].eventType
FROM test_json;

 eventtype
-----------
 "UPDATED"
```

Die folgenden Anweisungen 

## Verwendung von `enable_case_sensitive_super_attribute` mit halbstrukturierten Daten
<a name="super-examples-query-case"></a>

Die folgenden Beispiele zeigen, wie sich die Konfigurationsoption auf die Abfrage halbstrukturierter Daten auswirkt. [enable\_case\_sensitive\_super\_attribute](r_enable_case_sensitive_super_attribute.md) Weitere Informationen finden Sie unter [Zugriff auf JSON-Felder mit Feldnamen oder Attributen in Großschreibung und gemischter Groß-/Kleinschreibung](super-configurations.md#upper-mixed-case).

In der folgenden Anweisung führt das Zurücksetzen der Konfigurationsoption auf den Standardwert False dazu, dass die Abfrage für Attributnamen mit gemischter Groß- und Kleinschreibung NULL zurückgibt.

```
RESET enable_case_sensitive_super_attribute;

SELECT
    all_data.data.pnr.events[0].eventType
FROM test_json;

 eventtype
-----------
NULL
```

Im folgenden Beispiel gibt die Beispielabfrage das gewünschte Ergebnis zurück, nachdem Sie den Wert auf true gesetzt haben. `enable_case_sensitive_super_attribute` Bei Attributnamen sind keine doppelten Anführungszeichen erforderlich.

```
SET enable_case_sensitive_super_attribute TO true;

SELECT
    all_data.data.pnr.events[0].eventType
FROM test_json;

 eventtype
-----------
 "UPDATED"
```

## Filtern halbstrukturierter Daten
<a name="super-examples-filter"></a>

Die folgende Anweisung verwendet die PartiQL-Syntax in der WHERE-Klausel einer Anweisung, die Ereignisse des Typs `UPDATED` zählt, um Daten eines bestimmten Attributs aus einem Array abzurufen. Sie können diese Syntax in jedem Teil der Abfrage verwenden, in dem Sie normalerweise auf Spalten verweisen würden.

```
SELECT COUNT(*)
FROM test_json
WHERE all_data.data.pnr.events[0].eventType = 'UPDATED';

 count
------
 1
```

Im folgenden Beispiel wird die Klammer- und Punktsyntax von PartiQL in den Klauseln GROUP BY und ORDER BY verwendet.

```
SELECT all_data.data.pnr.events[0].eventType::varchar,
       COUNT(*)
FROM test_json
WHERE all_data.data.pnr.events[0].eventType IS NOT NULL
GROUP BY all_data.data.pnr.events[0].eventType
ORDER BY all_data.data.pnr.events[0].eventType;

 eventtype | count
-----------+-------
 "UPDATED" | 1
```

## Aufheben der Verschachtelung halbstrukturierter Daten
<a name="super-examples-unnest-data"></a>

Die folgende Anweisung verwendet PartiQL-Joins, um die Verschachtelung des Arrays `events` aufzuheben. Beachten Sie, dass diese Verknüpfung auch dann funktioniert, wenn die Anzahl der Indizes für das Array nicht statisch ist.

Beispiele für das Entfernen der Verschachtelung halbstrukturierter Daten mithilfe von UNNEST in der FROM-Klausel finden Sie unter [Beispiele für UNNEST](r_FROM_clause-unnest-examples.md).

```
SELECT
a.all_data.data.pnr.type::varchar type_info,
a.all_data.data.pnr.pnrid::varchar pnr_id ,
a.all_data.data.pnr.bookingIdentifier::varchar booking_id,
a.all_data.data.pnr.version::varchar version_info,
b.eventType::varchar event_type,
b.id::varchar event_id
FROM test_json a, 
  a.all_data.data.pnr.events b;

 type_info | pnr_id              | booking_id | version_info | event_type | event_id
-----------+---------------------+------------+--------------+------------+-------------------------
 pnr       | 123PQRS-2024-09-20  | 123PQRS    | 5            | UPDATED    | 123PQRS-2024-09-20-HO-1
 pnr       | 123PQRS-2024-09-20  | 123PQRS    | 5            | CREATED    | 123PQRS-2024-09-20-OT-38
```

## Aufheben der Verschachtelung von Arrays
<a name="super-examples-unnest-array"></a>

Die folgende Anweisung verwendet PartiQL-Joins, um die Verschachtelung eines Arrays aufzuheben, das in einem anderen Array verschachtelt ist. 

Beispiele für das Entfernen der Verschachtelung halbstrukturierter Daten mithilfe von UNNEST in der FROM-Klausel finden Sie unter [Beispiele für UNNEST](r_FROM_clause-unnest-examples.md).

```
SELECT
a.all_data.data.pnr.type::varchar type_info,
a.all_data.data.pnr.pnrid::varchar pnr_id ,
a.all_data.data.pnr.bookingIdentifier::varchar booking_id,
a.all_data.data.pnr.version::varchar version_info,
d.id::varchar email_record_id,
d.contact::varchar email_contact,
e::varchar email_purpose,
f::varchar email_commuter
FROM test_json a,
  a.all_data.data.pnr.contactDetail c,
  c.emailContacts d,
  d.purpose e,
  d.commuter f;

 type_info | pnr_id              | booking_id | version_info | email_record_id         | email_contact             | email_purpose | email_commuter
-----------+---------------------+------------+--------------+-------------------------+---------------------------+---------------+-------------------------
 pnr       | 123PQRS-2024-09-20  | 123PQRS    | 5            | 123PQRS-2024-09-20-OT-4 | JOHNMILLER@EXAMPLE.COM    | BUSINESS      | 123PQRS-2024-09-20-RO-2
 pnr       | 123PQRS-2024-09-20  | 123PQRS    | 5            | 123PQRS-2024-09-20-OT-5 | HARVEYCORMIER@EXAMPLE.COM | NOTIFICATION  | 123PQRS-2024-09-20-RO-2
```

## Verwenden von halbstrukturierten Daten in Unterabfragen
<a name="super-examples-subquery"></a>

Die folgende Anweisung verwendet eine Unterabfrage in der WHERE-Klausel, um nur einen Unterabschnitt der Ergebnisse aus dem vorherigen Beispiel zurückzugeben.

```
SELECT
a.all_data.data.pnr.type::varchar type_info,
a.all_data.data.pnr.pnrid::varchar pnr_id ,
a.all_data.data.pnr.bookingIdentifier::varchar booking_id,
a.all_data.data.pnr.version::varchar version_info,
d.id::varchar email_record_id,
d.contact::varchar email_contact
FROM test_json a,
a.all_data.data.pnr.contactDetail c,
c.emailContacts d
WHERE (SELECT COUNT(*) FROM d.purpose e WHERE e = 'BUSINESS') > 0;

 type_info | pnr_id              | booking_id | version_info | email_record_id         | email_contact             | email_purpose | email_commuter
-----------+---------------------+------------+--------------+-------------------------+---------------------------+---------------+-------------------------
 pnr       | 123PQRS-2024-09-20  | 123PQRS    | 5            | 123PQRS-2024-09-20-OT-4 | JOHNMILLER@EXAMPLE.COM    | BUSINESS      | 123PQRS-2024-09-20-RO-2
```

## Aggregieren von Abfragen mit halbstrukturierten Daten
<a name="super-examples-aggregate"></a>

In der folgenden Anweisung wird die COUNT -Funktion verwendet, um die Anzahl der Elemente im `PendingService`-Array zu aggregieren.

```
SELECT
a.all_data.data.pnr.type::varchar type_info,
a.all_data.data.pnr.pnrid::varchar pnr_id ,
a.all_data.data.pnr.bookingIdentifier::varchar booking_id,
a.all_data.data.pnr.version::varchar version_info,
COUNT(*) AS total_pending_service
FROM test_json a, 
  a.all_data.data.pnr.PendingService c
GROUP BY 1,2,3,4;

 type_info | pnr_id             | booking_id | version_info | total_pending_service
-----------+--------------------+------------+--------------+-----------------------
 pnr       | 123PQRS-2024-09-20 | 123PQRS    | 5            | 4
```

## Verwenden von halbstrukturierten Daten in materialisierten Ansichten
<a name="super-examples-mv"></a>

Die folgende Anweisung verwendet die Anweisung aus dem vorherigen Beispiel, um eine materialisierte Ansicht zu erstellen. Die materialisierte Ansicht aktualisiert automatisch die Anzahl der ausstehenden Services, wenn die Basistabelle neue Daten erhält.

```
CREATE MATERIALIZED VIEW mv_total_pending_service
AUTO REFRESH YES
AS
SELECT
a.all_data.data.pnr.type::varchar type_info,
a.all_data.data.pnr.pnrid::varchar pnr_id ,
a.all_data.data.pnr.bookingIdentifier::varchar booking_id,
a.all_data.data.pnr.version::varchar version_info,
COUNT(*) AS total_pending_service
FROM test_json a,
  a.all_data.data.pnr.PendingService c
GROUP BY 1,2,3,4;
```

## Verwenden von PIVOT und UNPIVOT mit halbstrukturierten Daten
<a name="super-examples-pivot"></a>

In der folgenden Anweisung wird PIVOT für die `partname`-Spalte verwendet, um den Durchschnittspreis jedes Teils zurückzugeben.

```
SELECT *
FROM 
(
SELECT
c.partname::varchar, c.price
FROM test_json a, 
  a.all_data.data.pnr.parts c) 
PIVOT (AVG(price) for partname IN ('prop', 'rudder', 'wing'));
            
 
 prop       | rudder             |  wing
------------+--------------------+--------
 10.33      | 2.71               |  11.50
```

Im vorherigen Beispiel werden die Ergebnisse in Spalten umgewandelt. Das folgende Beispiel zeigt eine GROUP BY-Abfrage, die die Durchschnittspreise in Zeilen und nicht in Spalten zurückgibt.

```
SELECT partname, avg(price)
FROM (
SELECT
c.partname::varchar, c.price
FROM test_json a, 
  a.all_data.data.pnr.parts c)
WHERE partname IN ('prop', 'rudder', 'wing')
GROUP BY partname;
            
 partname |  avg
----------+-------
 prop     | 10.33
 rudder   |  2.71
 wing     | 11.50
```

Im Folgenden finden Sie ein PIVOT Beispiel mit `manufacturer` als impliziter Spalte.

```
SELECT *
FROM (
SELECT
c.quality, c.manufacturer::varchar
FROM test_json a, 
  a.all_data.data.pnr.parts c) PIVOT (
count(*) FOR quality IN (1, 2, NULL)
);
            
 manufacturer      | 1  | 2  | null
-------------------+----+----+------
 local parts co    | 1  | 1  |  1
 big parts co      | 1  | 1  |  1
 small parts co    | 1  | 0  |  2
```

Im Folgenden finden Sie ein UNPIVOT-Beispiel für die `quality`-Spalte.

```
SELECT *
FROM 
(
SELECT
c.quality as quality
FROM test_json a, 
  a.all_data.data.pnr.parts c) 
UNPIVOT (cnt FOR column_header IN (quality));
            
 column_header   | cnt
-----------------+----
 quality         | 2    
 quality         | 1    
 quality         | 1    
 quality         | 2    
 quality         | 1
```