ALTER TABLE APPEND - Amazon Redshift

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.

ALTER TABLE APPEND

Fügt einer Zieltabelle Zeilen hinzu, indem Daten aus einer vorhandenen Quelltabelle verschoben werden. Daten in der Quelltabelle werden zu entsprechenden Spalten in der Zieltabelle verschoben. Die Reihenfolge der Spalten spielt keine Rolle. Nachdem die Daten der Zieltabelle erfolgreich angefügt wurden, ist die Quelltabelle leer. ALTERTABLEAPPENDist normalerweise viel schneller als ein ähnlicher CREATETABLEALS INSERT INTO OP-Vorgang, da Daten verschoben und nicht dupliziert werden.

Anmerkung

ALTERTABLEAPPENDverschiebt Datenblöcke zwischen der Quelltabelle und der Zieltabelle. Um die Leistung zu verbessern, ALTER TABLE APPEND wird der Speicher im Rahmen des Anfügevorgangs nicht komprimiert. Dies hat zur Folge, dass die Nutzung von Arbeitsspeicher vorübergehend zunimmt. Um den Speicherplatz wieder zurückzugewinnen, führen Sie eine VACUUM-Operation durch.

Spalten mit den gleichen Namen müssen identische Spaltenattribute besitzen. Wenn entweder die Quelltabelle oder die Zieltabelle Spalten enthält, die in der anderen Tabelle nicht vorhanden sind, geben Sie mit den FILLTARGET Parametern IGNOREEXTRA oder an, wie zusätzliche Spalten verwaltet werden sollen.

Sie können keine Identitätsspalten anfügen. Wenn beide Tabellen eine Identitätsspalte enthalten, ist der Befehl nicht erfolgreich. Wenn nur eine Tabelle über eine Identitätsspalte verfügt, geben Sie den IGNOREEXTRA Parameter FILLTARGET oder an. Weitere Informationen finden Sie unter ALTERTABLEAPPENDHinweise zur Nutzung.

Sie können eine GENERATED BY IDENTITY AS-Spalte DEFAULT anhängen. Sie können Spalten, die als GENERATED BY DEFAULT AS definiert sind, IDENTITY mit Werten aktualisieren, die Sie angeben. Weitere Informationen finden Sie unter ALTERTABLEAPPENDHinweise zur Nutzung.

Bei der Zieltabelle muss es sich um eine permanente Tabelle handeln. Die Quelle kann jedoch eine permanente Tabelle oder eine materialisierte Ansicht sein, die für die Streaming-Erfassung konfiguriert ist. Beide Objekte müssen den gleichen Verteilungsstil und Verteilungsschlüssel verwenden, wenn einer definiert wurde. Wenn die Objekte sortiert sind, müssen beide Objekte den gleichen Sortierstil verwenden und die gleichen Spalten als Sortierschlüssel definieren.

Ein ALTER TABLE APPEND Befehl wird sofort nach Abschluss des Vorgangs automatisch festgeschrieben. Es kann kein Rollback ausgeführt werden. Sie können nicht ALTER TABLE APPEND innerhalb eines Transaktionsblocks laufen (... BEGIN END). Weitere Informationen zu Transaktionen finden Sie unter Serialisierbare Isolierung.

Erforderliche Berechtigungen

Je nach ALTER TABLE APPEND Befehl ist eines der folgenden Rechte erforderlich:

  • Superuser

  • Benutzer mit der ALTER TABLE Systemberechtigung

  • Benutzer mit DELETE und SELECT Berechtigungen für die Quelltabelle und INSERT Berechtigungen für die Zieltabelle

Syntax

ALTER TABLE target_table_name APPEND FROM [ source_table_name | source_materialized_view_name ] [ IGNOREEXTRA | FILLTARGET ]

Das Anhängen aus einer materialisierten Ansicht funktioniert nur, wenn Ihre materialisierte Ansicht  für Streaming-Aufnahme in eine materialisierte Ansicht konfiguriert ist.

Parameter

target_table_name

Der Name der Tabelle, an die die Zeilen angefügt werden. Geben Sie einfach den Namen der Tabelle an, oder verwenden Sie das Format schema_name.table_name, um ein spezifisches Schema zu verwenden. Bei der Zieltabelle muss es sich um eine vorhandene permanente Tabelle handeln.

FROMsource_table_name

Der Name der Tabelle, die die Zeilen bereitstellt, die angefügt werden sollen. Geben Sie einfach den Namen der Tabelle an, oder verwenden Sie das Format schema_name.table_name, um ein spezifisches Schema zu verwenden. Bei der Quelltabelle muss es sich um eine vorhandene permanente Tabelle handeln.

FROMName der materialisierten_Quellansicht

Der Name der materialisierten Ansicht, die die Zeilen bereitstellt, die angefügt werden sollen. Das Anhängen aus einer materialisierten Ansicht funktioniert nur, wenn Ihre materialisierte Ansicht  für Streaming-Aufnahme in eine materialisierte Ansicht konfiguriert ist. Die materialisierte Quellansicht muss bereits vorhanden sein.

IGNOREEXTRA

Ein Schlüsselwort, das angibt, dass Daten in den zusätzlichen Spalten verworfen werden sollen, wenn die Quelltabelle Spalten enthält, die nicht in der Zieltabelle vorhanden sind. Du kannst es nicht mit verwenden. IGNOREEXTRA FILLTARGET

FILLTARGET

Ein Schlüsselwort, das angibt, dass, wenn die Zieltabelle Spalten enthält, die in der Quelltabelle nicht vorhanden sind, die Spalten mit dem DEFAULT Spaltenwert gefüllt werden sollen, sofern einer definiert wurde, oderNULL. Sie können nicht IGNOREEXTRA mit verwendenFILLTARGET.

ALTERTABLEAPPENDHinweise zur Nutzung

ALTERTABLEAPPENDverschiebt nur identische Spalten aus der Quelltabelle in die Zieltabelle. Die Reihenfolge der Spalten spielt keine Rolle.

Wenn entweder die Quelltabelle oder die Zieltabelle zusätzliche Spalten enthält, verwenden Sie eine FILLTARGET oder IGNOREEXTRA gemäß den folgenden Regeln:

  • Wenn die Quelltabelle Spalten enthält, die in der Zieltabelle nicht vorhanden sind, schließen Sie einIGNOREEXTRA. Durch diesen Befehl werden die zusätzlichen Spalten in der Quelltabelle ignoriert.

  • Wenn die Zieltabelle Spalten enthält, die in der Quelltabelle nicht vorhanden sind, schließen Sie sie einFILLTARGET. Der Befehl füllt die zusätzlichen Spalten in der Zieltabelle entweder mit dem Standardspaltenwert oder mit dem IDENTITY Wert, falls einer definiert wurde, oderNULL.

  • Wenn sowohl die Quelltabelle als auch die Zieltabelle zusätzliche Spalten enthalten, ist der Befehl nicht erfolgreich. Sie können nicht sowohl als FILLTARGET auch verwendenIGNOREEXTRA.

Wenn in den beiden Tabellen eine Spalte mit dem gleichen Namen, jedoch unterschiedlichen Attributen vorhanden ist, ist der Befehl nicht erfolgreich. Gleich benannten Spalten müssen die folgenden Attribute gemeinsam sein:

  • Datentyp

  • Spaltengröße

  • Kompressionskodierung

  • Nicht null

  • Sortierstil

  • Sortierschlüsselspalten

  • Verteilungsstil

  • Verteilungschlüsselspalten

Sie können keine Identitätsspalten anfügen. Wenn sowohl die Quelltabelle als auch die Zieltabelle Identitätsspalten enthalten, ist der Befehl nicht erfolgreich. Wenn nur die Quelltabelle über eine Identitätsspalte verfügt, fügen Sie den IGNOREEXTRA Parameter hinzu, sodass die Identitätsspalte ignoriert wird. Wenn nur die Zieltabelle über eine Identitätsspalte verfügt, fügen Sie den FILLTARGET Parameter hinzu, sodass die Identitätsspalte gemäß der für die Tabelle definierten IDENTITY Klausel aufgefüllt wird. Weitere Informationen finden Sie unter DEFAULT.

Sie können eine Standard-Identitätsspalte an die ALTER TABLE APPEND Anweisung anhängen. Weitere Informationen finden Sie unter CREATE TABLE.

ALTERTABLEAPPENDBeispiele

Angenommen, Ihre Organisation verwaltet eine Tabelle, SALES _MONTHLY, um aktuelle Verkaufstransaktionen zu erfassen. Sie möchten jeden Monat Daten aus der SALES Transaktionstabelle in die Tabelle verschieben.

Sie können die folgenden TRUNCATE Befehle INSERT INTO und verwenden, um die Aufgabe auszuführen.

insert into sales (select * from sales_monthly); truncate sales_monthly;

Sie können dieselbe Operation jedoch viel effizienter ausführen, indem Sie einen ALTER TABLE APPEND Befehl verwenden.

Führen Sie zunächst eine Abfrage für die Systemkatalogtabelle PG_ _ TABLE DEF aus, um zu überprüfen, ob beide Tabellen gleiche Spalten mit identischen Spaltenattributen enthalten.

select trim(tablename) as table, "column", trim(type) as type, encoding, distkey, sortkey, "notnull" from pg_table_def where tablename like 'sales%'; table | column | type | encoding | distkey | sortkey | notnull -----------+------------+-----------------------------+----------+---------+---------+-------- sales | salesid | integer | lzo | false | 0 | true sales | listid | integer | none | true | 1 | true sales | sellerid | integer | none | false | 2 | true sales | buyerid | integer | lzo | false | 0 | true sales | eventid | integer | mostly16 | false | 0 | true sales | dateid | smallint | lzo | false | 0 | true sales | qtysold | smallint | mostly8 | false | 0 | true sales | pricepaid | numeric(8,2) | delta32k | false | 0 | false sales | commission | numeric(8,2) | delta32k | false | 0 | false sales | saletime | timestamp without time zone | lzo | false | 0 | false salesmonth | salesid | integer | lzo | false | 0 | true salesmonth | listid | integer | none | true | 1 | true salesmonth | sellerid | integer | none | false | 2 | true salesmonth | buyerid | integer | lzo | false | 0 | true salesmonth | eventid | integer | mostly16 | false | 0 | true salesmonth | dateid | smallint | lzo | false | 0 | true salesmonth | qtysold | smallint | mostly8 | false | 0 | true salesmonth | pricepaid | numeric(8,2) | delta32k | false | 0 | false salesmonth | commission | numeric(8,2) | delta32k | false | 0 | false salesmonth | saletime | timestamp without time zone | lzo | false | 0 | false

Betrachten Sie als Nächstes die Größe jeder Tabelle.

select count(*) from sales_monthly; count ------- 2000 (1 row) select count(*) from sales; count ------- 412,214 (1 row)

Führen Sie nun den folgenden ALTER TABLE APPEND Befehl aus.

alter table sales append from sales_monthly;

Betrachten Sie erneut die Größe jeder Tabelle. Die MONTHLY Tabelle SALES _ hat jetzt 0 Zeilen, und die SALES Tabelle ist um 2000 Zeilen gewachsen.

select count(*) from sales_monthly; count ------- 0 (1 row) select count(*) from sales; count ------- 414214 (1 row)

Wenn die Quelltabelle mehr Spalten als die Zieltabelle hat, geben Sie den IGNOREEXTRA Parameter an. Im folgenden Beispiel wird der IGNOREEXTRA Parameter verwendet, um zusätzliche Spalten in der LISTING Tabelle SALES _ zu ignorieren, wenn sie an die SALES Tabelle angehängt werden.

alter table sales append from sales_listing ignoreextra;

Wenn die Zieltabelle mehr Spalten als die Quelltabelle hat, geben Sie den FILLTARGET Parameter an. Im folgenden Beispiel wird der FILLTARGET Parameter verwendet, um Spalten in der REPORT Tabelle SALES _ aufzufüllen, die in der MONTH Tabelle SALES _ nicht vorhanden sind.

alter table sales_report append from sales_month filltarget;

Das folgende Beispiel zeigt ein Beispiel für die Verwendung ALTER TABLE APPEND mit einer materialisierten Ansicht als Quelle.

ALTER TABLE target_tbl APPEND FROM my_streaming_materialized_view;

Die hier verwendeten Namen der Tabelle und der materialisierten Ansicht sind Beispiele. Das Anhängen aus einer materialisierten Ansicht funktioniert nur, wenn Ihre materialisierte Ansicht  für Streaming-Aufnahme in eine materialisierte Ansicht konfiguriert ist. Es werden alle Datensätze in der materialisierten Quellansicht in eine Zieltabelle mit demselben Schema wie die materialisierte Ansicht verschoben und die materialisierte Ansicht bleibt unverändert. Dies ist dasselbe Verhalten wie bei einer Tabelle als Datenquelle.