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
Erstellen von skalaren Amazon-Redshift-Spalten aus aufgeteilten Daten
Schemalose Daten, die in SUPER gespeichert sind, können die Leistung von Amazon Redshift beeinflussen. Beispiel: Filterprädikate oder Join-Bedingungen als Scans mit eingeschränkter Reichweite können Zonenzuordnungen nicht effektiv verwenden. Benutzer und BI-Tools können materialisierte Ansichten als konventionelle Darstellung der Daten verwenden und die Leistung analytischer Abfragen steigern.
Die folgende Abfrage scannt die materialisierte Ansicht super_mv und filtert nach o_orderstatus.
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_orderstatus = 'F';
Untersuchen Sie stl_scan, um zu überprüfen, ob Amazon Redshift Zonenzuordnungen beim Scannen von o_orderstatus mit eingeschränkter Reichweite nicht effektiv verwenden kann.
SELECT slice, is_rrscan FROM stl_scan WHERE query = pg_last_query_id() AND perm_table_name LIKE '%super_mv%'; slice | is_rrscan -------+----------- 0 | f 1 | f 5 | f 4 | f 2 | f 3 | f (6 rows)
Im folgenden Beispiel wird die materialisierte Ansicht super_mv angepasst, um skalare Spalten aus den aufgeteilten Daten zu erstellen. In diesem Fall wandelt Amazon Redshift o_orderstatus von SUPER zu VARCHAR um. Geben Sie außerdem o_orderstatus als Sortierschlüssel für super_mv aus.
CREATE MATERIALIZED VIEW super_mv distkey(c_custkey) sortkey(c_custkey, o_orderstatus) AS ( SELECT c_custkey, o.o_orderstatus::VARCHAR AS o_orderstatus, o.o_totalprice, o_idx FROM customer_orders_lineitem c, c.c_orders o AT o_idx );
Stellen Sie nach dem erneuten Ausführen der Abfrage sicher, dass Amazon Redshift jetzt Zonenzuordnungen verwenden kann.
SELECT v.o_totalprice FROM super_mv v WHERE v.o_orderstatus = 'F';
Sie können überprüfen, ob der Scan mit eingeschränkter Reichweite jetzt Zonenzuordnungen wie folgt verwendet.
SELECT slice, is_rrscan FROM stl_scan WHERE query = pg_last_query_id() AND perm_table_name LIKE '%super_mv%'; slice | is_rrscan -------+----------- 0 | t 1 | t 2 | t 3 | t 4 | t 5 | t (6 rows)