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. ALTER TABLE APPEND ist in der Regel sehr viel schneller als die vergleichbaren Operationen CREATE TABLE AS oder INSERT, da die Daten verschoben und nicht dupliziert werden.

Anmerkung

ALTER TABLE APPEND verschiebt Datenblöcke zwischen der Quelltabelle und der Zieltabelle. Um die Leistung zu verbessern, komprimiert ALTER TABLE APPEND als Teil der append-Operation keinen Speicher. 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 weder die Quelltabelle noch die Zieltabelle Spalten enthält, die in der jeweils anderen Tabelle nicht vorhanden sind, verwenden Sie die Parameter IGNOREEXTRA oder FILLTARGET, um anzugeben, 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 eine Identitätsspalte enthält, verwenden Sie die Parameter FILLTARGET oder IGNOREEXTRA. Weitere Informationen finden Sie unter Nutzungshinweise für ALTER TABLE APPEND.

Sie können eine GENERATED BY DEFAULT AS IDENTITY-Spalte anhängen. Sie können als GENERATED BY DEFAULT AS IDENTITY-Spalten mit von Ihnen angegebenen Werten aktualisieren. Weitere Informationen finden Sie unter Nutzungshinweise für ALTER TABLE APPEND.

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.

Der Befehl ALTER TABLE APPEND führt automatisch vor Abschluss der Operation einen Commit aus. Es kann kein Rollback ausgeführt werden. Sie können ALTER TABLE APPEND nicht innerhalb eines Transaktionsblocks (BEGIN ... END). Weitere Informationen Transaktionen finden Sie unter Serialisierbare Isolierung.

Erforderliche Berechtigungen

Je nach verwendetem Befehl ALTER TABLE APPEND ist eine der folgenden Berechtigungen erforderlich:

  • Superuser

  • Benutzer mit der Systemberechtigung ALTER TABLE

  • Benutzer mit Berechtigungen DELETE und SELECT für die Quelltabelle und der Berechtigung INSERT 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.

FROM source_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.

FROM source_materialized_view_name

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. Sie können IGNOREEXTRA nicht mit FILLTARGET verwenden.

FILLTARGET

Ein Schlüsselwort, das angibt, dass die Spalten mit dem Spaltenwert DEFAULT, wenn definiert, oder NULL ausgefüllt werden sollen, wenn die Zieltabelle Spalten enthält, die nicht in der Quelltabelle vorhanden sind. Sie können IGNOREEXTRA nicht mit FILLTARGET verwenden.

Nutzungshinweise für ALTER TABLE APPEND

ALTER TABLE APPEND verschiebt nur identische Spalten aus der Quelltabelle in die Zieltabelle. Die Reihenfolge der Spalten spielt keine Rolle.

Wenn weder die Quelltabelle noch die Zieltabelle zusätzliche Spalten enthält, verwenden Sie FILLTARGET oder IGNOREEXTRA entsprechend den folgenden Regeln:

  • Wenn die Quelltabelle Spalten enthält, die in der Zieltabelle nicht vorhanden sind, verwenden Sie IGNOREEXTRA. 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, verwenden Sie FILLTARGET. Der Befehl füllt die zusätzlichen Spalten in der Zieltabelle entweder mit dem Standardwert für die Spalte oder dem Wert IDENTITY aus, wenn definiert, oder NULL.

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

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 eine Identitätsspalte enthält, verwenden Sie den Parameter IGNOREXTRA, sodass die Identitätsspalte ignoriert wird. Wenn nur die Zieltabelle eine Identitätsspalte enthält, verwenden Sie den Parameter FILLTARGET, sodass die Identitätsspalte entsprechend der IDENTITY-Klausel ausgefüllt wird, die für die Tabelle definiert ist. Weitere Informationen finden Sie unter DEFAULT.

Sie können eine Standard-Identity-Spalte mit der Anweisung ALTER TABLE APPEND anhängen. Weitere Informationen finden Sie unter CREATE TABLE.

Beispiele für ALTER TABLE APPEND

Nehmen Sie an, Ihre Organisation pflegt eine Tabelle namens SALES_MONTHLY, um aktuelle Verkaufstransaktionen zu erfassen. Sie möchten jeden Monat Daten aus der Transaktionstabelle in die Tabelle SALES verschieben.

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

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

Sie können diese Operation jedoch sehr viel effizienter ausführen, indem Sie den Befehl ALTER TABLE APPEND 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 Spalte SALES_MONTHLY hat nun 0 Zeilen und die Spalte SALES ist um 2000 Zeilen größer geworden.

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 enthält, geben Sie den Parameter IGNOREEXTRA an. Im folgenden Beispiel wird der Parameter IGNOREEXTRA verwendet, um beim Anfügen an die Tabelle SALES zusätzliche Spalten in der Tabelle SALES_LISTING zu ignorieren.

alter table sales append from sales_listing ignoreextra;

Wenn die Zieltabelle mehr Spalten als die Quelltabelle enthält, geben Sie den Parameter FILLTARGET an. Im folgenden Beispiel wird der Parameter FILLTARGET verwendet, um Spalten in der Tabelle SALES_REPORT auszufüllen, die in der Tabelle SALES_MONTH nicht vorhanden sind.

alter table sales_report append from sales_month filltarget;

Das folgende Beispiel zeigt ein Beispiel für die Verwendung von 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.