Amazon Redshift unterstützt ab dem 1. November 2025 nicht mehr die Erstellung neuer Python-UDFs. Wenn Sie Python-UDFs verwenden möchten, erstellen Sie die UDFs vor diesem Datum. Bestehende Python-UDFs funktionieren weiterhin wie gewohnt. Weitere Informationen finden Sie im Blog-Posting
Beispiele für UNNEST
UNNEST ist ein Parameter in der FROM-Klausel, der verschachtelte Daten zu Spalten erweitert, die die nicht verschachtelten Elemente der Daten enthalten. Informationen zum Entschachteln von Daten finden Sie unter Abfragen halbstrukturierter Daten.
Mit der folgenden Anweisung wird die Tabelle orders erstellt und aufgefüllt, die die Spalte products mit Arrays von Produkt-IDs enthält. Für die Beispiele in diesem Abschnitt werden die Beispieldaten in dieser Tabelle verwendet.
CREATE TABLE orders ( order_id INT, products SUPER ); -- Populate table INSERT INTO orders VALUES (1001, JSON_PARSE('[ { "product_id": "P456", "name": "Monitor", "price": 299.99, "quantity": 1, "specs": { "size": "27 inch", "resolution": "4K" } } ] ')), (1002, JSON_PARSE(' [ { "product_id": "P567", "name": "USB Cable", "price": 9.99, "quantity": 3 }, { "product_id": "P678", "name": "Headphones", "price": 159.99, "quantity": 1, "specs": { "type": "Wireless", "battery_life": "20 hours" } } ] '));
Im Folgenden finden Sie einige Beispiele für das Entschachteln von Abfragen mit den Beispieldaten unter Verwendung der PartiQL-Syntax.
Entschachteln eines Arrays ohne OFFSET-Spalte
Die folgende Abfrage entschachtelt die SUPER-Arrays in der Produktspalte, wobei jede Zeile ein Element aus der Bestellung order_id darstellt.
SELECT o.order_id, unnested_products.product FROM orders o, UNNEST(o.products) AS unnested_products(product);order_id | product ----------+----------------------------------------------------------------------------------------------------------------------------- 1001 | {"product_id":"P456","name":"Monitor","price":299.99,"quantity":1,"specs":{"size":"27 inch","resolution":"4K"}} 1002 | {"product_id":"P567","name":"USB Cable","price":9.99,"quantity":3} 1002 | {"product_id":"P678","name":"Headphones","price":159.99,"quantity":1,"specs":{"type":"Wireless","battery_life":"20 hours"}} (3 rows)
Die folgende Abfrage findet in jeder Bestellung das teuerste Produkt.
SELECT o.order_id, MAX(unnested_products.product) FROM orders o, UNNEST(o.products) AS unnested_products(product);order_id | product ----------+----------------------------------------------------------------------------------------------------------------------------- 1001 | {"product_id":"P456","name":"Monitor","price":299.99,"quantity":1,"specs":{"size":"27 inch","resolution":"4K"}} 1002 | {"product_id":"P678","name":"Headphones","price":159.99,"quantity":1,"specs":{"type":"Wireless","battery_life":"20 hours"}} (2 rows)
Entschachteln eines Arrays mit einer impliziten OFFSET-Spalte
Die folgende Abfrage verwendet den Parameter UNNEST ... WITH OFFSET, um die nullbasierte Position jedes Produkts innerhalb des Bestellungs-Arrays anzuzeigen.
SELECT o.order_id, up.product, up.offset_col FROM orders o, UNNEST(o.products) WITH OFFSET AS up(product);order_id | product | offset_col ----------+-----------------------------------------------------------------------------------------------------------------------------+------------ 1001 | {"product_id":"P456","name":"Monitor","price":299.99,"quantity":1,"specs":{"size":"27 inch","resolution":"4K"}} | 0 1002 | {"product_id":"P567","name":"USB Cable","price":9.99,"quantity":3} | 0 1002 | {"product_id":"P678","name":"Headphones","price":159.99,"quantity":1,"specs":{"type":"Wireless","battery_life":"20 hours"}} | 1 (3 rows)
Da die Anweisung keinen Alias für die Offset-Spalte angibt, benennt Amazon Redshift sie standardmäßig mit offset_col.
Entschachteln eines Arrays mit einer expliziten OFFSET-Spalte
Die folgende Abfrage verwendet den Parameter UNNEST ... WITH OFFSET, um die Produkte innerhalb ihrer Bestellungs-Arrays anzuzeigen. Der Unterschied zwischen dieser Abfrage und der Abfrage im vorherigen Beispiel besteht darin, dass sie die Offset-Spalte explizit mit dem Alias idx benennt.
SELECT o.order_id, up.product, up.idx FROM orders o, UNNEST(o.products) WITH OFFSET AS up(product, idx);order_id | product | idx ----------+-----------------------------------------------------------------------------------------------------------------------------+----- 1001 | {"product_id":"P456","name":"Monitor","price":299.99,"quantity":1,"specs":{"size":"27 inch","resolution":"4K"}} | 0 1002 | {"product_id":"P567","name":"USB Cable","price":9.99,"quantity":3} | 0 1002 | {"product_id":"P678","name":"Headphones","price":159.99,"quantity":1,"specs":{"type":"Wireless","battery_life":"20 hours"}} | 1 (3 rows)